1. You've got NO MAIL

    Thu 21 August 2014

    Category: etc.

    From the "Ideas I'm Never Going To Implement Myself" bucket:

    NoMail is an email service which doesn't store anything. Anything at all. Email received by NoMail is ephemeral and exists only in your client.

    read more
  2. Programming for Startups

    Sat 19 July 2014

    Category: etc.

    I presented a session on 'Programming for non-Programmers' talk at General Assembly Founder's Bootcamp ... here's some notes which I jotted down afterwards ...

    read more
  3. The Selfish Secret: Logins Without Passwords

    Fri 27 June 2014

    Category: etc.

    Perhaps instead of looking at cookies as a proxy for passwords, we should be looking at passwords as a transport mechanism for secrets! The desired result is to share a secret key between the server and one or more browsers, and the password is merely a mechanism to prove the browser worthy of the secret ...

    read more
  4. Testing Django Performance

    I presented at the MelbDjango user group on 11 July 2013, here's the slides and some quick scribblings re: the content of my talk, and the feedback from the Djangonauts present.

    read more
  5. Make your own Client-side Certificates with a Pseudo CA

    I've used this authentication method on a couple of different client projects so far, so I thought it might be useful to write up a quick explanation of how it works.

    Client-side Certificates

    The webserver can be configured to ask for a client-side certificate, for example in apache:

    SSLCACertificateFile ...
    read more
  6. Multiple Inequalities in Google AppEngine

    Mon 20 February 2012

    Category: Python.

    So I’m playing around with Google AppEngine (still!) trying to put together some kind of sensible use for it. AppEngine is neat-O, but it is also quite limited in what it can and can’t do. One of the most glaring problems (for my toy app) is the datastore ...

    read more
  7. SyntaxError: keyword argument repeated

    Mon 20 February 2012

    Category: Python.

    It turns out that repeated keyword arguments (kwargs) were illegal in python 2.4, ignored in python 2.5 and illegal again in python 2.6. This means that if some have crept into your codebase, you’ve now got a handful of syntax errors!

    For example, here’s test ...

    read more
  8. GCC 4.6 linker switches

    Thu 16 February 2012

    Category: etc.

    Tags: C unix

    An odd little one: I was compiling some older code on gcc 4.6 / Ubuntu 11.10 and it failed to make, with the traditional error:

    undefined reference to `sqrt'
    

    My Makefile was trying to do something like this:

    gcc -c -o eg.o eg.c
    gcc -lm -o eg ...
    read more
  9. Taming "cache.manifest" Caching

    HTML5 apps can use Cache Manifests to configure the browser's Application Cache, allowing faster startup of HTML5 apps and also offline operation.

    There is a problem, however. The behaviour of cache manifests can make development a smidge tricky . This is because the browser will only check if the contents ...

    read more
  10. Fibonacci Regex Perversity

    Repeated Substitutions

    Consider these two regex substitutions:

    s/fi?b/i/
    s/fii(i*)b/f$1bfi$1b/
    

    (For those unfamiliar with Perlish regexes: that first one says “replace the string fb or fib with the string i”. The second one says “replace a string fiiXb with fXbfiXb, where X ...

    read more
  11. Some thoughts on AWS

    Sun 01 May 2011

    Category: etc.

    Tags: aws

    There have been a lot of very interesting articles posted recently about the cause and effects of the April 2011 AWS outages. This article is an attempt to tie some of them together.

    The Great EBS Outage of 2011

    According to Amazon, the outage was caused by:

    [... H]igh error ...

    read more
  12. Virtual Localization

    Virtual Localization is a technique for Mesh Network routing. It tries to make it easy to route packets across the mesh by assigning each node a “Virtual Location”, which can then be used for Greedy Forwarding. It is a fully distributed algorithm … no one node holds the whole map of ...

    read more
  13. VRML: Very Odd.

    So the VRML rendering thing isn’t panning out so well. “Making the simple things simple by making the difficult things impossible”.

    We’re talking, here, about a language which has a clock, but no way to display the time. You can display strings on billboards, and the billboards even ...

    read more
  14. FreeTDS without udp 1434

    Thu 28 April 2011

    Category: Systems.

    Just a quick note for anyone trying to do FreeTDS through a tunnel or a firewall pinhole or whatever: If you specify an Instance name, FreeTDS goes and probes UDP 1434 to determine the port number for that instance, even if you also explicitly specify the TCP port number you ...

    read more
  15. More Trickiness With SSH

    I saw an article on reddit about SSH trickery. SSH is a very subversive protocol, able to work around many kinds of unwise security policies. Here’s a couple more useful things to know.

    1. Better Lurking Through .ssh/config-ery.

    Where you’ve got machines lurking behind other machines, inaccesible ...

    read more
  16. (sort of) First Class Classes in C#

    I find myself writing some C# code while still thinking in Python. One thing in particular caught me out … it seems, at first, that C# doesn’t have first class classes. This is annoying, because I’d started writing some device driver classes where each class is a type of ...

    read more
  17. Templates Fugit

    Ever since I started working on Internet Stuff, I've been wrestling with crazy Template Languages. This article is an attempt to compare some of the more common template languages out there.

    I've consolidated this from a series of blog articles I wrote back in 2009. As a result ...

    read more
  18. wget –certificate=$X –private-key=$X

    wget 1.10.2 seems to silently fail to use an SSL client certificate unless you specify both –certificate and –private-key:

    wget --certificate=$PEMFILE --private-key=$PEMFILE
    

    Even though both things are in the same .PEM file. It does read and check the PEM file if you specify only the former ...

    read more