30 Apr 2017, 23:14

BART Gates

The BART gates are a good example of design gone wrong. The gates were designed to be operated from both directions, one could use the same gate to come in to a BART station or go out.

BART Gates

But in reality most BART stations operate with half the gates working in a single direction. The gates flash not available either on the inside or on the outside.

I assume it was confusing as people would try to come in and leave from the same gates as people don’t tend to think much when they are rushing to catch a train.

I can see the reason for having it operate in both directions - the trains arrive and leave at different times and hence passengers are moving either in or out. But since BART has increased frequency over the years, bidirectional BART gates are a hindrance.

23 Dec 2016, 12:37

Coffee shop

A bright but colorless coffee shop opens in your neighborhood. They have croissants, bagels and Gibraltar coffee. La Luz (a Spanish American band) plays in the background. You don’t recognize La Luz.

You think the shop is out of place. You wonder who are these folks at this coffee shop. Their colorless black rain jackets complement the white pale decor. They blend in.

The coffee shop acts as if they are a local institution. You scoff when the people tell their friends that they have been coming here forever. This place was here before they moved in nearby. The coffee shop is ancient — at least in their minds.

You feel foolish. You did the same thing as the “yuppies” at “your local coffee shop” four years ago.

(Thoughts from I went to newly opened Hearth coffee shop in Castro and laughed at the solidarity I felt towards Linea cafe in Mission, SF).

17 Mar 2016, 09:25

Vim CtrlP per directory cache

I use the awesome ctrlp in VIM. At any given point of time I work in multiple directories (git projects). This often pollutes my CtrlP MRU Cache.

For example - I get results for Api directory when I am modifying code in my Web directory. This is midly irritating. To solve this you can set the ctrlp_cache_dir with a prefix of the current directory. Here is a snippet to do that.

16 Mar 2016, 12:19

Week in review 7 March 2016

We went to Portland ( me, Belle, Vlad and Srik). It was Vlad’s good bye trip. He is moving to New York at the end of this week. This is partly sad and partly exciting.

I feel I expected a lot more from Portland the city due to pop culture references. It had good restaurants and bars - very good for a mid sized US city, but nothing made me feel like I can live here. The continuous gloomy rain did not help.

I finished reading Martin Amis’ Zone of Interest. It was a good dark fiction book set in Auschwitz. The book was very well researched.

At work I launched the customer portal for bright. This is going to be huge.

I had dinner at Foriegn Cinema for the first time. They have a very good bavette steak.

07 Mar 2016, 15:20

Week in review 29 Feb 2016
  • I spent the Sunday snow boarding at Heavenly resort in South Lake Tahoe. Thanks to the storm on Saturday night, there was fresh powder on all the slopes. It was a great day to snow board.
  • In related news it has been a wet week in the bay area, with 7 inches of rain. The fields were lush green on the way up to Tahoe, a welcome relief from the usual California gold color.
  • For the first time in my life, I went roller blading. Church of 8 Wheels is an event where you roller blade in a church in the Haight. Everyone was having a blast. The crowd was real friendly. I fell a few times. One of the places I should have checked out a long time ago in San Francisco.

17 Nov 2015, 10:48

Bye Bye Facebook.

This is a copy of my Goodbye message I posted internally at Facebook.

Monday, (Nov 16) is my last day at Facebook.I was looking at the goodbye posts former People of Facebook for inspiration for my post. But instead, I decided to generate a message from the awesome corpus there.

This computer generated artisanal message mostly captures what I want to say:

So i really want to take this opportunity to say, after 4+ years of wonderful journey, the coming monday (nov-16) will be my last day at facebook.

I’ve been a wonderful experience. Everyone i’ve worked with here truly cares about what is next in life. I have royally fucked up.

I feel sorry that I will never would have been able to doordash in. It is, of you all the facebook kool-aid. I’ll be strangers! the new friends around in the apartment. It’s user-base by mass and it won’t change how to stay cool. Wherever it is no immediate plans, i’m incredibly hard to analytics.

We all across the future where I decided to mobile-first. I absolutely fine without working on the company 4.5 years at facebook. Please don’t be a stranger.

I wouldn’t be who i am today if i hadn’t gone through the many refactors i did. There is so many good friends. Facebook is truly an incredible place to work.

I ’ll be moving up to san francisco.

Before i joined facebook, the goal was to get to this point. After about 6.5 years, it’s time for me to find some job in vietnam. I hope to take a part of sleep that no one of you will.

I am also incredibly smart and i’m really.

/end of generated message.

Here is my code https://gist.github.com/sheki/19c4f439dfbae074df00.

I wish people expressed their feelings in a standardized way using JSON or GraphQL.

24 May 2015, 22:04

RootConf 2015

I attended RootConf 2015 in Bangalore. A big shout out to HasGeek for putting together a good conference. I gave a talk on Rewriting Parse.com there.

I got a nice Introduction to SaltStack by Mike Place. Salt Stack looks like a cleaner better Chef/Puppet. A few Engineers I trust love it. Anand Chitipothu presented a biased comparison of how Postgres is better than MySQL. He mostly compared MySQL 5.5 with MyISAM. MySQL 5.6+ with InnoDB (the default option now) addresses majority of the issues pointed out in the talk. I loved the HTTP2 Primer by Cyrus Dasadia. It was simple introduction to the new standard.

I hosted a Database BoF with Anand. The discussion quickly split off into MySQL and the rest. A gentleman spoke about interesting problem of arranging data on to various storage layers according to access patterns in SAP HANA. Some one gave a good introduction to AerospikeDB. The MySQL group was mostly discussed HA strategies. MySQL looked like the main database of choice of people in the Bangalore tech scene. I did not find any serious deployments of non MySQL databases there. This was my first time hand holding a session, I liked it and for a moment considered a career as a Tech-Host.

Few women attended the conference. I guess “Women in Tech” is not an issue the Bangalore scene is talking about yet.

I met a few cool startups, a few users of Parse.com and a few old friends. I was happy to be part of RootConf.

21 Feb 2015, 00:18

A conversation to remember.

I sometimes wonder, why I blog but it is to often to tell myself a story. Time erodes your memories and you just have big events in your brain, but sometimes it is the small things that happen to you which you enjoy.

So today I republish a post of mine from 2009. I was an intern at Freie Universität in the great city of Berlin.

A couple of days ago I met a Sri Lankan man at the bus stand as it is my habit nowadays to speak to all people who look Indian. We got a bit chatty and we had a lively discussion, and the conversation quickly veered towards LTTE and Sri Lanka. This man a Tamil himself, he told me that his grandfather was a Chettiar from Tamil Nadu who had moved down to Sri Lanka to set up a business, surprised me by stating that he did not sympathize with the LTTE one bit. As the conversation began to get more and more intense he said that LTTE kidnapped kids and brainwashed them and trained them to wage the Elam’s war. It hit me that this was no different than Taliban or any other Muslim military outfit. He explained that the situation was grim back in Ceylon ( interestingly he reffered Sri Lanka as Ceylon always) and the LTTE used to kill people even Tamils who did not see eye to eye with their cause. He said that his family moved out of Sri Lanka in the 70s to Canada and Germany.

At this juncture I asked him what about Prabhakaran, he plainly said Prabhakaran has escaped with his close group of supporters and claims by the Lankan Army reports are nothing but propaganda. I pushed him a bit more on how can he be confident on the fact that Prabhakaran is alive, and he gave me a quick grin and said that he knew a lot of people in Lanka and no one believes he is dead, well I was surprised that Vellupillai Prabhakaran had such an indefatigable image in the minds of the people.

I asked him does he not sympathize with the Tamilians of Sri Lanka, and he said that the Tamils were big headed people (he himself was a tamil), who do not respect the other people. He gave me an example saying that in the small Sri Lankan community in Berlin, Tamils never spoke to any Non Tamils whereas the Singhalese (the other ethnic group of Sri Lanka) people spoke to everyone and were very accommodating. He himself while growing up in Sri Lanka had a lot of Singhalese friends and not many Tamil friends.

As the conversation headed towards India, and I explained to him saying that India is growing economy and a very vibrant place ( I have got used to doing this as the Europeans have a portrait of India as a very poor third world country where millions starve without food). He just slashed me down by saying in India the things are fast and fun, in the west (he referred to Europe) the things are slow but effective.

Our conversation got more and more lively but I had to get down at my bus stop and wished him good bye may be for ever, as I do not have his name or contact.

I was delighted to know a lot about my neighboring country what the people think there, how they feel about India. I got to know that you get a better picture of the nation by speaking to some one from there than from some news articles. I was surprised to meet a Sri Lankan who did not sympathize with the LTTE, who did not like the attitude of the Tamils, who thought Prabhakaran was a terrorist and is still alive.

I guess this is a post for me to remember this conversation.

Originally at https://shekispeaks.wordpress.com/2009/05/24/a-conversation-to-remember/

15 Feb 2015, 09:02

The Pixar touch.

The Pixar Touch is a well written, easy to read book. It traces the story of Pixar over 20 years. Some interesting things I learnt:

  • Employees who spend 8-12 years in the company did not make much in the IPO. Steve Jobs’ share in the company was 80%. He took back Pixar employees RSU’s and gave them new options forcing them to stay on for 4 more years. This means some employees worked 12 years but got options worth four years. Steve Jobs was mean.
  • George Lucas was a generous investor. He gave people at Pixar around two years to find a buyer when it was a loss making operation.
  • Pixar hired a lot of talent at the top level after it became famous. I wonder what the older employees thought of this.
  • Pixar sells the industry standard in animation software called RenderMan.
  • The founders were a patient bunch. They were in it for the long run - opposite of a serial entrepreneur.

The Pixar Touch

09 Feb 2015, 01:09

Fortress of solitude

I just finished reading Fortress Of Solitude.

It is growing up story of white kid - Dylan up in a gentrifying neighborhood of Brooklyn. I picked up this book as I liked Michael Chabon’s The Amazing Adventures of Kavalier & Clay and felt the books similar in themes. The author deals with a lot of social issues in a matter of factly way. This book has references to graffiti, music, comic books. There is a weird part with a ring with superpowers. I think the book would have been much better without it.

Fortress of solitude

Overall it is a decent book, not a modern classic, a little long, a little too American in outlook.

25 Jan 2015, 20:49

The document databases.

Document databases or schema-less databases are the first choice for building apps nowadays. MongoDB is a very good example of a schema-less database if one is managing their own infrastructure.

Every cloud service provider has a document database option available as a service. The advantage of these services are that you do not have to manage the instances and replications. Most of these are automated for you

I looked at a few of these services and compared them on a few usability parameters. The parameters are:

  • Query Model – what sort of queries does it support - SQL and JSON are the two popular options.
  • Indexes – are secondary indexes supported,
  • Object sizes/Limits The biggest object you can store in it, and other limits.

The databases options are

The interesting thing about these database services is that all of them are closed source and cannot be used independent of the cloud service.

Azure DocumentDB

  • Supports full json docmuents without any schema.
  • It has a powerful SQL based query model. [1]
  • You can manually add indexes to all fields.
  • Maximum object size is 256KB. Good description of limits here.
  • The service is in Beta and the total data size is limited to 10G if I understand the docs currently.

Google Cloud Datastore

  • It is practically schema less and you can add fields to without specifying it anywhere.
  • It has a custom JSON based query language or has an almost SQL like GQL interface.
  • Automatically adds indexes for all fields in an entity.
  • Developer has to define compound indexes (they call it a composite index).
  • Their developer tool kit claims to suggest indexes if it encounters a query without an index. This is a unique and neat feature.
  • Has been around for a while, from right when google app engine launched.
  • 1MB max object size, it is the largest allowed. 20,000 indexes per collection/entity.
  • A hard to understand limit on compound index size “Maximum number of bytes in composite indexes for an entity”. I think this could be made a bit clearer.


(Full disclosure => at the time of writing I work at Parse.com)

  • It is schema-less but you cannot change type once you add a member in a class/collection.
  • Custom JSON based query language.
  • Indexing as a concept is not exposed. There are systems in the background which create compound and simple indexes for you. I think this is a great feature and reduces and reduces cognitive load.
  • Supports about 300,000 apps, so it has been in production for a while.
  • The objects are limited to 128KB.

Amazon Dynamo

  • It requires defining a primary id field, apart from that it is schemaless.
  • It has complicated JSON based query language. Of all the stores this is the most complicated query model.
  • You can define global secondary indexes, but you have to define throughput limits while defining. This is pretty hard and complicated.
  • It limits you to 5 secondary indexes.
  • The object size cannot exceed 400KB.

I think this space is going to get heated up with these new services maturing, third party solutions emerging to manage them and the limits easing up. Exciting times ahead.

12 Jan 2015, 20:04

Elasticity of the Cloud.

All cloud services have a page where they boast about their top users. A developer may believe that it is marketing and ignore it. That is a tad immature.

Time for a pithy one-liner :

The cloud is as big as its largest customer.

The reason is nobody builds infinitely scalable data-centers. Software runs on hardware, which has physical limits, sometimes limits like speed of light. And then there are business reasons.

Usually it is the largest customer who pushes their limits.

For example: Netflix runs on AWS, so you won’t likely run into problems running a video streaming app on AWS, as Netflix would have already discovered those problems and AWS would have fixed on them.

It is symbiotic relationship, the big customer discovers flaws and good cloud providers fix them. So the next time you are deciding which cloud service to use, carefully look at their biggest customers.

31 Dec 2014, 18:11


Ravan, the king of Lanka and the main antagonist of the Hindu epic Ramayana was an ardent devotee of Shiva. Sometime before the main events of Ramayana unfolded, Ravan prayed to Shiva and got hold of a powerful relic - Atma Lingam. (demons praying to gods and getting powerful relics / boons is a recurring theme in Hindu mythology). Shiva though, places a condition, that Ravan has to carry the Atma Lingam, without putting it down on the ground, until he reaches home - Lanka.

The rest of the gods worry that Ravan would become immensely powerful and hard to defeat. The gods hatch a plan to ensure that Ravan puts the AtmaLingam on the ground before reaching Lanka. Ganesh Shiva’s son - agrees to carry out the scheme.

As Ravan is passing by Gokarna, in modern day Karnataka, India - the gods hide the sun. Ravan believing that it is dusk, wants to prey as is his routine. Precisely at that point he is approached by Ganesh, disguised as a priest. Ravan asks the priest to hold the AtmaLingam while he prays for a bit. Ganesh, agrees albeit with a condition that he will call his name three times, if Ravan does not respond, he will place the AtmaLingam on the ground. Ravan agrees and proceeds to pray. Ganesh places the AtmaLingam on the ground, without calling out thrice. He basically cheats.

The relic now on the ground cannot be moved. Ravan is devastated and tries to lift the AtmaLingam, but it won’t budge. His force breaks a piece of the head of the Lingam. This piece falls a few hundred kilometers southwards. The place where the stone falls is called Sirathkal (meaning head stone) in the local Tulu language. Ravan obviously goes back home dejected.

In modern times Sirathkal is known as Surathkal, a suburb of Mangalore. I spent four years studying Computer Engineering there at NITK Surathkal.

I am curious about how places get their names, this was the story of Surathkal.


23 Dec 2014, 18:11

Auto deploy your Hugo blog to Parse

I am very impressed by the current state of static website hosting tools.

Right now, I host this blog on Parse.com using Parse hosting (disclaimer - I work for Parse). I use Hugo as my static website engine. Hugo is blazingly fast and simple to understand. This time around I wanted my blog to be deployed automatically when I push to Github.

I used Travis-ci for this. Travis is amazing and deserves a shout out for making their software so usable and customizable.

It was not all plug and play, Parse.com does not have a deploy API to push files and hence is not a deploy target on Travis. The only way to deploy your site to Parse is via the cli. The issue is Parse-cli requires you to type in your password - not possible in Travis, a headless system.

So looking into the parse app, it has the following structure:

I added public and config to the gitignore so that they are never checked into the repository. Looking under the config directory, it has a JSON file with the parse app-id and master key. It looks like

I did not want to check in my actual app-id and master key to Github. Luckily Travis had a solution for that. I set two secure environment variables to the app-id and master-key using the encryption mechanism provided by Travis.

I wrote a small go program to output the valid config.json using these environment keys. This allowed me to secure my config keys in Github but make them available in Travis.

The go program looks like

The build script calls this program to generate the config and deploy the generated site to Parse.

The complete build script is

The whole working project is here.

Using these bits and pieces of the cloud I have a blog system, where I commit to github and it gets immediately deployed and hosted.

Note that you can use a similar approach to deploy your parse CloudCode to Parse with just a github push.

23 Dec 2014, 16:03

Hello World

Hello world.

I am Abhishek Kona, also known as Sheki. I currently live in San Francisco. I work as an engineer at Parse.com.

The day of writing this is 23 December, 2014. Coincidentally today is Festivus - the Festival for the rest of us.

Happy Festivus

I am on a new-year inspired self improvement drive and want to write one blog a week. I am inspired by Iron Blogger.

Brace yourself.