Seen on Mars #2

Update: on Google+, Aaron Shaver points out that there was nothing from Mars in this post! D’oh! In a week filled with news from Mars, on a blog with “Mars” in the name, I really have to include something. So, here we go: did the Curiosity rover photograph the crash landing of the spacecraft that took it to Mars?

I now return to the previously written post:

This week, I managed to keep my link gathering going, but I didn’t do as good a job cross-posting these links to Twitter and G+. I’ll figure out a better way to do it.

One thing that may make this all a bit easier is that if I find myself reading something on the iPad and want to quickly write something for this post or Twitter, I can just grab my keyboard. I just picked up a Logitech K760 keyboard (Amazon affiliate link) which allows me to easily switch between typing on my Mac and typing on my iPad.

This will also make taking notes on my iPad easier. Why take notes on an iPad specifically? Because it enables doodling! Alma Hoffman wrote a good article about the value of doodling and drawing pictures in general.

Web Development

Addy Osmani wrote an epic article for Smashing Magazine that introduces JavaScript MVC frameworks, the TodoMVC project for quickly comparing the framework styles, various criteria you can use to evaluate the choices, guidelines on which framework to use when, quotes from people who are users are the various frameworks and thoughts about tools beyond just MVC. If you’re wrestling with non-trivial JavaScript applications, you really should check this out.

A quick rundown from Steven Sanderson of Knockout.js on the 7 front-end libraries/frameworks represented at the Throne of JS. Good reading, if you’re curious about how these libraries are similar and different.

Firefox adds supports for @supports in CSS. This most excellent new feature is like Modernizr‘s CSS bits built straight in CSS. Paul Irish even reports that Modernizr will use the proposed JS version of supports CSS. Apply different CSS depending on what the browser supports.

Daniel Buchner has code that lets you watch for DOM mutations that match a given CSS selector. The cool thing about this approach is that it uses the browser’s own machinery to do the matching, rather than a bunch of custom (and slow) JavaScript.

Rob Campbell wrote about the $() function that comes for free in the browser consoles. Following Firebug’s lead, $() performs a document.getElementById, which is not super useful. After some discussion, Firefox Nightly has already switched to using $() for document.querySelector. ($$() remains document.querySelectorAll).

Want to give Firefox OS (Boot2Gecko) a try? It’s not yet for the faint of heart, but Jeff Griffiths gives the details on trying it out on your desktop machine.

Reveal.js is a nice looking (yet another) HTML5 presentation library.

Considered tinkering with Go? Jeff Wendling wrote a detailed, step-by-step rundown of building a 1997-esque guestbook with Go.

Finally, in case you missed it, I wrote about live editing of HTML in the browser and the hurdle that I think we need to overcome to get there: templates.

Other Geekery

Tindle is a site where people can sell their electronic creations. There are some neat looking kits there!


Seen on Mars #1

Back in control

Recently, I’ve seen a fair number of articles where people are complaining about having the data under the control of one for-profit entity or another. That tension will always be there. One thing I can control, though, is this blog. With better software than I’ve had in the past, I hope to maintain my interesting sets of links (with commentary) on my blog in addition to Twitter and G+.

Software Development

The new Montage framework from Motorola Mobility has some awesome ideas in it. Ars Technica has posted an introduction by the framework’s creators. The article also talks about Ninja and Screening, which are visual tools for building and testing Montage apps.

The Google Summer of Code project to build a graphical event timeline for Firefox is progressing nicely indeed. You can download the add-on now.

Parashuram Narasimhan shows us how we can get going with IndexedDB today on browsers that don’t support it using IndexedDB polyfills.

Metaquery is an interesting approach to breakpoints in web design. Of course, not everyone thinks breakpoints are the right approach, but this is still an interesting library.

Firefox add-ons have been downloaded 3 billion times now. Firebug has nearly 50 million downloads. And those figures are from alone. I know for certain that a significant number of Firebug downloads have come straight from the Firebug site.

Speaking of Firebug, did you know that you can set conditional breakpoints not only for JavaScript but for XHR and even cookies as well?

Lea Verou has introduced Prism, the new JavaScript syntax highlighting library that she extracted from her Dabblet project.

WeasyPrint converts HTML/CSS (including print styles) to beautiful PDFs (well, assuming your original HTML/CSS was beautiful!). Unlike PrinceXML, WeasyPrint is free (BSD-licensed).

How to make a game like Cut the Rope. I wonder if a tutorial like this exists for the web? I enjoy Cut the Rope, personally.

Other tech

Ed Bott finds Microsoft’s new strategy laid out in MSFT’s 10-K. This is a bold shift for Microsoft. It’s hard to imagine Microsoft as the underdog, but to some extent that’s the position they find themselves in.


Better Mac OS defaults for geeks that I will likely not use all of, but there are a bunch of useful settings in here.


Ending SlowNews Experiment #1

The great thing about experiments is that they teach you things. Trying something and having it not work is not a failure. It’s information.

I still believe in what I said in my “What is SlowNews?” post: the move toward real-time random links and news is a bad move, in general. That basic part of the experiment is not why I’m dropping my weekly SlowNews posts.

This blog is more than 8 years old, and I’ve always posted to it for myself. I’ve posted thoughts that I wanted to work out in writing. I’ve posted things that I wanted to share because I thought they could help people. I’ve posted about things that I thought were interesting and worthy of additional commentary. I thought these SlowNews postings would fit in that latter category.

But, I haven’t particularly enjoyed putting those posts together in the format I’ve been doing. While it is a chance to reflect on the happenings of the week, what I’ve done so far has felt too random. There’s too little narrative. So, for now, SlowNews goes back onto the idea shelf, waiting for a better implementation.

SlowNews: Declarative Events in JS, Redis, Mono, Facebook x2

Ending This SlowNews Experiment

This is the last issue of this SlowNews format. I may or may not try a new format. I’ve written a bit more about why.

Reactive JavaScript: Declarative Programming for Events

When a problem space is well understood, adding declarative forms can really save on a lot of work. Here’s an interesting look at the Reactive Extensions to JavaScript, created by the team at Microsoft that creative the Reactive Extensions for .NET. I didn’t find the syntax there appealing, but the ideas are interesting. The Flapjax project provides a nicer looking syntax, but requires a compilation step to pure JS (the compiler is written in JS and can run in the browser). I like the Flapjax tutorial reference to spreadsheets, because spreadsheets provide a great model for certain kinds of declarative work and tying declarative structures with additional imperative programming is very powerful. One of the reasons we chose SproutCore for Bespin is the ability to bind views directly to data so that the two automatically stay in sync.

A Collection of Redis Use Cases

Mathias Meyer’s Collection of Redis Use Cases provides a great collection of examples to give you an idea of where you might apply Redis in your own applications. In the “Not Only SQL” movement, Redis is a good tool to have in your toolbox.

Using node.js To Bootstrap a Server from Client Code

Dion Almaer wrote up the experience he and Ben Galbraith had in creating the Project Appetite site for Palm WebOS developers. Following the modern style of having the client do presentation and the web server just providing an API, they could work on client and server independently. It turns out that a quick way to get a server up and running was just to reuse client-side code on the server (in this case, using node.js).

Harmony: JavaScript Testing in Ruby

Harmony takes advantage of Johnson, a Ruby to JavaScript bridge and lets you write unit tests for your JavaScript code in Ruby. It’s not unreasonable to ask why, given that you can write the tests for your JavaScript code in, say, JavaScript… but, on first glance to me, the benefit here would seem to be that you can test server and client bits together conveniently.

Making Facebook 2x Faster

Jason Sobel gives the rundown on a 2009 project to make Facebook’s pages load twice as fast. This is a good account of what it can take to make a speedy site.

Thoughtworkers Subjective Impressions of VCS

Having trouble picking a version control system (VCS) for your next project? Martin Fowler has posted some general impressions that Thoughtworks people have picked up while working on client projects. I’ve worked on a variety of projects using a variety of tools (RCS, CVS, ClearCase, Subversion, Bazaar-NG, Mercurial, Git) and Martin’s roundup meshes pretty well with my own impressions.

Canviz: graphviz on Canvas

Need to produce a directed graph? Only care about the “modern” browsers? Then canviz is for you! Canviz is open source (MIT license) and lets you create a variety of graphs just as you can with the graphviz project, but entirely client side.

HTML5 Web Sockets Spec Reimagined

Tim Bray dove into the HTML5 spec and found a number of new features that he liked. He also went deep on the Web Sockets spec in particular, going so far as to produce an alternate version of the spec to make things clearer. Looking at Tim’s alternate, there’s a lot that he left alone.

State of Mono

Miguel de Icaza has written up an overview of what’s been going on with the Mono project. It looks to me like the Mono platform is still evolving quite nicely. If you happen to be near Ann Arbor on Thursday, February 25th, you can learn about the state of .NET web development at the a2


10 Online Code Editors

There has been a lot of development in web-based code editors, and I think this space will just get busier as time goes on. Here’s a roundup of 10 online code editors, including screenshots. ObDisclaimer: I’m the project lead for Bespin.

Interesting Releases

> list
11 goto 11

Top 11 ways to deploy a website

11. rsync
10. Webistrano
1. Your foot!

SlowNews: IM in JS, XHP, ePub

Ajax IM: Open Source IM, Totally JavaScript

The MIT-licensed Ajax IM library lets you add instant messaging to your site and features a new node.js server side. This is certainly a good use for an async framework like node! The one thing I noticed while sitting on their site is that it has an unpleasant way of tacking things onto your browser’s history without actually going anywhere. Should you want to roll your own messaging, you could fire up Faye on node.js and use your favorite Bayeux client side library.

XHP: E4X for PHP

Did you know that some implementations of ECMAScript allow you to embed XML right in your JavaScript? I’d imagine many people don’t, because folks in the “real world” need to make sites that run on IE. Well, if you’ve been pining for the ability to embed XML right there in your code, or if you’ve been looking for a chance to turn PHP inside out, you’re going to love XHP, which Facebook recently open sourced. At the very least, you’ll go read about it and then learn about XHP’s implementation performance characteristics from none other than Rasmus himself.


OK, so I’m a well-known booster of JavaScript. But, you’ll never hear me say that it’s perfect. Every language has its warts, and wtfjs has an enjoyable collection of JavaScript’s. Now With Automatically More Less lets Mac users write their CSS in LESS and have that LESS automatically turned into valid CSS as they work. Languages like LESS are cool, because they have an opportunity to influence how the actual standards will evolve.

ePub in JavaScript

The ePub standard looks to be gaining serious momentum as an ebook format, albeit without the support of the top selling ebook reader to date. There has been a good bit of work done to create usable ePub readers in JavaScript, and Michael Mahemoff has a good roundup over at Ajaxian.

> list
11 goto 11

Top 11 JavaScript Features (from wtfjs)

11. "string" instanceof String; // false.
10. typeof NaN // number, of course.

  var x = y = 1;
alert(x); // undefined
alert(y); // 1 -- oops, auto-global!

SlowNews: HipHop, Redis, Riak, Weave, Homebrew

HipHop Compiles PHP to C++

What do you do if you have to serve up 400 billion PHP page views a month? You don’t, because you’re not Facebook. But, for Facebook speeding things up can make a real difference on their compute costs. Their newly open sourced tool HipHop translates PHP to C++ and then compiles the result with g++. Net benefit? Apparently 50% less CPU usage. Nice!

Also, check out Paul Biggar’s take on PHP compilation and how HipHop impacts the phc project.

Mozilla Weave Hits 1.0, Adds Developer APIs

The Mozilla Weave project recently shipped 1.0 of their Firefox extension that synchronizes information (securely and privately) between your browsers. This week, the Weave team has announced Python and JavaScript client libraries and APIs in general for accessing this data. They have web-based and iPhone clients as prototypes, which is really cool. Personally, I find the identity aspects to Weave very interesting and hope to see more experimentation and implementation of identity directly in the browser (how many more username and password systems do you want to implement?)

Disclaimer: I work for Mozilla Labs.

Redis Goes Beyond RAM

Redis is a very useful disk-backed key/value store with lots of interesting atomic operations. It’s always had the limitation that the entire dataset needed to fit in memory. antirez explains how that limitation is removed in Redis 2.0. The concept of virtual memory is lifted straight from OS theory and practice, but the application-level implementation is a better fit for Redis’ needs.

Homebrew: OS X’s Missing Package Manager

Homebrew continues to be a fairly stealth project, I think. If you’re a Mac user, though, it’s worth looking at. It’s a super simple package management system that makes it easy to install many common packages and even makes it easy to manage packages that you download and build yourself. Andre Arko posted a nice introduction.

Removing Features

Lukas Mathis has written one of the best articles about removing features that I’ve seen. It’s always tempting to keep adding more, when really adding better is really what’s required.

More On The Use of h.264

The hubbub around h.264 that I talked about in the first SlowNews issue has a great new summary courtesy of Ben Schwartz. Ben took the actual license text from various pieces of software that produce h.264 videos, making it plain as day that people creating videos and posting them online are quite often in violation of the patents. Whatever people may think of Theora’s quality, at least it is unencumbered.

Mugtug Sketchpad: Fast Painting with Canvas

If you’ve doubted the growing ability of standards-based webapps to fully replace many desktop apps, Sketchpad should sway you. As long as you’re not using IE.

Detailed Riak Overview

Sean Cribbs insists that you should use Riak for your next Rails app. I’m not likely to be created a Rails app any time soon, but this was still a good overview of Riak. I’ve personally had a lot more exposure to MongoDB and Redis than Riak, so it’s nice to get a feel for what Riak’s all about. Also worth a look: Riak now supports JavaScript-based map/reduce jobs.

Rails 3 Beta Release

I don’t intend to include beta releases or vaporware here in general, but Rails 3 has been in development for a long time and is coming out from under its merger with Merb. So, in case you missed it, here’s DHH’s post about Rails 3.0’s beta.

Free F# Book

I’ve been impressed by some of the directions in which Microsoft has taken their development tools. The F# programming language, a functional language, seems like the kind of thing you wouldn’t see coming out of Microsoft (or, at least, beyond the research prototype stage). But, it’s certainly well beyond research prototype and now you can even get a feel for F# from a new, free book by John Puopolo with Sandy Squires.

> list
11 goto 11

Top 11 Reasons Why There Was No List Last Week

11. Perhaps every other SlowNews issue has no list?

10. There was no list?

1. I forgot.

SlowNews: iPad, zeromq, open source, toppcloud

Apple iPad: Open and Closed

Obviously, the iPad was introduced this past weekend and probably a million words or more about it have spilled out onto the net. Here’s just a few of those words.

Yehuda Katz takes the open side in “A GREAT Day for Open Technologies”. Actually, Yehuda takes both sides. Apple has created a closed platform while at the same time creating a very powerful platform for the Open Web. The trouble is that if you view the iPad as the future of computing, it is a scary thought as a geek to work on a platform that is so closed off. That’s more of Peter Kim’s take.

Personally, I agree with stevenf’s take that the iPad is the “new world” of computing, and it’s really a better world for most users. But, it’s only “new world 1.0”. It requires another computer. It can’t print. I believe that Apple is going to create a Time Capsule sort of device to which you can dock iPhones and iPads without needing a full computer, because an iPad is a full-enough computer for most people. For now, though, iPad is going to start making its way in the world as that “third device” that Steve Jobs referred to upon introducing it.

Mark Pilgrim and I apparently had similar tracks to learning computers (though mine was a TRS-80 Model III, not an Apple ][). He worries that future tinkerers will be left in the cold because of devices like iPads. There’s a huge difference between now and a couple decades ago. Computers were all for tinkerers then. Computers are for everyone now. I think there will remain ways for people to tinker.

iPad SDK: No Multitasking, New Shared Files

MacRumors has a quick rundown of the new iPad SDK. It has support for external displays (for Keynote, I’d imagine). No multitasking is supported. There’s a new shared filesystem, which is presumed to be the way to get iWork documents onto the tablet. There’s also said to be support for apps that support both iPad and iPhone, which should be interesting.

zeromq: Very Lightweight Messaging

Martin Sustrik and Martin Lucina have written an article about zeromq (“a new approach to messaging”), which looks to be about as minimal a messaging system as you can imagine. It’s got an API that’s patterned after BSD sockets. The comments that follow the article are quite interesting and useful as well. There’s a comparison of zeromq, AMQP and RestMS and the different kinds of things those are good at. RestMS actually sounds quite interesting to me. I’ll need to read a bit more about Zyre, which is a RestMS implementation.

ScriptCommunicator: Long Polling for Every Browser

Amir from Plurk has created a small (80 lines) module (ScriptCommunicator) for doing long polling, regardless of the browser. Even if real time isn’t right for everything (this is SlowNews after all), Comet is quite important and this little library deals with some of the tricky bits for one style of Comet.

(fab): A DSL for async coding with node.js

fab will likely remind people of Lisp, because of all of the parentheses. Look more closely, and you’ll notice that the parens are not nested… because this is proper JS, and fab is working through function call chaining. The goal of fab was to provide a nice way to define how URLs get handled in a node.js-powered web app. It’s a neat idea and the result is reasonably clean.

gccgo is Official

GCC 4.5 is slated to include Go. It will be interesting to see when Go-based projects actually start appearing, and when the first Go-based “killer app” arrives on the scene (think of what CouchDB and RabbitMQ have done for Erlang, for example).

75% of Linux Code is Written by Paid People

Over the years, I have seen a number of people characterize open source as written by “hobbyists”. That isn’t actually a derogatory thing to say, because people volunteering their time to a project that they believe in and love will likely do it well and with gusto. But, I’ve always thought that the view of hobbyist-driven open source is not the likely picture for large and successful open source projects. Jonathan Corbet analyzed Linux kernel contributions across 2009 and found that 75% of the code came from people who were being paid to write that code.

Creating a significant open source project can be at least a full time job. For something like Linux, it’s obviously many full time jobs.

toppcloud: Easy, Reliable Cloud Deployment

The prolific Ian Bicking has just spread word of toppcloud. He’s been mentioning it on twitter for a while, but now he gives the full story. If you have to deploy server side code (and don’t mind using Ubuntu on your VPS), check out toppcloud as a way to potentially make things easier.

Hot Code Reloading for node.js

Blaine Cook has a branch of node.js that can hot reload modules. This is obviously great in both development and production, when implemented well.

A zsh Prompt That Understands Hg, Git, Mac Batteries

Steve Losh has created a seriously tricked out zsh prompt.

CommonJS: The First Year

CommonJS turned a year old this past week, and I wrote a retrospective on that first year. Short form: JavaScript is growing fast!

Geek Conversation Killers

Philip Guo has an interesting article about awkwardness of “geeks” in conversation. I have definitely both witnessed this and caught myself doing some of these things. If you’re a geek like me, put a few brain cells onto the task of watching for these things during your next conversation. Calley Soukup has an interesting collection of observations about how sci-fi fans communicate, dating back to 1999.

Feedback for SlowNews #1

“very promising debut!!!” @uhop

Hypocrite. The article was posted today. Let’s see if it’s still here 24 months from now in the same form.” lutusp on reddit. Ed: this is odd, everyone has to start with a thought sometime. I’m pretty sure that in two years I’m still going to think that real time flow of random news is a bad thing.

SlowNews: Sikuli,, Pintura, Firefox 3.6

SlowNews on BSOM: An Experiment

This is my first SlowNews issue. Read What is SlowNews?, if you’re curious about it.

Sikuli: Picture-Driven Scripting


The Sikuli project out of MIT has to be seen to really get a feel for it. The short of it is that it’s a scripting language for controlling applications that works by taking screenshots of the various controls that need to be clicked on or otherwise manipulated. Sikuli uses computer vision techniques to find a matching part of the screen at that point in the script. This is seriously cool.

Firefox 3.6: Speed, Personas and Video Controversy

Disclosure: I work for Mozilla. My opinions are my own.

Firefox 3.6 was released last week, representing a lot of work from a whole lot of people. JavaScript performance is faster still than the already fast 3.5 and there have been a number of other areas of the UI that tightened up, performance-wise. Personas made it into the main product (before they were available only as an add-on).

Unrelated to the 3.6 launch, there was some controversy as YouTube and Vimeo both announced support for HTML5’s video tag. Firefox supports the <video> tag, but not the H.264 codec used by both YouTube and Vimeo. There are some very good reasons for this, which Mozilla’s Mike Shaver went into detail on. Chris Blizzard went into even more detail, and provided an interesting historical comparison with gif. Those are worth reading if you produce any videos for consumption on the net, because the issue extends not just to browser manufacturers and sites like YouTube. Even people producing videos encoded with h.264 may find themselves with a bill to pay come 2011.

Pintura: CommonJS/JSGI Server-Side JS Framework

Kris Zyp introduces Pintura, a server-side JavaScript framework that keeps the presentation on the client side where it belongs. Kris also wrote a Getting Started with Pintura article that’s worth a read. Pintura wins bonus points for running on node.js, Narwhal and Flusspferd. For those keeping score at home, that means that Pintura can run on SpiderMonkey, v8, Rhino and JavaScriptCore. That’s what CommonJS is all about!

Amazon Kindle: There’s An Active Content For That?

Amazon has announced a development kit for the Kindle, coming in February. The SDK will allow developers to create “active content”. Active content will certainly be different from iPhone apps, if for no reason other than the refresh rate of the eInk screen. Still, it’s an interesting development. Amazon has never said how many Kindles they’ve sold, but you can bet it’s less than the tens of millions of iPhone OS devices out there. You can sign up for the beta now. Concept-driven Open Source

The Letters Icon

Most open source software begins its public life with code. It obviously started out as an idea and was built up following some need or desire, but by the time it’s public there’s some code. The currently-vaporous Mac mail client “” started off with NetNewsWire developer Brent Simmons saying he wanted a better mail client. Macworld commented on the literally hundreds of email messages that followed. John Gruber was elected president for the 1.0 release, and Gus Mueller has taken on the technical leadership. Gus has also started a GitHub repository for

This is a really interesting way to start an open source project, and I wish them well. As has been pointed out on the mailing list, creating a better mail client has been tried before and failed. But, the leadership of the project is encouraging and this is certainly one to watch.

Fusebox Gives You Safely Extendable JS “Natives”

JavaScript is cool in that you can extend String or Array to add many conveniences. It’s not so cool in that others may do it for you, and in ways that are not quite what you want. If you’re willing to suffer through a bit of inconvenience (like declaring an array by calling fb.Array() rather than just []), Fusebox lets you extend native objects without impacting any other JavaScript code.

LuaJIT Gets Funded

It’s news to me that Google uses Lua internally, but they apparently do count Lua among the languages they use. Enough so that Google has pitched € 8,000 into the development of LuaJIT. Add to that Athena Capital Research’s € 12,000 and a couple of smaller donations, and you’ve got a successful funding drive. It’s great to see open source development supported so directly.

Realism In UI Design

Realism in UI Design is an excellent article for anyone who might be contemplating just using photos from iStockPhoto for their icons rather than having a custom icon set designed for their app. For everyone else, it’s a good read with some nice visual reinforcement about striking a balance in realism in your user interfaces. Also worth checking out is Mike Rundle’s article from December which provides some tips for getting subtly realistic user interfaces.

Bill Gates Joins the Internet World

BillG seems to be going all-in with a new Twitter account and a bloggy sort of site (The Gates Notes). Whatever you may think of Microsoft and Gates’ driving of Microsoft, it’s impossible to deny that he’s a big thinker and one worth following. Speaking of following, after just a day on Twitter he has nearly 250,000 followers. The welcome from Ashton Kutcher (4.4 million followers) no doubt helped, though it’s unclear to me just how much overlap there is between Ashton Kutcher fans and BillG devotees.

Notable Releases

  • Firebug 1.5 was released ahead of Firefox 3.6 with a bunch of new features. This is notable, because Firebug would always lag Firefox releases in the past.
  • Cassandra 0.5 includes improvements to multicore performance, the bootstrap process and adds the ability to decommission a live node.

> list
11 goto 11

Top 11 Most Anticipated Product Introductions This Week

11. Microsoft Ribbon Hero for the Xbox360.

10. Google Sock Search

1. CrunchPhone