Hello! I thought I'd share with you how I'm trying to maintain a distraction free environment at work (and at home).
Ashwin.
Tuesday, July 26, 2016
Distraction free environment
Thursday, August 01, 2013
Some good Cassandra, Lucene presentations and misc Comp-Sci posts
About 2 months ago I attended the Cassandra Summit at San Francisco. Yes, I've been meaning to write this blog for a while now. I was surprised (pleasantly) to see such a good turn out. Lot of energy and real world use cases. I didn't get to attend all the talks of course, but all the slides and videos are online. Here are some good ones:
- https://speakerdeck.com/
mheffner/time-series-metrics- with-cassandra - http://www.slideshare.net/
jaykumarpatel/cassandra-data- modeling-best-practices -
http://www.slideshare.net/
SergeyPetrunya/mysqlconf2013- mariadbcassandrainteroperabili ty
- http://vanillajava.blogspot.
com/2013/07/c-like-java-for- low-latency.html - Safepoints, memcpy, and Unsafe.copyMemory
- Mechanically sympathetic Functional Programming (ahem Scala)
-
http://uberpython.wordpress.
com/2012/09/23/why-im-not- leaving-python-for-go/ - http://andrewwdeane.blogspot.
com/2013/05/the-reliability- of-go.html - http://golang.org/doc/faq#
exceptions
- http://markdownpad.com - for Windows users (paid version can even do tables)
- http://dillinger.io - for in-browser use
- Github's syntax coloring using Bayesian classifiers
- Bayes network for code recommendations
- Markov models - http://pkghosh.wordpress.com/
2013/04/15/smarter-email- marketing-with-markov-model/ - Neural nets - http://blog.forecast.io/
cleaning-radar-images-using- neural-nets-computer-vision/ - A comprehensive path-finding library for grid based games
- (Geo hashing) Slightly old but still a fun encoding scheme
- Search engine basics with cool tools
- Switch statement implementations in C/C++
- Spark Streaming: Fast Distributed Stream Processing with a High-Level API
- Scalable and Flexible Machine Learning with Chris Severs and Vitaly Gordon
- BDB is now AGPL. Out with BDB, in with LMDB
- PG and MySQL driver internals
- The write cache: Swap insanity tome III
- Personalized-Search-on-
the-Largest-Flash-Sale-Site- in-America - Rapid-pruning-of-search-space-through-hierarchical-matching
Saturday, July 28, 2012
Interesting notes on user interface design
[Updated Mar 5, 2017]
I've been bookmarking these notes on UX design. Some of them are worth reading over and over. Well, ideally they should be applied but I'm a server-side engineer. So, the most I can do is identify applications of these concepts in the tools and devices I use:
- 5 Interface Laws Every Software Designer Should Know
- Fundamental Design Principles – For People Who Can't Design Good
- Ten Laws to Design By
- 14 Golden Eggs of Good UI Design
- Design Principles
- Dieter Rams: ten principles for good design
- Class notes on The Design of Everyday Things by Donald A. Norman
- iOS Human Interface Guidelines (Ahem.."The" UX bible)
- 5 Secrets of Apple’s UX Design
- Principles of user interface design
- 10 Usability Heuristics for User Interface Design - Jakob Nielsen
Until next time!
Ashwin.
Saturday, June 25, 2011
The Five Ws (and H) approach
A few days ago, I was trying to explain some technical concepts to a friend. After a bit of explaining I tried listing out reasons, places and times where those concepts would be applicable. I still thought that I had left out something. I then spent some time searching online for ways to - learn systematically and teach correctly by at least outlining the essentials of the problem and encouraging the learner to follow up in his/her own time.
Did I find anything? Of course I did. In fact I discovered too much information but found only some to be simple and interesting. My favorite is what you might think is obvious - The Five Ws approach. Also popular in problem solving is the Five Whys.
Apart from it being obvious, the Five Ws helps you to break down the problem into:
- When
- Where
- What
- Who
- Why
- How
Now, why is this simple technique relevant?
It is:
Simple
Easy to remember
Easy to explain
It serves as a starter guide to:
Formulate the right questions
Break down the problem
Cover/analyze all aspects of the problem - like why & why not, what & what not
It also helps us:
Remember better by understanding, instead of memorizing
Identify the problem by looking for signs (5 Ws)
It works quite nicely as:
A way to exchange ideas (5 Ws = 5 aspects)
A way to encourage people (even kids) to think deeper- (Systems thinking)
By supplying the first 5 questions when stumped
Progress to other approaches
A template to share and disseminate knowledge (5 Ws = 5 steps)
Like Design Patterns and Anti-patterns for software design
Simple reproducible steps for QA/Support/Services/junior members etc.
Here's a simple pictorial way to help you get started. I drew it for myself initially. It is built like a form where you can fill in the blanks, on the right hand side. I encourage you to print it out and use it in meetings too or even to teach your kids.
![]() |
The 5 Ws and H extended |
Until next time!
Thursday, May 19, 2011
Some tools you should not leave home without
In no specific order:
- After years of searching for hierarchical to-do list managers, frustrating outline and OPML editors, buggy project trackers I found this - ToDoList. It's clean, free (as in speech) and surprisingly, has really nice features
- yWork's brilliant diagram editor - Graphity or it's thick client cousin - yEd
- XMind for mind mapping and brainstorming
- A decent screen capture and annotation tool - Screenpresso
- Notepad++, naturally
Thursday, April 07, 2011
The little gem that is BusyBox (for Windows)
As a Windows user (no shame) I have, for years searched for a simple GNU-like toolkit - grep, awk, tail and other
such goodies enjoyed by Linux users. Yes, there's Cygwin but it's a
beast - too big and a pain to install. Sometimes, I've even resorted to starting a Linux VMWare image just to run a simple awk script to munge some log
files.
But today...today I found BusyBox and there's a compact 600KB BusyBox exe for Windows! What does it have? Well.. what does it not have?! It has all
the essentials:
[, [[, ar, ash, awk, base64, basename, bash, bbconfig, bunzip2, bzcat, bzip2, cal, cat, catv, cksum, cmp, comm, cp, cpio, cut, date, dc, dd, diff, dirname, dos2unix, echo, ed, egrep, env, expand, expr, false, fgrep, find, fold, getopt, grep, gunzip, gzip, hd, head, hexdump, kill, killall, length, ls, lzcat, lzma, lzop, lzopcat, md5sum, mkdir, mv, od, pgrep, pidof, printenv, printf, ps, pwd, rm, rmdir, rpm2cpio, sed, seq, sh, sha1sum, sha256sum, sha512sum, sleep, sort, split, strings, sum, tac, tail, tar, tee, test, touch, tr, true, uncompress, unexpand, uniq, unix2dos, unlzma, unlzop, unxz, unzip, usleep, uudecode, uuencode, vi, wc, wget, which, whoami, xargs, xz, xzcat, yes, zcatThis is where I'd use it the most - to compress and summarize JVM thread dumps for quick analysis. It's based on JPMP, but here's my version of it. First, download BusyBox for Windows and then use the simple script below to munge your JVM thread dump.
This is the first part of the script:
This is the awk pattern that is used by the script above.
All you have to do now is run it against your thread dump file:
jpmp.bat ..\jstack.out > ..\jstack.out.log
And it converts a huge file like this...
2011-04-07 20:44:06 Full thread dump Java HotSpot(TM) 64-Bit Server VM (16.2-b04 mixed mode): "TimerQueue" daemon prio=6 tid=0x000000004ec33000 nid=0x1268 in Object.wait() [0x000000004a3cf000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x0000000034004608> (a javax.swing.TimerQueue) at javax.swing.TimerQueue.run(TimerQueue.java:232) - locked <0x0000000034004608> (a javax.swing.TimerQueue) at java.lang.Thread.run(Thread.java:619) "D3D Screen Updater" daemon prio=8 tid=0x000000004af1e000 nid=0x186c in Object.wait() [0x000000004f40f000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x0000000034e16ba8> (a java.lang.Object) ... ... ... ... "Reference Handler" daemon prio=10 tid=0x0000000000823800 nid=0x18e4 in Object.wait() [0x000000004940f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x0000000034dda018> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:485) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) - locked <0x0000000034dda018> (a java.lang.ref.Reference$Lock) "VM Thread" prio=10 tid=0x0000000000820000 nid=0x14c4 runnable "GC task thread#0 (ParallelGC)" prio=6 tid=0x0000000000777800 nid=0x173c runnable "GC task thread#1 (ParallelGC)" prio=6 tid=0x0000000000779800 nid=0x4b8 runnable "GC task thread#2 (ParallelGC)" prio=6 tid=0x000000000077b000 nid=0x15d0 runnable "GC task thread#3 (ParallelGC)" prio=6 tid=0x000000000077c800 nid=0x199c runnable "VM Periodic Task Thread" prio=10 tid=0x0000000049580800 nid=0x1984 waiting on condition JNI global references: 1355
Into a tidy summary like this. Very useful if you have thread dumps from 20 servers taken every 30 seconds.
All this without leaving the comfort of your Windows system!
2 j.lang.Object.wait,j.io.PipedInputStream.read,j.io.PipedInputStream.read,sun.nio.cs.StreamDecoder.readBytes,sun.nio.cs.StreamDecoder.implRead,sun.nio.cs.StreamDecoder.read,j.io.InputStreamReader.read,j.io.BufferedReader.fill,j.io.BufferedReader.readLine,j.io.BufferedReader.readLine,sun.tools.jconsole.OutputViewer$PipeListener.run 1 sun.awt.windows.WToolkit.eventLoop,sun.awt.windows.WToolkit.run,j.lang.Thread.run 1 j.lang.Object.wait,sun.java2d.d3d.D3DScreenUpdateManager.run,j.lang.Thread.run 1 j.lang.Object.wait,jx.swing.TimerQueue.run,j.lang.Thread.run 1 j.lang.Object.wait,j.lang.ref.ReferenceQueue.remove,j.lang.ref.ReferenceQueue.remove,sun.java2d.Disposer.run,j.lang.Thread.run 1 j.lang.Object.wait,j.lang.ref.ReferenceQueue.remove,j.lang.ref.ReferenceQueue.remove,j.lang.ref.Finalizer$FinalizerThread.run 1 j.lang.Object.wait,j.lang.Object.wait,sun.awt.AWTAutoShutdown.run,j.lang.Thread.run 1 j.lang.Object.wait,j.lang.Object.wait,j.lang.ref.Reference$ReferenceHandler.run 1 j.lang.Object.wait,j.lang.Object.wait,j.awt.EventQueue.getNextEvent,j.awt.EventDispatchThread.pumpOneEventForFilters,j.awt.EventDispatchThread.pumpEventsForFilter,j.awt.EventDispatchThread.pumpEventsForHierarchy,j.awt.EventDispatchThread.pumpEvents,j.awt.EventDispatchThread.pumpEvents,j.awt.EventDispatchThread.run
Until next time!
Wednesday, March 23, 2011
What's missing in Google Search
Let's face it, most of the world relies on Google Search to find information on the web. I do. In this day and age of Facebook, Twitter, LinkedIn, social bookmarking sites and other "social applications", Google Search is still years behind.
Some basic features that are sorely missing from their flagship product:
- Linking to a search result. Even Google Maps has this feature, but Search does not
- Creating a bundle of links like Bitly from some selected search results
I've suggested this feature to Google a couple of times, but it seems to have fallen on deaf ears. I hope at least the Bing team is listening.
This is what I'd really love. To start with, at least:
(If you were wondering, I used Balsamiq to create the mock-up)
Friday, January 21, 2011
Shades Of Gray (Another fix for online reading)
(Mis)Quoting lines from Billy Joel's song "Shades of grey":
Shades of grey wherever I goIt has occurred to me (after being disappointed with the tiny 6" screen of the Kindle) that we spend a lot of time (those of us who do) on the computer staring at bright and mostly white computer screens. We've become accustomed to the brightness of the white backgrounds. I find it quite stressful to read against a white background for long hours.
.. .
Black and white is [not] how it should be
But shades of grey are the colors I see
After spending a few hours searching (alas) online, I found some tricks that have made my computer time even more pleasant.
1) Fix for PDFs - a poor man's ebook reader:
Change the background of all PDFs you read by changing your preferences in Adobe Acrobat Reader. Go to the toolbar "Edit > Preferences > Accessibility > Document color options". Check the box that says "Replace Document Colors" and choose a gray background as shown in the screenshot.
Note the background color - 192-192-192, the magic combination.
And this is what it will look like. You can view it in full screen mode and almost convince yourself that you are reading an ebook.
2) Fix for IntelliJ:
Something similar can be done for IntelliJ. Import this JAR file with color settings for IntelliJ 10 using "File > Import settings".
Who said "gray areas" are bad? Enjoy!
Wednesday, January 19, 2011
Making your online reading even more pleasant
What better way to read a whole bunch of articles that you've been saving for later than to "print" it all and read?
I'm a heavy user of Readable and Readability, but nothing beats printing everything into a PDF, logging off and then reading it comfortably on your ebook reader (if you have one, which I don't. Yet). Well..paper if you really have to.
After a lot of searching I found this wonderful addon for Firefox which lets you print all your webpages, html or text files on disk from the command-line. With this tool you can even write a batch file with all your links and print them into PDFs from the command line (via: MozillaWiki).
Once you've generated all your PDFs, you can even merge them all into a giant PDF using this.
And you are all set!
Monday, March 29, 2010
Make your online reading more pleasant
If you spend a lot of time reading online, like me then eye strain is probably your biggest complaint. You can stop worrying, because there's a beautiful tool called Readable.
No, don't worry it's free and does not need any installation. All you have to do is drag a link and drop it on to your Browser's Bookmarks Toolbar.
It turns this .....
into this...! It's the same web page, just the style has changed. Beautiful isn't it? You can revert back to the original by just clicking the page.
You can use the theme I use - just drag and drop this link into your Bookmarks and when you are on any web page just click this Readable bookmark. Or you can make one yourself. Here's the actual site with a tutorial - Readable theme setup.
Happy reading!
Sunday, March 21, 2010
Gmail productivity
For a long time, I wanted a simple tool that would merge my to-do list, draft letters and reminders with my email system. About a year or so ago Gmail introduced some nifty features that let me do just that. So, I thought I'd share them with you (a yr later).
First, configure Multiple Inboxes:
Go to Gmail settings and select the Multiple Inboxes tab and then type this in. You just need 1 pane, so add this
-in:trash AND (label:to-do OR in:drafts)
as the Search query and call the Pane "To do".[Update: May 9, 2011]
I now have 3 inboxes in addition to the main inbox. This needs 2 labels "to-do" and "constant"
Urgent:
-in:trash AND is:starred AND -label:constant
To do:
-in:trash AND -is:starred AND -label:constant AND (label:to-do OR in:drafts)
Long term/Constant reminders:
-in:trash AND -is:starred AND label:constant AND (label:to-do OR in:drafts)
Step 2 - Add a Filter to move those emails to the other Inbox:
Well this is all you will need. Don't worry, it's just 1 physical Inbox but different views to your emails.
Step 3 - Enjoy:
Now, you can just send a quick note to yourself from your Blackberry or office desktop to your Gmail account and it will go to the To do list. Even draft emails and blogs that you haven't finished writing will appear in this list. Cool huh?
Cheers!