Monday, October 29, 2012

Password Free Database

Got around to implementing Mozilla Persona for Converspace. It has its flaws but not having to store user passwords in the db is a big win!

Tuesday, October 23, 2012

ReverseHttp  allows HTTP clients to expose webhooks so that servers don't have to implement long-polling.

Sunday, October 21, 2012

Facebook's Like is just a canned response

  • Writing blog posts (long form) is intimidating.
  • Twitter's constraints (140 character limit, lack of title) makes writing less intimidating.
  • Facebook's Like takes this to its logical conclusion by allowing people to "participate" by "publishing" an "activity" which is just a canned response.

Thursday, October 18, 2012

AJAX based Poormanscron

I've been thinking of a good fallback for running long-running processes on commodity hosting for indieweb social web apps. Given the special use case of social web apps, where users might stay on the app for a long time (or leave a window/tab with it always open), an AJAX based poor man's cron might work very well.


Wednesday, October 17, 2012

Renamed ActivityPingback to ActivityPush

Did this for a couple of reasons:
  • To avoid confusion with Pingback and all its variants (should have done this a long time ago as per Evan's advise).
  • To see if I can evolve this into a simple and generic way to push activities, to avoid having to use two protocol, one for pushing solicited notification (to subscribers via PubSubHubbub) and one for unsolicited notifications (which is what ActivityPush does currently). This is similar to what does (replaces PubSubHubbub + Salmon), but I want to see if I can do it without an HTTP based protocol and differing a lot of things to the implementations.

Monday, October 15, 2012

Email workflows based on #tag filters

I use #tags either in the subject or body of the email to enable pre-defined filters to apply appropriate labels on them to manage my common email workflows:
  • Bookmarking: I email bookmarks to myself especially from my android phone (using the very convenient "Share page" via Gmail option) with the #bookmark tag.
  • Read Later: This is an extension of bookmarking and I use the #readlater tag.
  • File Storage: I email files or forward emails with attachments of interest to myself with the #files tag.
  • Capturing ideas: I email ideas/notes to myself with the #ideas tag.
  • Task Management: I haven't fully explored this yet.

Social Verbs

I've been thinking about social verbs lately and what they mean to me and how I want to use them, as opposed to how the social networks want me to use them. So I'm compiling a little work-in-progress list:
  • I like something when it brings a smile to my face. (aliases: Love, Heart, Favorite)
  • I share something when it is noteworthy and assume others might find interesting. This could be my own content or someone else's content or something someone else has shared. In the context where my blog is separate from my activity stream, I post to my blog and I share the link to the post with others. When my blog and activity stream merge into one, I just share content. (aliases: blog, tweet, status update)
  • I bookmark something when I want to save it for future reference. (aliases: save)
  • I star something to mark it as important/significant.
  • I upvote something (in the context of a list of things) when it is more relevant.
  • I recommend something when I really believe in it and want to tell others about it. (aliases: endorse, promote)
  • +1 something when I agree with it or support it.

What do the verbs mean to you?


Distributed Mentions

Given the URI-centric approach of Activity Pingback (and Activity Web) I'm leaning towards /username over @username to mention/reply-to users on Converspace. This works very well because it's just a relative URI and lends itself well to the Federated Social Web by allowing you to mention/reply-to someone on another network with simple prefixing: or

Inspired by:
See also:

Friday, October 12, 2012

Facebook designing your online identity is like IKEA designing your apartment

"Facebook designing your online identity is like IKEA designing your apartment. The only individuality lies in the family pictures standing in your BILLY shelves." 
While early online networks like encouraged its users to entirely modify their online presence, and Web 2.0 have steered this "User Generated Content" into a commercially valuable structure. Facebook has finalized this "evolution" by disabling the user to do anything but feeding the system that gives FB it's estimated value of 50 Billion.

Monday, October 08, 2012

Sunday, September 09, 2012

Should you build an ecommerce platform for small businesses in India?

Asking small businesses in India to get their own ecommerce store is like selling them retail space in the remotest part of town.

The first problem to solve for small businesses is to help them get more customers.

I learned this the hard way with AceSeller.

How can I help small businesses get more customer? is a better question to ask than Should I build an ecommerce platform for small businesses?

The former is a problem statement looking for a solution and going down that path will lead you to many interesting solutions. The latter is a solution looking for a problem, where you already think you know the solution and you're just looking for validation.

Thursday, July 19, 2012

So what is wrong with you?

So what is wrong with you? Are you a freak? No. You are just human. And you suffer from the same malady that infects every human being. It is a monster in side all of us, and it has many arms: Chronic tension, lack of genuine compassion for others, including the people closest to you, feelings being blocked up, and emotional deadness. Many, many arms. None of us is entirely free from it. We may deny it. We try to suppress it. We build a whole culture around hiding from it, pretending it is not there, and distracting ourselves from it with goals and projects and status. But it never goes away. It is a constant undercurrent in every thought and every perception; a little wordless voice at the back of the head saying, "Not good enough yet. Got to have more. Got to make it better. Got to be better." It is a monster, a monster that manifests everywhere in subtle forms.
- Mindfulness in Plain English by Ven. Henepola Gunaratana

Sunday, July 01, 2012

Who are you?

I—I hardly know, Sir, just at present—at least I know who I was when I got up this morning, but I think I must have changed several times since then.
Alice's Adventures in Wonderland by Lewis Carroll

Wednesday, June 13, 2012

Intelligence is overrated

Intelligence is overrated as a metric, from the get-go. Being smart doesn't mean anything - accomplishing something, whether that be writing a book, founding a company, making a new scientific discovery, sculpting a masterpiece, etc., is a much better metric. Unfortunately everyone seems to be hung up on the "idea" of being smart, as if having a high IQ somehow constitutes an accomplishment.
- a comment on Hacker News 

Monkey See Monkey Do aka Agile WTF (Way To Fail)

Here's the talk Naresh and me did at Agile Bangaluru 2010.

This was the talk's abstract:
We don't have all the answers. We don't know the best way to build software in the right way. But we do know one thing: the right way doesn't involve mindlessly following practices just because some "expert" says you need to.
In this workshop we'll take a critical look at various "agile" practices and try to highlight the dogma and ceremony that has creeped in. We'll also question if the practices defined a decade ago are still applicable? If yes, have they evolved since? What are some of the original creators of these processes practicing today? And so on..

It's almost 2 hrs, and the first 25 mins of the presentation is a spoof of how agile projects are run. We eventually get around to discussing some agile practices and the tradeoffs they involve:

Here are the slides:

Thursday, May 24, 2012

When to use array_merge and union operator (+) in PHP?


Use array_merge when you want to merge indexed arrays without keys:


Array Union Operator (+)

Use the union operator when you want to extend an array or override certain key values. A good use case for this is overriding/extending a default settings array with a user defined array (similar to how you would use $.extend while writing a jQuery plugin):



Saturday, May 19, 2012

Designing Your Startup

This is the video of my talk at Agile India 2012 (it's missing about 5-10 minutes from the beginning). I'm totally winging it, so I've goofed up a lot, but in the spirit of shipping, here it is:

Monday, May 07, 2012

Compatibility is Contextual

I've come to realize that when people don't get along, it's almost always because of the context. The same people get along very well when their context changes. We are not incompatible with people, just the context we find ourselves with them in.

Happiness Efficiency

Consider two types of people: The kind that have big goals and derive happiness by achieving them and the kind that derive happiness from the little things in life. The latter IMO, is more efficient.

Sunday, May 06, 2012

Using Silence for Notification

I keep my phone on silent when I'm listening to music on it. So when someone calls, the phone stops playing music and there is silence. I did this to flip the concept of notification that I'm used to. In a world where more and more things are real-time and crying out for attention via audible alerts, it's refreshing to use silence for notification. 

Friday, January 27, 2012

Fliptabify Design Principles

Here are the design principles that drive the development of Fliptabify.
All of the principles center around this one goal: Fliptabify should just work.

The Fliptabify Design Principles

Don't Make Me Repeat Myself
Fliptabify shouldn't require you to repeat stuff you've already done on Shopify.

Don't Make Me Think
Fliptabify should have good defaults to give a configuration-less experience.

No Admin Section
Fliptabify shouldn't have an admin section to force simple features and minimal configuration.

SCP excluding .git & other dot files/folders

Quick command to scp your git repo to your server without copying .git & other dot files/folders:
scp -r [!.]* sandeep@server:/path/to/docroot

You can use this hack to store stuff in your repo (in dot files/folders) that you don't want to deploy to your production server. 

Workflow vs. Tools

Workflow is more important than tools.
Getting Shit Done


I noticed something interesting the day I was confined to just 13" of screen space. Even though I couldn't see everything I needed to operate and reference at once, I became more focused. Only seeing one window at a time enabled me to mentally hunker down on the task at hand. My actions felt purposeful; my decisions, deliberate. Surprisingly, my productivity didn't suffer. I did slow down, but also experienced a calm efficiency--similar to that which is required when fastening the innumerable rows of snaps on a screaming baby's pajamas. If you rush, you're going to mess up; if you miss snaps, it's going to take longer. And rushing makes you sweat. Never let the baby see you sweat.
- Unitasking 

Tuesday, January 03, 2012

Pricing Parking

When to collect?
  • On entry
    • Increases entry time resulting in longer entry queues.
      • Bad idea when customers are anxious to get in and might negatively affect repeat visit rates especially during peak hours/days.
  • On the way out
    • Decreases entry time resulting in smaller entry queues.
    • Longer exit queues
      • Might be better than long entry queues?

What to charge?
  • Fixed Price
    • Simplest model.
    • Can be collected at either entry or exit.
  • Based on time (e.g., by the hour)
    • Can only be collected at exit as it is variable.
    • Uncertainty of price
      • Can be mitigated by limiting the maximum price and marginally increasing price over just a few time intervals (2 interval example: $x for 0-3 hours, $x+y for 3-10 hours where y is marginal).
    • Might influence customer behaviour to a small degree
      • Might incentivise customers to leave early
        • A  free for first x minutes policy might reinforce this.
  • Based on demand and supply (charge more when supply cannot keep up with demand)
    • Can be fixed or metered.
    • Can be collected at either entry or exit if it is fixed and at exit only if it is metered.
    • Might significantly influence customer behaviour
      • Disincentivises casual customers from coming during peek hours.