Use Linux, learn new things

After 12+ years, I built a workstation from scratch. Hardware has come such a long way, but that is a post unto itself. Having always worked with Ubuntu and other debian variants it was time to venture into a more lean distro. I picked Arch Linux, on the recommendation of several colleagues. It’s been fun. Pacman and Yaourt are great package managers, and the rolling release model ensures access to the bleeding edge all the time.

Working in linux always makes you learn something new. Today, I found out a simple way to shutdown KDE gracefully.

# qdbus org.kde.ksmserver /KSMServer logout 0 0 0

Battle of the static site generators - part 1

I set myself a goal to write more this year - in fact, I attempted to do so once every week. This required me to look at my blog, which led to the inevitable: small changes in what it looked like, led to general dis-satisfcation with the current solution I have to publish my blog, which quickly ballooned into a whole host of activities.

Let me step back a bit.

Jekyll is really Hyde

I host my blog on github, using a static site generator - Jekyll. It is written in ruby, has some cool features. Overall, it is a decent solution, but I was never satisfied with options it provided. I have hesistated to hack at it, since ruby isn’t my language-du-jour, and most of the changes have been quite minimal. It is also extremely slow1.

As any self-respecting programmer is wont to do, instead of writing more posts, and meeting my goal, I delved right into fixing “bike-shed” – in this case, research and use a new static-site generator. Why, you ask? To you, non-existent, ever-questioning inquisitive you, I say – Why not?!

As with any successful hunt, one must make a list: One that shall help determine settle the battle of the generators.

  • Must be fast – I mean blazing.
  • Must be in one of the languages I currently hack in: go, nim, c, c++, javascript, python, rust, erlang
  • Should have good defaults – shouldn’t need plugins to perform basic features: syntax highlighting, responsive images, theming, permalinks and good markdown support.
  • Should have a few good themes
  • Good community support and/or documents

The contenders

Scouring the corners of the internet, I narrowed down on two final choices: Hexo and Hugo.

New shiny, shiny

They - are faster at generating 300+ pages. - are opinionated and hence have good defaults. - support most of features I am looking for except responsive images. - provide extended markdown support by default. - hosted by an active community.

Hugo FTW!

Both Hugo and Hexo are pretty good. They are fast enough for my use, and are implemented in modern languages that I am actively learning.

Hugo edged out Hexo: It has a few features that look promising and is a bit more fun to hack. It is written in go and this make it ideal. I am switching to Go as a primary language for my hacking needs. A lot of issues, and about 3000 forks is a good opportunity to contribute to a larg-ish project in go!

The choice is made. Now to move the herd. I have the daunting task of migrating 300+ posts that were originally posted on different blog engines of the past: blogger, wordpress, and octopress and finally jekyll.

In subsequent posts, I will write about a small tool I have built to help with fixing YAML frontmatter after converting posts from html to markdown.

  1. Slow is relative. I have about 300+ posts, and rendering them into HTML using jekyll, takes a few minutes. [return]

A month flies by

It has not been a great start. It, however, has been a busy one.

Don’t smoke (Stay quit!!) : Going strong!

The urge to smoke still surfaces on occasion. I have, however, been able to avoid every time. I must admit that it gets easier, but it always take a bit of an effort.m

Say yes more often: Doing ok.

I have caught myself a couple of times. Still needs work

Read a book a month: Failing miserably.

Read about 5 pages. Currently reading Norwegian Wood by Haruki Murakami. It is a very interesting book, but I have not been able to find time consistently. TV, netflix and youtube, usurps time away from other pursuits.

Write an app a month: Doing ok.

I have managed to write a small app to collect links and text and store those into a database. The app is written in go and is called notedown. It’s a lot of fun to hack something together. I am struggling with user authentication and authorization. auth0 is a great service to get started with implementing a good system for any app. At the moment, I have managed to put together a very rough version that kinda works.

At the moment, the goal is to get parity with apps like instapaper or evernote. The eventual goal, is to make notedown provide automatic tagging and aggregation of links. For the next month, I will focus on getting this solution deployed with a simple gui that is cross-platform.

If you are interested in the idea, you can reach me on twitter, or Gitter or hack at it on github.

Blog once a week: Failing miserably.

As this post illustrates, I have procrastinated all month long. I guess two posts a month is still better than none.

Goals for 2016

The word “resolutions”, feels forced. It feels like a ritual declaration of intent, followed immediately by inaction, and eventually concession that it was all in jest. This year, I am going to have some goals.

  • Don’t smoke (Stay quit!!)
  • Say yes more often
  • Read a book a month
  • Write an app a month
  • Blog once a week

Goals, feels more friendly, reachable, inviting almost.

Thoughts on ello

In the tradition of joining new social tools on the interwebs, here some thoughts on my experience.

The usual steps are:

  1. The first few hours – mostly spent exploring the interface, the features, mired in the comparisons between the “old” and the “new”

  2. At some point, the lack of interaction and content of previous networks – the constant buzz of twitter, the inane conversations of facebook etc. – forces me tp hunt for connections. Rampant, indiscriminate “friending” of people ensues.

  3. Invite a few select people, find the “old” connections from elsewhere, and waddle in the familiarity of all.

  4. Crickets .. not a thing is said. I realize I have nothing to say most days.

  5. Start contributing content, and attempt to find the niche for this medium

  6. All my kindergarden, high school and college buddies arrive, and make their presence felt

  7. Get lazy and stop contributing - the content feed become a wasteland.

I’m just about done with 3 on ello. It’s is going to a fun experience! Of that, I am sure. Some things I like on Ello, that I hope will break the pattern of “use-discard”:

  • Keyboard shortcuts!!

  • Friends/Noise. This is a great middle ground between the insanity that is Circles on Google+, the unmaintainable mess that is twitter lists, and the unknowable grouping in FB.

  • Multiple layout options. Makes the incessant updates manageable.

  • Markdown. Can’t thank the developers of Ello, enough for this!!

  • Ability to cross-post content between my blog and Ello. Thanks largely, to markdown.

Some posts from others more articulate than me:

@thomashawk quips on his thoughts on Ello. A great read. As always, TH has great content, and also copious amounts of patience in letting such tools grow, and helping it in the process (I’ve seen him do this for flickr, google+ and zooomr).

@budnitz One of the founders of Ello makes great points on starting up something new. Nice to see the passion and the vision. Kudos!

Cross-posted on Ello

My Eiffel Tower

Today’s post by Seth Godin, struck a cord. I am fortunate enough to get an opportunity to build “my Eiffel Tower”. I’m building two DSLs and associated infrastructure to allow storing lots of data in an in-memory database running in an embedded system. Wish me luck! Very excited, I might add!

Getting rid of passwords

I hate passwords. Seems like several smart people are on the case of getting rid of the “password”

Ink rotation - April 2014

I haven’t been very good with rotating the inks in the last year. Having accumulated more than my share of inks, it is time to have fewer pens inked and rotate colors.


I still couldn’t resist inking 9 pens! There are 3 pens I’m excited about – 2 parker 51 and a custom pen made out of 10000 year-old bogwood (a gift from Christina).


Getting git status on multiple directories

At any given time, I have a handful of git repositories that I work on. While typing in the command-line is great, it getting tiring when you have a several directories that you have to manually change to and check. The “git status” command can take the git repo and the working directory as input. That, and a little bash programming to the rescue. The following command, executes git status in every subdirectory that is a git repository.

for d in `find . -name ".git"`; do 
echo "processing $d ..."; 
git --git-dir=$d --work-tree=$d/.. status; 

Somethings should be obvious, but are not, obviously

Update: Apparently, I had accidentally hit a minor bug in pew. This has now been fixed.

Every so often, we spend several hours battling an issue, fighting linux or python or people or thoughts. The solution, often, leaps out when there has been a respite in the constant search for the solution. It’s the “duh” moment, that all of us feel. There is a little self-loathing, and relief at having arrived at solution. It is a moment of great pleasure, that I have learned to relish.

I am currently on a bit of MongoDB binge, and I was setting up a dev environment, using Crunchbang on Virtualbox. Since it is a clean install, I wanted to bootstrap using only pew and pip, which have recently become my favourite part of working in a pure python environment (no more sudo == yay!!)

I followed the instructions to install pew (which is quite straight-forward). All one should need is

    pip install pew

However, when I tried the same, the install worked, but I couldn’t run pew. It couldn’t find all the libraries it needed to load (virtualenv, in this case)

    [email protected]:~$ sudo pip install pew
    Downloading/unpacking pew
    Downloading pew-0.1.9.tar.gz
    Running (path:/tmp/pip_build_root/pew/ egg_info for package pew
    Successfully installed pew virtualenv
    Cleaning up...
    [email protected]:~$ pew ls
    Traceback (most recent call last):
    File "/usr/local/bin/pew", line 5, in
    from pkg_resources import load_entry_point
    File "/usr/lib/python2.7/dist-packages/", line 2707, in
    File "/usr/lib/python2.7/dist-packages/", line 686, in require
    needed = self.resolve(parse_requirements(requirements))
    File "/usr/lib/python2.7/dist-packages/", line 584, in resolve
    raise DistributionNotFound(req)
    pkg_resources.DistributionNotFound: virtualenv

After trying several things, including looking a lot of code in pew, the fix was quite simple. The version of setup-tools that comes default with python2.7 and crunchbang seems flawed.

    [email protected]:~$ sudo pip install -U setuptools
    Downloading/unpacking setuptools from
    Downloading setuptools-2.2-py2.py3-none-any.whl (540kB): 540kB downloaded
    Installing collected packages: setuptools
    Found existing installation: distribute 0.6.24dev-r0
    Uninstalling distribute:
    Successfully uninstalled distribute
    Successfully installed setuptools
    Cleaning up...
    [email protected]:~$ pew ls
    [email protected]:~$ pew new test
    New python executable in test/bin/python
    Installing setuptools, pip...done.
    Launching subshell in virtual environment. Type 'exit' or 'Ctrl+D' to return.

Bitcoins, new languages, freedom and other things

Some interesting links for the weekend:

Those wonderful tele-conference meetings

If you have worked for a large company, you know you have been here. Hilarious

2013 on twitter - a recap

Vizify makes a video out of the posts you have made on twitter in the last year. Christina, you are always my #1! Thank you for bringing this to my attention. As any self-respecting nerd would do, I immediately made one for myself. Doesn’t the world need yet another summary of meee!!

2013 on twitter

Thanks to my top followers

  1. Christina
  2. Ray Lian
  3. Dave Kell

Malaise of large companies

Another gem from the always spot-on Dave Winer. Microsoft could have owned netbooks.

The pathological need for large companies to focus on the wrong, to their own demise never ceases to amaze me. Why do dominant players lose out? Is it the incompetence of people in these companies? Is it the inability to articulate, convince, and move the masses within these companies?

Most often, it is the later. Perhaps, the collective, is bound to make safer choices and very often, the simple or obvious option is not the safe one.

It always comes down to doing the simple vs the easy. Simple is hard!

P.S: I work for a large company. It is a daily struggle, irrespective of the domain of the choice – design, code or cultural.

How to apologize to your users

There has been an increase in security breaches this year. This past week, two services I use were compromised - Tumblr and Apple Developer Connection. Both services informed me of the security breach, and one made me feel like they cared, and the other one didn’t. Perhaps I am reading too much into this, but at the very least, it illustrates how important language is, in conveying how much we care.

Apple Security Mail

Apple’s mail is clear, concise and inspires confidence in their ability to take care of my information. They state the purpose of this communication, tell me what they did about it, and what they were going to do to fix it in the future. Update: Apparently, it was a whitehat security guy doing his thing.

Tumblr Security Mail

Tumblr on the other hand, makes a whole bunch of assumptions (NO! I don’t read your staff blog), trivializes the security issue that was in their software (by ignoring to tell what it actually is), makes more work for me (change my passwords – for my own good, but none-the-less), insinuates that I should be doing things to take care of my passwords by buying other apps, and finally, throws a completely insincere apology.

Nowhere do they bother to mention:

  • Why they are getting in touch now
  • What the actual issue is (Some searching online explains why, but they should have mentioned it in the email)
  • That it was a Tumblr’s fault (Sniffed in transit .. who sends un-encoded password over http anymore?!)

The nonchalance of it all, really bothers me. Another small detail that Apple does well.

Inky obsessions

Have I mentioned the long-standing obsession with stationery, especially, fountain pens? Well, it is a bit of problem, really. In the last few months, I have started hoarding them. It started with one– a Lamy. Once I discovered how one can procure junk on eBay for very little money, I quickly ended up with a selection. As these things go, I suddenly had the increased “need” for inks that are not blue, or black. Nay, simple colours won’t do for the truly obsessed.

Here is the result of the latest rotation of inks and pens.

Ink Rotation - May 12th

Reclining airplane seats : work of the Devil!

Reclining airplane seats!! I shake my fist at thee. This one feature on airplanes has caused me untold miseries. Ok! I exaggerate .. a little. I live Vancouver, which is one the other side of the planet with respect to my hometown. As a result, I spend at least 30 hours on an plane, once a year. To compound, my 6’ 5” (196 cm) frame does not mix well with cramped spaces.

Dan Kois on Slate, says

everyone on the plane would be better off if no one reclined; the minor gain in comfort when you tilt your seat back 5 degrees is certainly offset by the discomfort when the person in front of you does the same. But of course someone always will recline her seat, like the people in the first row, or the woman in front of me, whom I hate. (At least we’re not in the middle seat. People who recline middle seats are history’s greatest monsters.)

Macro and Merlin agree.

Usually the conversation goes like this:

Me: “Sir/Ma’am, would you mind letting me know before you recline? My legs are up against the back of your seat, and if you do, my knees will be crushed.”
Potential Recliner: “Sure!”

*[2 hours later]: The seat reclines *
Me: “Gaaaa!!!”

In the four legs of the journey, if I get one “recliner” in the seat in front of me, I usually spend about 10 hours standing. Yes, I used to pay for my seat, and stand all the way through.

For the love of god, next time, maybe a quick check might be a good idea before you decide to recline. This way, you will help save crushed knees of some poor-souls.

Note: Cathay Pacific has an interesting solution. Their shell seats mean no reclining!.

Later: I spoke too soon! Cathay has reverted to their reclining seats. Who cares about numb butts. Just get up and walk!

Congrats Thomashawk!

Congrats to Thomashawk on the flickr interview!

“Why? Who?”, you ask. Thomashawk, photographer extraordinaire, has taught me a lot about photography. I’ve never met him, or gone on a photo-walk (to be fixed some day), but have learnt from his work, nonetheless.

I am compelled to write this, because, in some ways, there is a certain vindication to Flickr doing an article on him. He has been Flickr’s ardent fan, and critic. It’s been a long road! From the fun insanity of DMU(s), Zooomr, and flickr censorship to getting some well reserved recognition. Kudos!

Working with rpms (extract, list contents)

Unix. I love thee!

Extract an rpm without installing in to the current directory (really, the rpm command should support this):

$ rpm2cpio myrpmfile.rpm | cpio -idmv

*i: Restore archive

*d: Create leading directories where needed

*m: Retain previous file modification times when creating files

*v: Verbose i.e. display progress

List contents of an rpm:

$ rpm -qlp myrpmfile.rpm


A weekend of culinary delights

The great G.B Shaw, in “Man and Superman” (not that Superman), quipped, “There is no love sincerer than the love of food.” I had a weekend, that reminded me how much I love being fed. It also, reminded me of my wayward ways, in keeping the waistline in check, but I diverge. For this Christmas, I got the most amazing gift – the gift of an evening out trying out food that tasted, as good as it sounds and looks. Without much ado, here is the spread:

[gallery ids=“13701,13702,13704,13703,13705,13706,13707,13708,13709,13710,13711,13712”]

Thanks to all the hobby chefs for the wonderful delights, and the hospitality. I aspire to such skills in the kitchen, and perhaps I shall be able to pay it forward. Thanks to Christina for the most-awesomest gift ever (yes, we invent words here), and Sophie for “subbing” for the sick Tina (I owe you one, Sophie!)

If you want to know more about Social Bites (and you should), get in touch with the wonderful bundle of energy that is Annika! (@socialbites, Social bites on FB)

And the chefs: @wontongirljojo, @jonesboy