Andy mentioned something about Imgur’s most popular files based on views, so I figured I could find something for MLKSHK.

So here are the top 20 files from this year based on number of likes received. Note that the first one was our full-page ad in Longshot Magazine that the members of MLKSHK paid for.

  1. MLKSHK ad for Long Shot Magazine

    Views: 1,804 Likes: 165

  2. best wedding pictures ever... scroll down

    Views:1,392,030 Likes: 144

  3. .______________________.

    Views: 1,261 Likes: 136

  4. NY Times Crossword

    Views: 35,752 Likes: 119

  5. I'm done.

    Views: 1,732 Likes: 118

  6. Lovers, not fighters.

    Views: 63,952 Likes: 117

  7. Teen TXT Lingo.jpg

    Views: 26,735 Likes: 102

  8. Beard Slap

    Views: 4,889 Likes: 101

  9. Trollin

    Views: 578 Likes: 100

  10. A Sunday Afternoon In The Park

    Views: 1,314 Likes: 98

  11. New Star Wars BluRay edit.gif

    Views: 90,934 Likes: 95

  12. Wearing my new favorite button

    Views: 2,085 Likes: 85

  13. Blue Screen of DEATH

    Views: 2,131 Likes: 85

  14. Epc Crstms Crd

    Views: 2,041 Likes: 84

  15. Whale Thing

    Views: 1,366 Likes: 82

  16. "Chevy wants to put some ads on MetaFilter, check out this mockup of what they had in mind"

    Views: 7,211 Likes: 81

  17. Anticipation

    Views: 554 Likes: 81

  18. Last one, I swear.

    Views: 2,209 Likes: 79

  19. the jesus

    Views: 29,936 Likes: 76

  20. Tavis Smiley and Cornel West hearing the news from Bill O’Reilly that nobody on Wall St. committed any crimes.

    Views: 583 Likes: 76



I’m still working out the kinks here, but I am returning to proper blogging. This isn’t a 2012 thing or an experiment, I am returning to share good stuff with you. I hope you like it.

Dave Winer (!) posted some notes about the year and a response to the “golden age of tech blogging” being over.

Is the "golden age" of tech blogging over? Jeremiah Owyang says it is. I guess it's all about point of view. If you think tech blogging was Mike Arrington and TechCrunch, then yes indeed, it's over.


In 2010 I had a project where I only listened to music released in 2010 (except for January 2010: I listened to anything released in 2009 because I mean come on…). It was a fun experiment that introduced me to TONS of bands and music that I still listen to now.

The project changed me a bit. I feel like I can point to 2010 as the year I let go of a lot of shitty music in my past and shook loose a lot of the conceptions I had about what I liked.

There was a story today on the NYTimes about what a shitty year it was for music* but I don’t believe it**. I think it was a shitty year for whatever label-manufactured band that I saw plastered on busses and walls on my way to work, but music is always good. There is always good stuff out there if you look.

To illustrate my point, I am not even kidding, someone just pointed me to an Australian garage band I’d never heard of called “Eddy Current Suppression Ring” on This Is My Jam. Released just this past October:

Isn’t that great?

So yeah, I am doing my music experiment again. This time I’ll blog it here and on This Is My Jam rather than on a separate weblog. It’s hard. It’s fun. But it reminds me that music is always good if you’re willing to look and not worry if some label’s great hope didn’t materialize.

* The worst part is they lead off with the (terrible) return of one of my favorite bands and rhythm sections of all time. I saw Sublime play quite a few times in clubs and backyards (nearly 20 years ago!) before they blew it and Brad died. Stupid stupid stupid.

** THIS GUY knows what I’m talking about




I just watched this video of the $25 Raspberry Pi beta board (via jwatt):

It reminded me of something I wish I could go out and buy right now. I want something the size of my Jambox but instead of an audio receiver and speakers inside, I want a tiny computer that is doing a number of things for me.

The first thing I’d want it to do is back-up files from our computers and then push them (delayed) to the cloud when I am at work or sleeping.

The second would be a web server I could use to develop apps for. I have these app ideas that I want to live in my house rather than on a server someplace I have to maintain. Things like address books and calendaring between my wife and I. Stuff I want to own, not depend on some outside service.

Don’t you want to buy that little box? I sure do.

Since I’m asking, another thing I want is an iPod Touch with everything it currently has PLUS a 3g data connection. I basically want my iPhone without a phone. Who needs to carry around a phone? (More on this later, maybe today).

Two helpful links arrived through Twitter after posting. First @wezm points me to some existing off the shelf boards and @pfibiger points out these are called “plug computers” and gives me a great link to start learning more about them.


“The object of the game is to hit the pig with the bird.” — Angry, Productive Birds by Mike at Stamen is a great look at designing a system to help everyone on the team to learn from their project scheduling and time usage.

Simpleform, the company I started with my wife, is entering its third year. We built some stuff for clients, we built some stuff for ourselves, and now we’re back to building things for clients and I think we might be doing this for a while. In the past two years I have learned a lot: some about startups, but way more about businesses and running them.


This idea of building business systems started clicking in my head about six months ago as we were returning to consulting. When we were 100% dedicated to MLKSHK we were shipping daily, processing bugs as fast as people could find them, working through features, and had between the three (or four) of us developed a tight development relationship. It was a fantastic system for shipping code for our users.

When that ended I felt a bit lost. We had systems for deploying and determining where to focus, but working for clients is a different thing. So…why not develop systems for client work?

For year three of Simpleform I am trying out three things:

  1. Open books. Anyone who works here can see what we’re earning and how much we’re spending. If you can push code to the servers you should be able to see how healthy the business is. These things are related and should be signals for making decisions.
  2. Meticulous project scheduling. The purpose of our business is first to make money and second enjoy what we’re working on. This does that. I can’t enjoy my time at Simpleform if I don’t know how the business is doing and I don’t think anyone else who works here would either.
  3. Continuous business development. We probably never should have switched to MLKSHK full-time. It was a gamble, but looking back I see we should have kept looking for work. It was too optimistic. From now on we will try out ideas but keep the business going.

Another good post by a co-founder of AngelList called Why You Can’t Hire is the other reason I’ve been thinking about a transparent business. I don’t have ten million dollars in the bank and melting servers. I can’t compete for people who want to work at Facebook or the next Facebook. We don’t have perks, we have a water cooler and a nice plant.

What I do have is an offer to be more than just an employee with a half-of-a-half-of a percent of a business and no real connection to it other than a hope for a quick sale and a free hoodie. Everyone who works here is a partner and will have access and a vote for where we go and what we do. We get to tinker and toy with the business—as long as we are successful—and use what we learned to make our business even better.

I’m currently working through my network to find Python engineers to join us. The profile I’m using is someone with enough experience in startups and non-startups to know this is a good deal. I have one person I think is perfect and a few ideas on some other people, but if I missed you pleased get in touch.


A long time ago, when people dialed (as in telephones) into Unix machines in some closet or college campus, they used a command called ‘w’ to see who was also on the machine.

You can use this command now if you’re on a Unix-derived operating system. Open terminal enter ‘w’ and you’ll see your login name and any command line tools you might be running. (Likely just ‘w’.)


In those days ‘w’ was used to not just see who was logged in, but what they were using (pine, vi, irc, ftp, lynx) and for how long they had been signed in.

There was a joke about getting ideas for making new apps in the late 90’s: just pick a random Unix tool.

  • Talk and IRC begat ICQ, AIM, GTalk, Campfire, Convore.
  • Usenet is at the root of Slashdot, Reddit, Digg, and the multitude of PHPBB communities.
  • Finger influenced the creation of weblogs and the idea was further refined as Twitter. (This is a forgotten history of weblogs: video game bloggers were at its birth, they took the .plan and .project updates of people like Carmack and Romero and posted them reverse chronologically. I will fight anyone on this.)

But there was something special about ‘w’ for me. In those days of shared servers I would auto-run a shell script that would parse ‘w’ and highlight my friends and see what they were up to and if they were available to talk. If they were in Pine of course you wouldn’t bug them, but if they were just idle in a shell or working on homework, they were probably up for talking or helping you find some new warez site or want to meet up for a slice of pizza.

This past week, like many of my friends, I jumped with two feet into Path. I’ve been pretty selective about who I will share with on Path because of that 150 person limit, but also because I am drowning in Twitter and RSS subscriptions. I like Path for the ability to clearly see my friends’ statuses in a way that Twitter and weblogs no longer provide.

Path is not a remake of ‘w’. I think AIM had and still has the ability to be the ‘w’ of the modern internet. But Path has done so much right with its latest release, I think I miss ‘w’ a little less than before.


You are drowning in feeds and URLs. You want an email every morning that tells you what was important yesterday:

I’ve been subscribed to NextDraft since September and I love it. It is exactly what I need to keep track of stuff I missed the day before. Every day it seems like there were ten must-read things on the web and Dave manages to find them all.

Here is last Friday’s. See? That is exactly what you have been looking for.


Vim: revisited is such a good introduction to getting started with Vim. I wish I would have read it before I started my NoVimBer project.

Not using too many plugins was pretty much my undoing. The point he makes about the Janus distribution is spot-on. If I had to do it again I might no have switched to Vico so quickly.


There are some tree swings popping up in my neighborhood. Gonna see if I can take Mark there sometime this week.


Yesterday Berg announced two products, The Little Printer and Berg Cloud. Everyone was pretty excited about this little printer. It’s so damn cute!

Hello Little Printer, available 2012 from BERG on Vimeo.

But the really cool thing here is Berg Cloud. Well, potentially cool, since we’ve just seen video of it. But together they make me, a developer and lover of small, cute things, really excited. So excited that I checked out the price of thermal printers and found out they are staggeringly expensive.

But then I remembered I already own a thermal printer. A cheap one that prints labels. So I researched a little more and figured out how one could have their own thermal printer to hack away on:

  1. Buy a Dymo LabelWriter.
  2. Buy this continuous thermal paper.
  3. Use the Dymo JavaScript SDK.

Not as cute as the Little Printer, but appears to do the printing part of the equation. Mine prints pretty detailed stamps, so I think it should handle graphics like the ones that were in the demo. I haven’t gotten my hands on the continuous thermal paper yet, so I can’t say if the SDK will give as much control over printing, but it seems like a fun project if you’re looking for one.


After almost a whole month of using MacVim, I think I can safely say I’m a convert. Whenever I felt I was getting really good with it, I’d switch over to SublimeText and realize I was still much better at moving text around and editing whole blocks of code inside of a GUI editor.

Today after editing some code, I flipped over to SublimeText to realize I wasn’t working any faster, and in fact missed some of the quick delete commands like dt" or D I was so used to with Vim.

It actually took a bit longer than I thought it would take. Luckily anything you want to do you can find fairly quickly with Google and StackOverflow. Many times I thought, “It sure would be nice if I could do x with a vi command” and sure enough I’d type into Google “vi how to x” and there would be quite a few results explaining how to do it.

The other nice thing that happened is when I do work on config files on my servers I am now EXTREMELY good at it. Before this month I’d “sudo vi” an important config file and at some point “:q!” because I’d hit the wrong key. Now it feels so comfortable I think it’s made me a better admin.

One thing happened I wasn’t expecting on my road to Vim: I am not actually using Vim. Instead I’m using something called Vico which has many vi key-bindings but an entirely new codebase.


You can also import tmBundles and tmThemes if there’s something from Textmate you want:


MacVim always felt like a half-step toward OS X (requiring the Janus distribution and a fork with a file browser to fill in the holes) where Vico is solidly an OS X app. For example, searching with ack brings up a nice window reminiscent of Textmate:


But the most important thing is that it supports so much existing vi key-bindings that it doesn’t take long to go from (Mac)Vim to Vico. The only thing holding me back was the price: $39.99, but as the trial version was expiring I realized I wanted to use Vico past the trial date so I just bought it.

(Thanks to kob for pointing Vico out to me when I first started this project.)


I did this today. I thought I’d write it up so I can remember for next time.

I’m working on another project using Django and have liked using the ORM more than any other of the big Python ORMs out there. On MLKSHK we use the beloved FlyingCow, one that we (Ivan) wrote, but when working for clients I like to use as much existing, tested code out there as possible.

First, create a new directory in the root of your project. Throw two files in there: and

Next, create a file in your project, fill in the necessary stuff for your database and for INSTALLED_APPS include the name of the directory you made. In this case I made a directory/module called “orm”.

    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',


Now create your models in Note the Meta class.

from django.db import models

class Doink(models.Model):
    name = models.CharField(max_length=25, blank=True)
    created_at = models.DateTimeField(auto_now_add=True, null=True)
    class Meta:
        db_table = u'doink'
        app_label= u'orm'

The first attribute:

is self-explanatory, but
is there to help Django know this is part of the orm package. Normally it would infer this from the module it lived in inside of Django but since we’re not in Django it breaks without it.

Last thing you need to do is set the DJANGO_SETTINGS_MODULE environment variable:


You can now run syncdb  --pythonpath=.
and your models will be created.

In your code, use your models like normal:

from orm.models import Doink

Doink will now work like any other Django model.


After a couple days of using MacVim and not exactly liking NERDTree, I installed this fork that provides a very nice Mac-like file browser.

MacVim Alloy Branch

I also found out about an OS X application called Vico that attempts to merge the goodness of vim with the look and feel of a typical Cocoa application. It looks very nice, but also $40 so I am going to wait until I’m good with vim before giving the 15-day trial a spin.

Overall I’d say I’m back up to normal productivity, and it feels like every hour I spend with it I discover a new way to to do something.


Some friends were talking about National Novel Writing Month and since I don’t have an idea for a novel but felt like trying to accomplish something in November, I decided to switch my text editor to vim. Specifically MacVim which I think is an important distinction I’ll explain below.

Now, I learned vi back in college in 199ksjdfl and I use it regularly on servers because pico without an actual GUI to click on locations is cumbersome and most of what I need to do when editing server files is delete whole lines or replace a value or add a new line.

Since I already had a basic grasp of vi and people seemed to think they were more productive with vim, I figured it might be time to see if it would work for me.

Starting out I think I had three concerns:

  • I use file tabs and the file browser in my current editor Textmate a lot. So much that I didn’t think switching to vim would be able to address that given what I knew about vim.
  • I love my current theme Vibrant Ink, which I wasn’t ready to part with.
  • It’s confusing. And not in a way that I thought’t I’d never get it, but more in that I didn’t want to give up a week of learning to become only a bit more productive. I’m in the middle of a big project for a client and I didn’t want to be billing them for my slowness.

So last week I did some poking around and it turns out there’s something called ‘vimtutor’ already installed on OS X. I started it up and discovered I knew a lot more than I realized. If you’re on a Mac and have about a half hour you should try vimtutor right now. If you know a bit about vim already it will be a breeze. When I finished I knew I could keep going with learning vim so I did some more reading.

The next two things to really convince me I could do it was:

  1. Finding out there was a Macintosh specific version of vim called MacVim that is a self-contained, windowed Cocoa application. This is good because there are some key-bindings in place that you are probably used to that don’t exist in standard vim. Hitting ⌘s in MacVim will actually save your file. You can use your mouse to select text and holding shift + moving your cursor around will select text.
  2. Installing a vim distribution called Janus that installs a whole mess of plugins and tools that make transitioning to vim much easier. There’s a file browser (like in Textmate) and it even comes standard with the Vibrant Ink theme (type :color vibrantink) or set it up in your new .vimrclocal file by adding “color vibrantink” without the quotes. There are a lot of themes.

After this, I read these blog posts:

And then I wrote this blog post you’re reading now in my shiny new compiled version of MacVim.


I’ve been meaning to point to Adam’s new site: Decommodify.

He just posted about his frustrations with his alarm clock. While I don’t use an alarm clock, we do have a clock in our bedroom* that I absolutely love simply because I don’t think about it much.


Right up until I read Adam’s post I forgot that we even have this in our room, yet I look at it several times a day when getting ready to go to work or to bed. It’s my dream clock and I wish I knew how to get more because I would fill my house and office with them.

I joked with Amber the other day that I’d be more of a minimalist if I could just stop being a nostalgist. Every time I sit down to throw stuff out I run into that dumb painting my co-workers got me for that one birthday or a CD that rode with me in my little pickup as I made deliveries in Los Angeles over fifteen years ago.

I didn’t upgrade my iPhone4 to the 4s and very likely won’t. It’s not because I’m attached to this version I’ve carried with me for a while now (it’s actually a replacement for the one I originally purchased). It feels more due to that clock up there. They really got this one right and other than a new camera (this one is fine for pictures of my son) I don’t see a reason. The phone has sort of blended into my life in a way that a faster chip or better camera isn’t going to change much.

I will probably upgrade when this one breaks. I wish I could for that clock.

* It appears you can purchase one here I’m not 100% sure that is the same, but it looks like it.


I tweeted earlier about Glitch:

But I think having 140 characters didn’t give me enough space to fully explain why I am so excited about it.

So go ahead and read this post and be sure to watch the two videos. The first is a simple iOS app with some physics completely unattached to Glitch. It’s just an iOS app probably written with some stock game engine.

The second video is that same, simple game that has been given permission, via OAuth (not unlike you giving permission to a Twitter app to do something with your Twitter time-line), to pull in the player’s face, body and surrounding Glitch-world imagery.

This is incredible!

Lest you think this is some kind of fun hack, remember these are some of the people behind one of the finest APIs ever written. While there have been games that have exposed services and player statuses, I can‘t remember any being this accessible and web friendly. The rest of their developer post goes on to point out how this is just the beginning of what they’re going to add.

This is a big deal!


Back when I was younger there used to be this big debate about the meaning of the word “hacking”. In the News it was always used to describe unsavory acts of theft, vandalism, and destruction. Hackers (the nice kind) invented new words to help them sort the hacker from the malicious hack like “crackers” or “script kiddies” but I don’t think it was until the Maker-scene and Linus Torvalds and countless open source hackers took the word back and permanently gave it the definition it deserved.

Of all the books with the word “hackers” in it, the good one, aptly titled Hackers, did an excellent job at describing the early days of computing, all the way back to the Homebrew Computer Club and into the explosion and excess of the 80’s.

It is what I think of when I think of hackers. People who sit down to solve a problem or invent something for the joy of figuring it out or making it better for others. If they’re lucky, the thing they made gets used by other people. And if they’re really lucky they get a chance to create for a large and grateful audience.

I think I made about 10 in total.

When I was in college I made red boxes. Not a lot of them, but enough to keep my friends happy dialing home or around the country for free from pay phones. A descendent of the blue box the red box became popular when the former no longer worked on home telephone lines. As a kid in college (Berkeley no less) I wasn’t exactly hurting for money to call home. I was privileged enough (like my classmates) to have grants, loans, and parents willing to pay for us to attend a very good college so the $5 or $10 in phone calls a month wasn’t exactly breaking us.

And to be honest, who calls their parents that often?

The fun thing about red boxes was making them. Handing a newly soldered dialer to a friend (for a modest fee) was an amazing feeling. Here is a thing I made*, you can go use it as much as you want for whatever you want. I even scratched my business name into the back of them as I wrapped them back up in their boxes and plastic I was so proud.

I think my desire to make and share things with people who don’t have the ability to solder or code or install Apache was born in that dorm room. I ship code because it is tremendously satisfying to give people things that they can use. I am addicted to the feedback and especially the knowledge that I got it right. It makes me feel good.

And to be clear: you don’t have to necessarily know how to install Apache or solder a chip. All you need is a desire to make something be a way that it should or can be. And if you want to do it for a large audience you need to understand them and what they want. I spend a lot of time thinking about these things. “What do people want?” “How should this be better?”

My favorite people make tools for people. Not just make tools, but make them with the intention of others using and enjoying those tools. I appreciate something done well and it fuels my own ambition to do good work. I was very sad to hear about Steve Jobs passing away not because I love my Apple computers or worship my phone, but because I felt that we shared the same feelings about making things better for people.

That’s all I’m trying to do.

* Red boxes were usually Radio Shack tone dialers with a modification that passed the impulses through a crystal (soldered on the outside). The switch you see in my red box above allowed you to flip back to regular tone dialing if you needed it.


I had a really nice birthday today.

I was alone in my office and away from son who is too sick to go to school, so I was a bit sad about that. But then someone on Twitter remembered it was my birthday, and as other people noticed they wished me a happy birthday. I was on a conference call with a client and they broke into a happy birthday song at the end of the call.

I put a good day in and got some stuff done, but I’m leaving a bit early to spend the rest of today with my family.

I briefly mentioned it in our last State of the Shake but this has been a very challenging couple of months for us as we split our time between contracting and working on MLKSHK. When I left my job I signed up for challenging so it’s to be expected, but this was a nice way to end the month.

Thanks, friends.


I had an idea a couple weeks ago and so I tweeted about it:

Screen Shot 2011 09 25 at 6 59 10 PM

Nobody took up the challenge. So after finding a couple hours of my own, and wanting to get better with Backbone.js, I made it. (Wrote mostly with CoffeeScript because OMG CoffeeScript) (note, this is on the most anemic, cheap, virtual machine Amazon offers, it’s not quite ready for heavy use so be gentle.)

It looks something like this.

In my experience there isn’t much of a spam problem on Twitter. Yes, it’s annoying to mention something about your iPad and have a spam bot or two tell you how you can get a free one just by “clicking this URL,” but I feel like that happens once or twice a month at most.

I normally just mark the thing as spam and move on. But the last time it happened I clicked over to see the account’s timeline and saw they had been at it for quite some time. Even tweeting innocuous tweets in between the mention spam which I guessed was to throw off Twitter’s own spam algorithms.

I didn’t make this because I am fed up with Twitter’s spam. I made it because after spending a few weeks now dealing with MLKSHK’s own spam problem I was curious about Twitter’s rate of discovery. For the most part I’m curious how long after I report spam that an account is deactivated. As I got deeper into my spam problem I found myself enjoying figuring out ways to deal with it, how quickly my algorithms caught and removed it, and mostly just because I‘m a sucker for seeing my code automatically take care of admin duties.

So I built because I thought people might get a little satisfaction out of marking something as spam and knowing Twitter did something about it.


Icon For the last couple of weeks I’ve spent hours solving, playing, and re-playing a game called The Last Rocket by Shaun Inman.

The main game itself could probably be finished in one sitting if you have a bit of time. The controls are very simple to understand, but require a play through to get enough practice to have the timing right. Once you get the two ways to control the main character figured out the game gets even more fun.

Quickly: the style of the game is commonly referred to as retro or 8-bit. The music is appropriately chip-tuned. The graphics are some of the best pixel animations I’ve ever seen. There is so much animation in these little characters that part of the entertainment is just watching them cycle through.

Of all that TLR has going for it, it’s the genius in the level design and timing of the elements inside of them where I was won over. Once you’ve played a level many times, and return to it trying to get a different achievement, the level feels completely brand new. This sort of planning is amazing when you see it.

I’m kind of in awe that this game exists. There is so much stuff in it worth going on about but I didn’t want to give too much away. I wrote this because I wanted to make sure anyone who likes this style of gaming doesn’t miss out on this game. It’s easily one of my favorite iPhone games I own. More here.


This past _why day an email made the rounds that _why had sent two years prior to someone asking how they could become a better programmer.

The crux of the email was: if you follow the rules you are not going to maximize your risk and your creativity will suffer. Programming, for him, was about experimentation and discovery versus adhering to rules to produce objectively good code. He didn’t write tests. He didn’t follow any particular style or convention. He did some pretty amazing things. (And then he disappeared.)

The entity/story/folk hero that was _why is one of my favorite subjects to talk about when I’m drunk and talking about Ruby or Rails. If you haven’t read about _why you really should start with his Wikipedia page and definitely his book: Why’s (Poignant) Guide to Ruby. (I’m a fan of _why, can you tell?)

BUT…here at Simpleform one of our (and I will use this word even though my Catholic mother would give me a dirty look for using it that way) religions is testing. The other is shipping. We love shipping. Shipping is what makes your day worth it and if I leave my office having not shipped anything I mope.

The shipping is the fun part, the work is the testing. Testing builds trust amongst our team and with our clients. Without testing we’re potentially handing our clients a time-bomb, and worse, we’re charging for it. I hate this feeling.

So we test because we want to ship. And we ship because we want to make our clients happy. And if we can’t ship then nobody is happy. So we adhere to a set of standards and styles guides on how to test and how to organize our code.

There’s this line religious people use when they encounter atheists: “Without religion, where do you get your morals from?” Which is hilarious because I responded the other day to someone, “Without tests, where do you get your confidence in the code from?” and then realized what I was sounding like and laughed and laughed—but really I don’t get where the confidence comes from.

I used to think I was good enough to write code without tests. And to be honest, I never experienced a problem so major that data was lost or leaked. At FM every engineer was responsible for their own code and that plan mostly worked. Nothing catastrophic ever happened. But in the back of my mind there was always a worry that it might. It would only be a matter of time before something bad happened and I always felt a little nervous when I’d hear something wasn’t working correctly.

Even worse, changing a critical part of the application was always an arduous task of user testing and re-testing. It wasted time. It created a lot of worry and even when it was done I’d never feel great about it. Automated testing means you can make those changes and feel great when you ship.

And we love to ship.

When you’re done reading _why’s email, you’ll notice the top comment that was voted up is:

“As someone who maintains _why's code these days, please, write some tests.”


Back during SXSW Caterina posted about FOMO. The Fear Of Missing Out. I'm a big consumer of social media but sometimes I realize I’m consuming because of FOMO rather than having time or an interest in what people are sharing at that moment.

When I first read her piece we were deep into MLKSHK and trying to get it out the door. It stuck with me that I was very likely helping to create FOMO for our users and I wanted to be sure we gave them some control over that.

One feature of MLKSHK is the bookmark. It looks like this:

A bookmark gets automatically generated when you first hit MLKSHK and will (try) to stay in that location even if adjacent files are deleted.

The part that says “You started reading here 5 minutes ago” is how it launched about two months ago. As you read through your paginated stream you would run into your previous location and know that you had caught up. The problem with this is that it sometimes felt like a bottomless pit. When am I going to hit the end?

We just added the second part: “Jump to previous”. This allows you to jump back in time to your last bookmark and begin reading forward. You’ll be able to get an idea how far back you are by the post times on files.

We have a lot more ideas on how to combat FOMO. I hope to be showing you some more of them in the coming weeks as we roll them out.


I pulled my head out of MLKSHK the last two months and had a bit of a revelation about the future of web apps—at least, any web app I work on in my future. I present to you my new starting markup:

<html> <body> </body> </html>

Well, throw a <head> tag in there pointing to some JavaScript (generated by CoffeeScript of course) and perhaps a DIV with an id of “app” and that’s about it. I just don‘t see a need to manage “page” markup when so much of my markup is now in jQuery templates/snippets I can swap out very easily.

I resisted hash-bang paths and client-side apps for so long until I started working on a project where it made perfect sense. Since then I’ve just gotten more comfortable with the idea because:

  1. It’s easier for me to think about the server-side app as an API with your browser-view one type of client. Side-effect: your mobile app just got easier to make.
  2. This divides testing into server side and client side. Working on the UI doesn’t mean you have to flip over to the server-side tests to ensure it’s working.
  3. I think I love CoffeeScript.
  4. Marshalling data for a specific view is tedious.

I feel like separating these clients from the back-end means less time tinkering with data as it moves from your db out to your views. There is so much traversing code when you build a site and I now think if you can cut your trips into smaller loops you‘ll spend less time wrestling with data, markup, and CSS (boring) and more time writing useful functionality (fun!).


I wrote a little jQuery plugin that does a Twitter search for the URL you are looking at and inserts the tweet and some links to favor, reply, or retweet that tweet.

Twitter Search results are only valid for 6-9 days so the blue box you see below will probably disappear within a week. You should maybe try it out. :)

Source code here:


San Francisco: We have a parade for that.
San Francisco: That’s illegal, unless you stand over there.
San Francisco: That’s a great idea! (thinking to self: That is terrible.)
San Francisco: So passive-aggressive about the homeless we passed a LAW that you couldn’t lay down on the sidewalk. Be homeless! Just not near me.
San Francisco: Complaining about MUNI on Twitter will eventually fix it.
San Francisco: Uh, San Leandro isn't “SF”.
San Francisco: Boo Los Angeles! Boooooo! … Hey guys, you're supposed to yell ‘boo’ back. Guys? … Ugh! We hate you!
San Francisco: It’s FREEEZING COLD! (It’s 40°).
San Francisco: We have the best earthquakes maybe.
San Francisco: I like it. We own a small piece of it. And we’re raising a kid here. And while it has so many odd things going on with it, there are a lot of good things too. Ample, accessible parks. Great hospitals. Not just museums, a comic book museum! You can ride a train to so many movie theaters (one with IMAX). I walk to work. You run into friends often. And making plans to meet up someplace (provided MUNI goes there) is pretty easy.

And yes, if you want to just be yourself and that self is something that would get you jeered or beaten or cast out by another city, well, we probably have a parade for it.


Sorry I uncircled you on Google+. Hell, I uncircled everyone and closed my account. Boop dee boop!

Facebook was never my thing, and Google+ filled with the 300 or so people I interact with on Twitter + 1,000 or so people I have never talked to (mostly dudes) was really not my thing either. I'm on Twitter. I love Twitter. I don't need anything else to keep up with what people are doing.

It's nice to see Google finally getting a clue about how to make a social media site, but as someone remarked on Twitter, "Twitter and Facebook were indie rock bands that made it big, Google+ is a manufactured boy band."

Plus that anonymity thing is so much bullshit. It's cheating by forcing accountability rather than fostering it.


“Complain about the way other people make software by making software.”

I keep wanting to tweet that, but I feel like it's too big of an idea to stuff in a tweet without explanation. It should be unpacked because not everyone can make software, and not everyone works somewhere that they can contribute to good software. Plus, it is complaining about people complaining and meta-complaints never seem to work on Twitter.

But I do feel that many people who take shots at products (some they don't even pay for) are overly critical of them with no goal of providing their readers or friends with a constructive perspective.

Worse is when the people doing the complaining also make software or web sites or iPhone applications themselves. As visible leaders of the web, I think there are a lot of folks who could do a favor to younger, less experienced people by setting an example of critiquing to raise up rather than critiquing to tear down.

If you're a well known web or app developer who complains a lot on Twitter about other people's projects, I am very likely talking about you. You and I both know that there are many reasons why something works a certain way or why something in the backend would affect the way something works on the front-end.

As I tweeted a few weeks ago:

Many of my favorite blogs are change logs.less than a minute ago via Twitter for Mac Favorite Retweet Reply

I love reading the changelogs for apps I use. On my iPhone I read each update before upgrading, excited to see where the developers are spending their time. From libraries I rely on I use changelogs to figure out where the library is going and if the engineers still have their hearts in it.

I love making software. I feel like it's my way to state what I believe is a good way of doing things. When we didn't do infinite scrolling on MLKSHK it was because we wanted to say "We don't think that's an experience that's needed for viewing images and engaging with others—it's a way to quickly scan." We have very little AJAX except where it serves to keep the user from navigating away from a page. We love to think about these things. It's fun.

Because of this I feel a lot of empathy for other teams that end up as punching bags on Twitter due to rough edges on their products or missing features that "would just be so easy to add". While I don't want to make excuses for real, poorly run and developed products, or dysfunctional teams or teams with sales and marketing with their fingers in the product, I just don't see how complaining in 140 characters can solve anything.

I think making the right choices when you face them is the best way to say how things should be done. Having empathy for people doing what you are doing is as important as having empathy for your own users.

I'm the co-founder of MLKSHK an image and video sharing site I started with my wife. Sign up for the waitlist we'll let you know when we're ready to add more users.