Simon Willison’s Weblog

Subscribe

September 2009

Sept. 21, 2009

homebrew. Exciting alternative to MacPorts for compiling software on OS X—homebrew avoids sudo and defines packages as simple Ruby scripts, shared and distributed using Git.

# 6:51 pm / homebrew, osx, git, ruby, macports

PostBin. Handy debugging tool for webhooks—create a TinyURL-style URL, then see a log of any POST requests made to that address.

# 11:03 pm / webhooks, post, http, postbin

cloud-crowd. New parallel processing worker/job queue system with a strikingly elegant architecture. The central server is an HTTP server that manages job requests, which are farmed out to a number of node HTTP servers which fork off worker processes to do the work. All communication is webhook-style JSON, and the servers are implemented in Sinatra and Thin using a tiny amount of code. The web-based monitoring interface is simply beautiful, using canvas to display graphs showing the system’s overall activity.

# 11:09 pm / cloudcrowd, webhooks, json, http, message-queues, workers, sinatra, thin, ruby, canvas

Sept. 23, 2009

Introducing Google Chrome Frame. Here’s what Alex Russell has been up to at Google: An IE plugin (for 6, 7 and 8 on all Windows versions) which embeds the Google Chrome rendering engine—sites can then opt-in to using it by including a X-UA-Compatible meta tag. Seems to be aimed at corporate networks which mandate IE for badly written intranet applications—they can roll this out without retraining users to use another browser or breaking their existing in house apps.

# 9:57 am / alex-russell, chromeframe, google, ie, webkit, chrome, xuacompatible

In the past, the Google Wave team has spent countless hours solely on improving the experience of running Google Wave in Internet Explorer. We could continue in this fashion, but using Google Chrome Frame instead lets us invest all that engineering time in more features for all our users, without leaving Internet Explorer users behind.

Lars Rasmussen and Adam Schuck

# 9:59 am / lars-rasmussen, adam-schuck, google-wave, chrome, ie, google, wave, chromeframe

Red Dust. Tom Coates used Flickr’s new Galleries feature (which lets you build a curated collection of up to 18 photos from other Flickr users and add your commentary) to construct a stunning compilation of photos of the Sydney dust storms.

# 2:20 pm / duststorms, tom-coates, flickr, photography, sydney

Ask browser users, and they'll tell you the overwhelming reason why they can't upgrade to a more modern, standards-compliant browser is because their work won't let them. Ask IT departments why this is the case and they'll point to the six- to seven-figure costs of upgrading turn-of-the-century Intranets written to work in, and only in, Internet Explorer 6. Google have provided a way for websites to opt out of IE6 (and even IE7) support without requiring enterprise-wide, Intranet-breaking browser upgrades.

Charles Miller

# 3:08 pm / chrome, chromeframe, google, ie, ie6, charles-miller

Diesel. Yet Another Asynchronous Python Comet Library, of interest because this is the first one I’ve seen that uses Python’s generator coroutines, taking advantage of the return value of the yield statement to feed messages in to a generator function. Currently only works on Python 2.6 on Linux due to a dependency on 2.6’s epoll support.

# 5:15 pm / generators, diesel, comet, async, python

PubSubHubbub for Google Alerts. “Think of it as a search API that tells *you* when it finds new results.”

# 9:30 pm / pubsubhubbub, google, google-alerts, webhooks

More technical details about Google Chrome Frame. It’s implemented as a Browser Helper Object, uses IE’s cookies, history and password-remembering, includes the WebKit developer tools and appends “chromeframe” to the regular IE user agent string—though not apparently the Chrome Frame version itself.

# 10:20 pm / google, chromeframe, chrome, bho, ie

Gmail for Mobile: Reducing Startup Latency. Cheeky iPhone optimisation trick—parsing 200 KB of JavaScript takes an iPhone 2.2 device 2.6 seconds, so Gmail embeds code components in /* comments */ in a script tag and evals them on demand later on when the features are needed.

# 10:29 pm / iphone, google, performance, javascript, optimisation

Sept. 24, 2009

Given the security issues with plugins in general and Google Chrome in particular, Google Chrome Frame running as a plugin has doubled the attach area for malware and malicious scripts. This is not a risk we would recommend our friends and families take.

Microsoft spokesperson

# 4:49 pm / microsoft, google, chrome, chromeframe, security, ie, plugins

Why front-end developers are so important to the future of businesses on the web. Paul Carvill explains why you under-value your client-side engineers at your peril.

# 7:29 pm / paul-carvill, clientsideengineering, developers

Adding signing (and signed cookies) to Django core. I’ve been increasing my participation in Django recently—here’s my proposal for adding signing and signed cookies to Django, which I’d personally like to see ship as part of Django 1.2.

# 7:31 pm / django, cookies, signing, cryptography, security, signedcookies

Sept. 25, 2009

OpenID: Now more powerful and easier to use! The OpenID+OAuth hybrid protocol (where a user can sign in with OpenID and grant an application access to their OAuth protected resources such as a contact list at the same time) is now supported by Google, Yahoo! and MySpace—this feels like OpenID finally coming of age.

# 9:08 pm / openid, oauth, hybrid, google, myspace, yahoo, identity

Justniffer. Packet sniffing tool that can output sniffed HTTP traffic formatted the same way as an Apache access_log file.

# 10:12 pm / justniffer, packetsniffing, networking, apache, logging

MySQL, Python and MacOS X 10.6 (Snow Leopard). I gave up on compiling things when I upgraded to Snow Leopard—I’m back to running Ubuntu in a VMWare instance, mounted over Samba so I can still use TextMate.

# 10:14 pm / ubuntu, vmware, snowleopard, samba, textmate, python, mysql, osx

Sept. 27, 2009

shunit2 (via) xUnit style testing for shell scripts.

# 7:34 pm / unittesting, testing, bash, shell, unix, xunit, shunit2

Google’s first press release. From 1999, announcing $25 million in equity funding. I’m impressed to see that the mission statement already stated “Google’s mission is to organize the world’s information, making it universally accessible and useful.”

# 8:35 pm / google, pressrelease, funding

Sept. 28, 2009

“That’s maybe a bit too dorky, even for us.”. Astonishingly exciting: Flickr now have machine tag support for OpenStreetMap—tag a photo with osm:way=WAY_ID and Flickr will figure out what OSM feature you are talking about and link to it with a human readable description.

# 10:39 pm / openstreetmap, flickr, machinetags, photography

Look at Sony, or Microsoft, or Google, or anyone. They still don't get it. They're still out there talking about chips, or features, or whatever. Or now they're all hot for design. But they think design means making pretty objects. It doesn't. It means making a system of pieces that all work together seamlessly. It's not about calling attention to the technology. It's about making the technology invisible.

Fake Steve Jobs

# 10:40 pm / fakestevejobs, apple, sony, microsoft, google, design

Django ponies: Proposals for Django 1.2

I’ve decided to step up my involvement in Django development in the run-up to Django 1.2, so I’m currently going through several years worth of accumulated pony requests figuring out which ones are worth advocating for. I’m also ensuring I have the code to back them up—my innocent AutoEscaping proposal a few years ago resulted in an enormous amount of work by Malcolm and I don’t think he’d appreciate a repeat performance.

[... 1,674 words]

Sept. 29, 2009

openstreetmap genuine advantage. The OpenStreetMap data model (points, ways and relations, all allowing arbitrary key/value tags) is a real thing of beauty—simple to understand but almost infinitely extensible. Mike Migurski’s latest project adds PGP signing to OpenStreetMap, allowing organisations (such as local government) to add a signature to a way (a sequence of points) and a subset of its tags, then write that signature in to a new tag on the object.

# 9:49 am / michal-migurski, openstreetmap, pgp, cryptography, mapping, gis

Python Logging 101. A really useful introduction to Python’s logging module by that module’s author, Vinay Sajip.

# 6:40 pm / python, logging, vinaysajip

Simon Willison (simonw) on Twitter. I just realised I’ve never actually linked to my Twitter account on my blog. This is mainly an experiment to see if doing so makes my follower count go up...

# 9:49 pm / twitter, me, simonw, experiment

Google Docs OCR. Whoa, the Google Docs API just got really interesting—you can upload an image to it (POST /feeds/default/private/full?ocr=true) and it will OCR the text and turn it in to a document. Since this is Google, I imagine they’ll also be using the processed documents to further improve their OCR technology.

# 9:57 pm / ocr, google, googldocs, apis

YUI 3.0.0: First GA Release of YUI’s Next-Generation Codeline. YUI 3 has some very neat ideas—everything is dynamically loaded, so you start with a tiny bootstrap script and call YUI().use(’module-name’) to load just the code you need. Congratulations to the team.

# 11:38 pm / yui, yui3, yahoo, javascript, libraries

Sept. 30, 2009

GeoDjango and the UK postcode database. Excellent introduction to GeoDjango using the recently leaked UK postcode database. Obviously, you should only follow the steps in this tutorial using the officially licensed database, available for a mere £1,700.

# 2:25 pm / postcodes, uk, geodjango, django, gis, chris-lamb

2009 » September

MTWTFSS
 123456
78910111213
14151617181920
21222324252627
282930