Post hoc ergo propter hoc: Posterous Moved

For some years, I ran a little posterous blog called Mini Software As She’s Developed, the little brother to this blog’s great uncle’s step-cousin. It was effectively a pastebin to throw random things at. Now that Posterous is to be decommissioned, I’ve migrated it to an archival blog on WordPress.

It’s archival because these days, my glorified pastebins you shouldn’t subscribe to are:

  • My Gist Stream.
  • My Notes Community. You see, I’ve stumbled onto a nice Posterous replacement, which is a Google Plus community. Google Plus pages can work that way too, but they are more cumbersome to deal with, requiring a new window each time. G+ is not a Posterous replacement in the sense that you can’t mail things to it, or tweet them etc, but it’s quick to share stuff and works nicely from mobile. Plus one thing Posterous never sorted out was commenting – it required a Posterous login. Whereas anyone on Plus can leave a comment. So it’s turned into a nice way to create a public thread, but one that won’t spam followers when published.

Why Google killed off Google Reader: It was self-defense (GigaOM guest post)

Guest-posted this on GigaOM today.

Backstory is I started writing it on Thursday night after seeing all the Reader tweetstorm and figured it’s probably of more general interest, so I submitted it there. The original draft was ~1400 words and I wasn’t sure how seriously they take their guideline fo ~800, so just left it at 1400, but turns out they are, in fact, serious. So we edited it down.

For the record (since some people asked), I used Bloglines for as long as I could cope with its downtime, as I always found Google Reader too magic (unpredictable) with its use of Ajax. Eventually Bloglines was outaging for hours and IIRC whole days, so I made the switch to Reader, but could never get into the web app – too much Ajax magic – and instead used Reeder, sync’d to Reader when it came along. When I switched to Android for my primary device, I couldn’t find a satisfactory app, so just used Reeder on the iPad occasionally.

Meanwhile, with podcasts, I preferred the cloud approach of Odeo and Podnova, but both sadly died. I tried podcasts with Reader, but it just wasn’t the right experience so I mostly used iTunes, and then on Android, mixed it up between several apps (DoggCatcher, BeyondPod, PocketCasts, etc…the usual suspects) until eventually creating my own (still in beta). I really had problems with Listen though, so again, no didn’t do the Reader sync.

So bottom line is I did use Reader “somewhat”, but mostly as an API; and it’s no great loss to me like I appreciate it is to others. The responses to this article certainly demonstrate how passionate people are about a product they get to know and love, and use on a daily basis. It’s never easy giving up on muscle memory. The bright side of the equation is exactly what people like about it: RSS and OPML are open, so at least people can move on to Feedly, Newsblur, and so on. And I truly believe this decision ultimately liberates the standard and allows it to thrive among smaller players.

New Look, New Host

This blog is now hosted on WPEngine. I was having trouble managing it on the Linode VPS for some time now. It seemed to cause DB issues for some reason, which would in turn lock up my other sites (WebWait, AjaxPatterns etc). So I had to isolate it on a separate Linode, and decided if I’m doing that, I may as well just go for a dedicated WordPress host. So here we are at WPEngine. And took the opportunity to cut the clutter and go for a minimalist theme. So thanks Sayanee for this here IceCap theme. Update: Or not. Having some scrolling issues, oddly enough, so reverting back to the old theme for now. Update again: Fixed. It was a conflict with the MailChimp Social plugin. Luckily, Social has an option to disable its own comment view, so I can keep both plugins active.

Twitter Debates Happen When Blogs Lack Comments

2004 Rehash Alert, Meta Alert

Christian Heilmann takes people to task for conducting debates on Twitter. The irony about this is the post that triggered these debates concludes thus:

I don’t have comments on my blog but I’d love to hear from you if you feel the same way (or not). Tweet at me, discuss on HN/etc, or pick some other method and I’d be happy to chat about it, just not over a beer 🙂

The double-irony is that Christian’s blog also doesn’t have comments. (I thought it did before, maybe that’s temporary.)

Anyway, this is an age-old debate about blogs and comments, and I sure know the pain of maintaining comments in the face of endless blogspam (see below). So while I certainly wish more blogs would have comments, I’m sympathetic to those which don’t. All I’m saying is the conversation will happen more on other channels in the absence of blog comments. Some posts are notable enough to float to the top of HN, where there’s a built-in comments mechanism. But for the rest, Twitter is going to be the place.

(Incidentally, Josh Schachter’s TinyThread was quite a neat idea for offlining a conversation. Not ideal , e.g. everything’s designed around being able to tweet comments, but the basic concept had potential. Never took off though.)

Ten Years On

It’s now ten years since I completed my PhD, “Design Reuse in Human-Computer Interaction and Software Engineering”. I completed the bulk of the report (compiled from earlier papers, but with a lot of tidying up and tying together) in early 2001, submitted it for review (by two external judges) in May, received the feedback in August, revised it and submitted it on September 7. I received a balloon at some point and went to the pub with some PhD buddies and one of our supervisors.

For the first time, here is my PhD online:

I’ve sent it on request, but never got around to publishing it. I was told early on you’re required to make five copies of your PhD because five people will ever read it (Your supervisor, your other supervisor, your reviewer, your other reviewer, and your mum), so I never thought much of the actual thesis document. The papers are really more concise summaries of individual components. But I never did a postdoc, so some things in there never got published as individual papers. And it’s good to have it out there anyway, instead of sitting in a library.

I learned a lot about research and its presentation, but I also learned early on that an academic life was not for me. I’m glad I worked on something I was able to use as a practitioner during and after the PhD.


Mentoring and Judging

I’ve been blogging about some of my own projects lately, but wanted to capture/announce/disclose/link a few other things I’m please to be involved in:

  • I’m now a technical advisor to MinuteBox. I’ve been singing these guys praise since I discovered the product at SeedCamp last year. The concept is so damn useful and the founders are capable of delivering on it, so I’m proud to be associated with it.
  • Judged for Node Knockout. Did so in its inaugural year in 2010, and again this year, now from the perspective of someone who’s Noding daily. My votes.
  • Judged for HTML5 Open Call, for GDD Russia. HTML5 Canvas and SVG galore! Actually, it was great to see an upswing in SVG use…really, it has a lot of benefits over canvas in some cases, and it seems people are beginning to see it.
  • Mentoring at SeedCamp next week, as I did last year. Looking forward to seeing what’s new, and I’m pleased to have made lasting connections at the last event (MinuteBox being one of them).
  • Mentoring at GammaRebels next week (remotely). Looking forward to this event too. Polish startup community is thriving right now.

Website Migrations: CodePlane, Nginx, Passenger

I’m just about done (famous last words) with a long, and not just a bit tedious, migration from Slicehost to Linode. Both are “cloud-style” VPSs, where you can do immediate one-click backups, cloning, upgrading, etc. As VPSs, you get to choose a raw initial Linux stack, and you’re then on your own to add on web servers, command-line tools, etc.

While SliceHost has worked out fine, notwithstanding [the 2008 exit of its founders]((, Linode has much better rates these days and also seems to be gaining traction with the NodeJS community. Maybe it’s the fortunate name affinity. There’s also the distinct possibility Slicehost’s parent Rackspace will close down Slicehost itself and move things over to Rackspace. They also have great support docs. In any event, I’ve really been wanting to migrate from lighty to nginx and start using CodePlane for code repo, so I was going to be stuck doing some work anyway.

A few random notes …


I don’t intend this to be a review of Linode. Suffice to say, it was a super-easy process, and the Getting Started guide made everything nice and simple. Anyone coming from a similar environment like Slicehost would have no trouble. A nice bonus is the built-in monitoring charts, basically the kind of thing you’d get from a monit install, but right there on the admin panel, with no need to install anything. They’re powered by RRD.

Another nice bonus is ipv6 support. It’s been a long time coming, but I’m finally ready for the internet of IP-labelled things and beyond! That’s not cool. You know what’s cool? 2600:3c01::f03c:91ff:fe93:5a3e/64.

Passenger on Nginx

I’d previously used Thin on Nginx, but Passenger promised to be a lot easier. Turned out maybe not, Passenger needs a custom Nginx install. I’d already set up Nginx with apt-get, and in retrospect, I should have tried to roll it back. So there was some challenges configuring things (the default Passenger-powered nginx goes into /opt/nginx, whereas the Ubuntu one is customised for the usual suspects on ubuntu, binary in /usr/sbin, conf in /etc/, and so on).

With the custom Passenger-powered Nginx, the core Nginx config needs no passenger or ruby reference. (ie You don’t do the apache/lighttpd equivalent of declaring a dynamic modules – the lack of such things is why the custom nginx install is necessary). You only need to declare passenger in the site-specific config. For a Sinatra app, with at /path/to, you do this:

server {
  passenger_enabled on;
  location /static {
  root /path/to/public;
  index index.html index.html;

(Yes, you never need to point directly to the or its directory.)

PHTML Suffix

I still have some weird bug preventing *.phtml files running. If no-one knows the answer, I’ll just rename it.


After much messing around, I ended up with something that works for the (unendorsed, I think) “cool URI” scheme, i.e. (versus

  location / {
    rewrite ^/([a-zA-Z0-9_:]+)$ /wiki/index.php?title=$1 last;
    rewrite ^/$ /wiki/index.php?title=Main_Page last;
    root  /path/to/public;

Self-explanatory I think. Along the way, I learned about nginx’s “try_files” mechanism, which fits nicely with many PHP CMSs like WordPress and Mediawiki, where a single front controller is the gateway to the entire app. You can do stuff like try_files $uri $uri/ /index.php?page=$request_uri…though I didn’t need it here.


wordPress was similarly simple:

    if (!-e $request_filename) {
      rewrite ^/(.+)$ /index.php?p=$1 last;

One quirk I discovered was I couldn’t do online changes using the SFTP facility. This happened at Slicehost too. I eventually discovered the cause. The directory needs to be owned by the webserver. The confusing thing is it looks like SFTP isn’t set up right or you have the password wrong or something. Glad to know this.


On a slightly separate note, I started using CodePlane as a code repo. It’s similar to GitHub’s private repo, but allows for unlimited projects. While I’d want to support GitHub, given all the value it provides, it’s not feasible to store dozens of small throwaway projects there, so CodePlane is really neat so far. And the developer is highly responsive. I noted on GetSatisfaction that the homepage doesn’t personalise if you’re logged in, he fixed it in a matter of hours. He’s also been open to engaging about some other suggestions I had. So it’s working out nicely so far.

WordPress Comments Out, Disqus Comments In

A New Comment Experience

Continuing the navel-gazing theme, I’ve finally migrated 6 glorious years of your WordPress comments to the cloud. Oh wait, they’re already in the cloud. But I’ve migrated them to someone else’s cloud. This blog being about software and the like, wanted to reflect on the motivation and process to move comments to Disqus …

I primarily decided to do this because it’s incredibly hard to “follow the conversation”, despite social media pundits telling us that’s exactly what we should be doing. Technorati is effectively no longer. Other systems which try to alert you to new links lag and miss many. Spam is not the only cause; the proliferation of URL shorteners is another factor. I’m hopeful Disqus will do a better job. So far, so good.

Furthermore, Disqus lets commenters post via their online identity – Twitter, etc – and also show posts or comments though those media. As a user commenting elsewhere, I’ve found it vastly preferable to the old school “enter your name, email, url, AGAIN”.

To be fair, I’m still not crazy on the user experience of dynamic (“Ajax”) comments, something I experimented with myself in Scrumptious. There are other comment widgets around (UserKit, Facebook, Google Friend Connect which one could assume will be replaced at some point by a G+ equivalent), but I like Disqus for its flexibility – not tied to any one user/social platform – and user experience. They’ve done a great job in both desktop and mobile browsers of making the dynamic comment experience pretty smooth.

I heard a podcast where someone was complaining about people “giving up their comments” to third parties. When challenged to say if he’s ever “used” those comments, he was silent. I don’t expect to do anything with comments other than display them. The only risk would be Disqus shutting down, and they provide an XML backup dump. I couldn’t see if anyone has actually scripted the migration back to WordPress, but we can be certain it will happen in a jiffy in the unlikely event Disqus was to shut down.


Installation was pretty simple, took around 15 minutes. I did have to sign up to Akismet and tell Disqus my key, which fine, but a surprise as I thought spam prevent was one of Disqus’s core competencies.

I also appreciate that I get a mail for each comment, which I can reply to, or reply with “Delete” if it’s unwanted. (It’s only sent me one false negative spam in 48 hours.)

The WordPress plugin is nice. It works (not a foregone conclusion in the WordPress plugin universe), it has a nice UI, and it integrates with Comments as a complete replacement.

The migration itself actually took about 12 hours and led me to be slightly concerned. We’re so used to instant gratification, but for a free service, I think this is fine. I just wish they’d made it more clear about average times to save me trawling through the forums to discover it’s normal.

For whatever reason, the resulting text was way small. So I tweaked the WordPress Cutline theme’s custom.css for a larger font:

  1. #disqus_thread { font-size: 1.4em; }

I, Xoogler


I am now ex-Google. In this post, I’ll reflect on my time as a HTML5/Chrome Developer Advocate at Google, why I decided to move on, and what I’ll be doing next. In a follow-up post, I’ll do a bit of a roundup of my main activities while at Google. This is a long one as other priorities meant I didn’t get around to blogging much about Google while I was actually there!

Where to next? Nowhere, of a sort. I’m staying right here in London and not jumping to any company at this time. I have a ton of itches to scratch, so I’m looking forward to doing some hacking and building apps. I’ll be drinking the HTML5 kool-aid I’ve dished out in ample quantities.

Life at Google

I joined Google in April, 2010, and it really is an amazing place to be. I’ve worked in a lot of different environments, from startups to SMEs, to large enterprises, and across several industry sectors…and Google really does stand out as uniquely awesome, for the following reasons:

  • The people. Of course, you always hear about all the industry rockstars, but the remarkable thing is those conspicuous by their absence. If you’ve worked in a big company, you’ll know what I’m talking about. There’s always that guy (or girl). Only one of them if you’re lucky, but one is all it takes to doom projects and drive away talent. That guy (or girl), who might not even be a developer and might not even work in your department, but will still be there to do silly things and block all manner of progress, maybe in the name of mortgage-driven development or maybe because they have a solid theory about sticking beans in their nose. The absence of those people from Google is the really noticeable difference, not the rockstars. (Rockstars are not exclusive to Google after all.) To quote Joe Kraus from In the Plex, “There were no bozos”. But more than that, the baseline is set high and defended wide.

    Having conducted numerous job interviews, I saw first-hand how the company is relentless in maintaining its quality threshold; from my observations Google takes a “talent collector” attitude. It’s patient and would rather accumulate a talent pool over time than make any compromises. Every company likes to pay “people are our best asset” lip service, but Google takes it really, really seriously.

    Most importantly, we’re not just talking about technical ability, but a company culture of helpfulness and enthusiasm, and this includes non-engineering functions too. Certainly people are busy, so they won’t always go along with your plan…but when there is inaction, it’s not borne of malice but resource constraints. It’s not the zero-sum, cut-throat, mentality you sometimes see in mature industries, where there’s an expectation that one worker’s promotion is another’s stagnation.

  • The ambition. In a previous role, a phrase I heard constantly was “we’re not trying to boil the ocean”. This was a valid way of keeping things real, but also a good way to progressively evaporate the dreamer in each of us. In contrast, “boiling the ocean” is etched into Google’s DNA. Google+ is the latest example, another is Chrome, the product I worked most closely with, another is Android, etc.
  • The openness. Internally, Google is incredibly open about upcoming projects and company strategy generally. It has both the culture and the technology to pull this off. Culture-wise, there’s an attitude that people should be free to test and even work with other projects; as Dion once pointed out, openness is the real genius behind 20% time and the part many companies miss when they pontificate about “driving innovation” and “inspiring creativity”. Using Buzz internally was tremendously rewarding; companies who have used tools like Yammer can probably relate, though I think Buzz is more amenable to these kinds of conversations (lacking 140-char limits and supporting comments against status updates).
  • FOOD! And the massages, etc. But especially the food! “Free” is not actually the main benefit. It’s simply the option to go grab a healthy (or less healthy, but the point is that you have a choice) meal quickly with your colleagues. That it’s at work means it’s convenient and that it’s free means there’s no counting or payment process to slow things down. Not that it hurts the bottom line either :).

So why would I leave all that? I’ll explain more further down …

Life in Developer Relations

I’m proud and fortunate to have have been part of Google’s ever-growing Developer Relations organisation. Here’s Don Dodge’s description of the team: “Thirteen of them have authored books, at least four of them have software patents to their name, and most of them have made significant contributions to Open Source projects. Several others have contributed to industry standards, and sit on standards boards.”

Working in developer relations gave me a chance to be paid to do things I’d done in my spare time: participate in conferences, blog, play with interesting new tech, etc. It let me meet and be inspired by many developers around the world. And it also gave me a chance to reflect on the growing discipline of developer relations and the broader topic of Developer Experience.


Overall, companies are realising that if they want to provide APIs and platforms, it takes more than a marketing department to win developers over and support them in their efforts. Microsoft has been a pioneer here with its “Developers, Developers, Developers” mantra (there was actually a profound point in there!) and Apple too with its evangelists; but Google has more recently played a key role in grounding this role more on the engineering side and framing the role as an “advocate” of the external developer rather than an evangelist of the platform.

Life in HTML5 and Chrome

The growth of HTML5 and Chrome have both been astounding in the time I’ve been working in this role. (Naturally I accept full, unconditional, personal responsibility.) We saw Chrome jump from 70M actives to 160M between IO 2010 and IO 2011. And the web feels like a different place.

The APIs we now enjoy as web developers are plentiful and continue en masse – CSS3, WebGL, IndexedDB all in several major browsers. Installable web apps. Mobile HTML5 en masse. At the same time, it’s not a foregone conclusion that “the web has won”. There’s the risk of fragmentation as browsers plow ahead with different features. It’s being handled nicely through stnadards process, but the risk is always there. And while there’s not much life in desktop platforms, the native mobile platforms are rolling along very nicely, thankyou very much. Mobile HTML5 has come a long way, but the gap remains.

Just as interesting, the fundamental development platform has shifted. We’re seeing an excellent shift towards a superior developer experience. The HTML/CSS/JS trio is becoming HTML++/CSS++/JS++ through a new breed of language enhancements which don’t so much replace them as augment them. Sugar … it’s sweet! Jade/Stylus/CoffeeScript is the stack preferred by the exciting new SocketStream framework and will continue to flourish until the browsers themselves start to simplify things, through intiatives like JS.Next.

And then there’s the Nodequake …


Life After Google

There’s a lot of logical career moves from here, but since life is short, logic is overrated. The main reason I decided to move on is I have a massive urge to do some dedicated hacking time. There are apps in my head, they need to come out.

I was certainly able to have some fun coding while at Google, with some bite-size apps even being used in production.

But I was at a fork in the road. I’d be struggling to cultivate a serious app, with a serious server side and serious users, in 20% time. Yes, 20% time really does exist and I saw some people achieve good things with it. But 20% is an upper bound, and for the kind of apps I want to be working on, I’ll want to be spending 120% time on them to get them going. Also, some apps I want to make would be seen as downright mundane, or quirky to the point of weird, but are still apps that I want to transplant from my head to my web server. If for no other reason than I want to use them myself.

From a technology perspective, I really want into Node too. I’ve been dreaming about server-side JavaScript for a long time and looking forward to using it in anger now that Node took it mainstream.

My immediate goal, though, is to fix up a few existing sites, e.g. make WebWait mobile-friendly and make ListOfTweets cleaner, persistent, and social. I have a few apps on similar scale in mind beyond that, and can’t wait to make them happen! Of course, I’ll be happy to get feedback, so please let me know if you want early access. Of course, stay tuned on this blog for more info.

And Thanks

Thanks go to my colleagues, partner companies, and the developer communities I’ve been able to work with throughout my time at Google, as well as those who invited me to apply for a role I didn’t really know existed (you know who you are!). Please keep in touch.

And thanks for reading. As mentioned above, I’ll write up a roundup of my time at Google in a followup post.

(This post is slightly late; my final week was the week before last. But a few hours after handing over my card and a big pile of tech on that Friday afternoon, I was bound for the excellent south coast of Turkey, where limited bandwidth and way too much sunshine prevented me from mentioning this earlier.)