1. That's 2010 all done then. 2011 said alound still sounds implausibly futuristic to my ears. One more sign that you're an old man.


    The 'holiday season' was surprisingly survivable. The nut roast didn't poison anybody. I doubled up the recipe quantities, and had exactly 50% left after dinner was done. The main problem I had was getting all the vegetables evenly done. There was much shuttling trays in and out of the oven, and from shelf to shelf, but everyone went away fed and uncomplaining, so I'm going to chalk that up as a success.


    It turns out that having a 1 year old daughter is an excellent diversion around this time of year. Most of my time seems to have been spent chaperoning her around various relatives' houses, where she excelled in capturing the centre of attention. She's unsurprisingly done terribly well for presents. Typically, her favourite seems to be something inessential; a tiny gift teddy bear that was part of a seasonal book bundle.


    I have a nice new coffee mug with a picture of Moominpapa on, of which I am already fond. Also notable, a comic strip book that frames the life and work of Bertrand Russell as an analogy to a classical greek tragedy. Better than it sounds, it's quite a fascinating piece.


    2010 has been a pretty good year I'd say. Mostly full of Ada , who has grown from being a rather sickly baby whose inability to keep food onboard, or sleep to rule frazzled nerves, to a largely reflux-free, sleep-friendly and entirely enchanting toddler. I think my Ada high-point of the last year would be when I taught her to high-five people, whenever she was being carried at shoulder height. She's currently showing signs of becoming a precocious chatterbox. Other than that, there's been the career gear-change, moving to work for last.fm , which has been almost entirely awesome. The new job brought a house move to London, which took me through the stages of ambivalence, active dislike of the place, right through to my current state of mind, which is settled back into an easy enjoyment of the appeals of city living. The fly in the ointment there is the lingering unsold Bristol house, dealing with which is going to feature heavily in the new year, I suspect.


    Usually, at this time of year, I'd do some sort of summary of the year in music. 2010 has been a year where I've been kept pretty out of touch, because I've simply been too busy with other things. So most of the new discoveries I've made have been anything but current. Like everyone else, I became briefly overexcited about Janelle in the middle of the year. Standouts would be finally getting around to listening to Spirit Of Eden , and falling for it predictably, discovering The Books and Field Music , and my most unusual acquisition Sia's 'Some people have real problems' album, which I wouldn't have expected to have been my thing, but really captivated me. Luckily last.fm did a chart thing of my annual listening (a subscriber-only feature).


    Having an infant at home has really curtailed the gig-going, so I had to focus on quality, not quantity. I did Primavera again, and I don't seem to be tiring of that yet, I've already bought tickets for 2011. I saw an astonishing Dirty Projectors show at the Barbican, performing ' The Getty Address' completely, accompanied by Alarm Will Sound . I finally got to see the New Pornographers with Neko , which was good enough to keep a stupid grin on my face all the way through the first hour, even though I was coming down with a stupid cold. I think I'll probably get more opportunity to see things in 201, but surprisingly I'm not really complaining.


    Here's to 2011. Still sounds wrong.




    Suggested listening


    posted by cms on
    tagged as
  2. Posthumous : 'All work and no play makes Jack a dull boy' by Jack Torrance.

    posted by cms on
    tagged as
  3. Don't Track Us : I've been using DDG as my default search engine for over six months now, without any perceivable loss of utility.

    posted by cms on
    tagged as
  4. This Christmas, we're going to be hosting for a small subset of family. I've volunteered to do the cooking myself. I would like to ensure that Mrs S gets a chance to have a rare day off from domestic catering. I don't really trust myself in a kitchen, so I'm looking to keep things straightforward. Some of the guests are fairly strict vegetarians, and so I've opted to go for that reliable cliché, the Nut Roast. I've never made a nut roast before, at least not one that didn't come from a packet mix. So this evening I've decided to go for a trial run.

    I got a recipe from DDG . The one I decided to go for was this Waitrose recipe . I think I was mostly attracted to the notion of mixing in brown rice. Although the recipe is straightforward, there has turned out to be a moderate amount of prep work, and I think I'll need to get as much of that prepared in advance of Christmas day as is plausible.

    The final worry is the somewhat temperamental old oven in this rented house. I'm only really used to working with reliable, fan-assisted electric ovens. This one is gas, rather undpredicatable and worn. To date, I've never successfully managed to so much as re-heat oven chips in it.

    posted by cms on
    tagged as
  5. It's been almost a year since I moved back to London. It seems like a year unusually blessed with snow. This morning, it was coming down thick and fast, and we had a freshly carpeted common, almost entirely to ourselves, aside from a handful of other dog walkers.

    Snow Day! /flickr]

    Snowballing a dog never loses it's appeal. He constantly appeals for you to throw one. The most fun is lobbing them skywards, in an easy parabola, giving him plenty of time to position himself below the descent, for an ariel catch. These are accompanied by a loud grunt, then a rough landing, wildly shaking the snow from the face. Then straight back into appealing for another.


    posted by cms on
    tagged as
  6. Map of Metal : This is a lot of fun to play with. Metalheads love a subgenre.

    posted by cms on
    tagged as
  7. John Hicklenton R.I.P. : Hicklenton blew my mind when I was a teenager, with his wild, hyper-stylized frantic run on Nemesis. Utterly absorbing and inspirational.

    posted by cms on
    tagged as
  8. One year ago




    posted by cms on
    tagged as
  9. I've been having persistent niggles with my home router / 802.11x base station / DSL modem. It's a D-Link DSL-2740B , itself bought as a replacement for my ISP-provided machine, an O2 wireless III (a re-badged Thomson SpeedTouch) which proved itself a low performer at both wireless and routing, and particularly dismal at doing both simultaneously.

    I picked up the D-link cheaply, in a clearance bin in John Lewis. In most respects it has been a splendid replacement for the O2. WiFi is fast, routing is consistent, ADSL sync is better. However, it does have one stupid bug. It can't do DHCP reliably. After a certain period, it starts sending out broken leases to clients; either issuing them with IP addresses that are already in use, or more commonly issuing a working address, but nullifying the nameserver settings. A reboot will restore sanity, but involves an irksome couple of minutes of network outage. Afterwards it is only a matter of time before the problem re-emerges, noticeably quicker if there's an increased rate of new leases issued, such as a group of visitors armed with smartphones popping in.

    I'm consistently amazed at how flawed home router appliances are. How anyone 'normal' is supposed to cope with these things, I have no idea. I've updated the firmware to the last available revision, fiddled with the limited options in the admin interface, to little avail. Web searches turn up a few people commenting on the same problem, but no solutions offered. This leaves me with three straightforward, yet unappealing options.

    1. Buy another router. Either another toy one, which seems likely to smuggle in some fresh nugget of buried failure, or buy something more professional, and hence eye-wateringly expensive
    2. Set up static configuration for every client. Seems a stupid solution in 2010 for a primarily wireless network
    3. Disable DHCP on the router, and add another, more reliable DHCP server to the network


    Option 3 initially seems least aggravating. In the past, my strategy for service infrastructure has always been using home servers, with some form of UNIX. These days though, I'm trying to minimise the number of computer-type devices I have to keep running 24/7. I no longer find any joy in being a home UNIX administrator, and it's nice to correspondingly reduce power consumption, fan noise, and cabling. So the idea of setting up a computer just to act as a DHCP controller is slightly repellant.



    The only machine tethered to the network is a modest, first-generation, G4 mac mini . It's chief use in the past was as a basic freeview PVR, using Elgato eyeTV , but the London flat's TV reception is too poor for this, so it mostly acts as an AFP -capable network interface to my firewire Drobo . It's a very old, low power machine, but would certainly be capable of acting as a DHCP server.

    It wasn't immediately obvious how best to do this. Obviously I could install any of the common free UNIX DHCP software, using MacPorts , or homebrew , or fink , or even just hand rolling something from tarballs, but all of these come with overheads, adding dependencies, requiring build tools, and subsequent package management, and all the little bits of service glue needed to make it run neatly as a daemon. Experience has shown me that integrating third-party UNIX services into a vanilla Macintosh can get fiddly, fast.

    There's no obvious DHCP server component on desktop OS X, but there's a latent capacity somewhere, demonstrated by 'Internet sharing', which lets you easily set up a Macintosh with a network connection as a basic router. After a little bit of poking around with this, and some internet searching, I discovered that this facility is part of the bootpd service. It's documented, and after a little trial-and-error, I figured out a way to run a DHCP server facility only, using just the built-in Apple utilities.

    Here's an overview of my network configuration
    • The D-link router provides NAT routed internet via O2 ( actually Be ) ADSL 2+ with a static IP.


    • The private subnet is 192.168.1.0/24


    • The router's internal address is set as 192.168.1.1


    • The mac mini is connected to the router via wired ethernet with an address of 192.168.1.4, and runs headlessly.


    • Everything else connects to the D-Link router wirelessly, using a mix of 802.11n and 802.11g




    Here's how to set up bootpd to act as a DHCP server for this network.



    First, configure the mac mini to have a static IP. Using screen-sharing from another Mac ( Cmd-K, vnc://192.168.1.4 ) to configure the network interface in system preferences.








    Next, configure your computer to also have a static address on the same subnet. If you get something wrong, and need to troubleshoot settings, you'll still need to be able to connect between the router, the mini and your workstation. I picked 192.168.1.111, as being well outside the range of anything I'd expect to be routinely allocated.

    Now you need to produce your bootpd config file ( /etc/bootpd.plist ). Unfortunately this means an XML property list. Every time I feel smug about how the Macintosh is re-invigorating UNIX with the old, crufty bad bits removed, I ought to remind myself about the maniacally stupid idea that is XML plists. Instead I thank my stars that I have a capable text editor. It's not that fearsome a property set, and is well explained in the man page , so you could build one by hand. An alternative approach, the one I used, would be to set up internet sharing temporarily on the mini for an interface you're not using; I chose firewire. Take a copy of the /etc/bootpd.plist file this will create, e.g. / etc/bootpd.plist.template , and then disable internet sharing again, which will remove the /etc/bootpd.plist file if it still exists. Now rename your template back to /etc/bootpd.plist and edit it.

    The options are all well documented, and it turns out that you need hardly any of them to get up and running.

    The key options are


    • dhcp_enabled: an array of network interface device names to answer dhcp requests on - I just have en0, which is the built-in ethernet
    • Subnets: an array of property dictionaries, that represent networks we're interested in serving. We only want a single dictionary for 192.168.1.0/24.
      • net_address: , is the network address - 192.168.1.0,
      • net_mask: the netmask for our subnet range - '255.255.255.0',
      • dhcp_router: default gateway address - 192.168.1.1
      • net_range: an array of strings representing the bounds of a pool of addresses to allocate from - 192.168.1.12 to 192.168.1.254
      • allocate: a boolean that is set to indicate that we're interested in issuing addresses for this subnet
    <ul>

    Most of the other defaults are sensible. I've kept all the other values that were generated for my template. Here's what I have in my file.


    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Subnets</key>
    <array>
    <dict>
    <key>_creator</key>
    <string>cms</string>
    <key>allocate</key>
    <true/>
    <key>dhcpdomainname_server</key>
    <string>208.67.222.222,208.67.220.220</string>
    <key>dhcp_router</key>
    <string>192.168.1.1</string>
    <key>lease_max</key>
    <integer>3600</integer>
    <key>lease_min</key>
    <integer>3600</integer>
    <key>name</key>
    <string>192.168.1</string>
    <key>net_address</key>
    <string>192.168.1.0</string>
    <key>net_mask</key>
    <string>255.255.255.0</string>
    <key>net_range</key>
    <array>
    <string>192.168.1.12</string>
    <string>192.168.1.254</string>
    </array>
    </dict>
    </array>
    <key>bootp_enabled</key>
    <false/>
    <key>detectotherdhcp_server</key>
    <integer>0</integer>
    <key>dhcp_enabled</key>
    <array>
    <string>en0</string>
    </array>
    <key>replythresholdseconds</key>
    <integer>4</integer>
    </dict>
    </plist>


    Next, create two empty files that bootpd expects to use. ' /etc/bootptab ', for any static address maps, and /var/db/dhcpd_leases , which will be a persistent database for issued leases. Now connect to the router, and disable it's DHCP server.

    The bootpd binary lives at /usr/libexec/bootpd . If you run it from a terminal with a -d flag, it will stay in the foreground and emit debugging info to stdout. You'll need root privileges for it to run, I just used sudo /usr/libexec/bootpd . Now request a dhcp address from a different network client. I used an iPad. It's a good idea to make a note of the network MAC address. If everything is working, you should see some output acknowledging the request, and then some more as a lease is issued. The client should then configure it's network interface with all the settings from your Subnet definition above. If it doesn't, and the output isn't helpful enough, there's also a further -v switch for more verbose logging.

    Initially I had trouble getting any leases issued although all requests were logged fine. It turned out I'd misconfigured the netmask when I set up the static address for the mini. If the network details don't match the defined subnet exactly, then bootpd will just fall back to default behaviour for the subnet, which is to just observe. Once I fixed that, things started working as they should. By default, a line is written to logs in /var/system.log for every request recieved, and one for every lease issued.

    The remaining task is to configure the service to run as a daemon from launchd. Luckily, there is a launchd profile for bootpd present, /System/Library/LaunchDaemons/bootps.plist .

    You can install this persistently into launchd like so

    sudo launchctl load -w /System/Library/LaunchDaemons/bootps.plist

    Running sudo launchctl list should then show a com.apple.bootpd service enabled. If for some reason you need to disable it once again, you can uninstall the service using

    sudo launchctl unload -w /System/Library/LaunchDaemons/bootps.plist



    posted by cms on
    tagged as
  10. How about some photos of squid flying through the air? I've heard anecdotal reports of this sort of thing happening, which on the face of it sound reasonable, if not a little far fetched. They do possess all the right sort of equipment, and controlled jet propulsion through the air isn't really that far from their usual method of locomotion at speed, which is controlled jet propulsion under the water, after all.

    The full writeup in the parent post contains plenty of detail about a recent observation of groups of squid exhibiting fairly controlled, short flight. Not only does the article contain lots of interesting links to scientific write-ups of arial squid observation , but it also contains several high-resolution photo images of the buggers captured in the act.

    It would make a lot of sense for them to use as an evasive action. Squid can manage impressive accelerations in their submarine environment, but through the air, they would perform even more rapidly, over short distances. "Short" is of course, relative. One of the write-ups based on observations estimates 20cm squid reaching 10m in a controlled flight. They seem to form their bodies into lifting, braking and stabilising shapes as they go. Squid are ace.

    posted by cms on
    tagged as
  11. I'm amused that on porting his blog to wordpress jwz has seemingly reached the same level of disgruntlement with wordpress in about a day that it's taken me twelve months or so to reach.

    Don't get me wrong, wordpress certainly gives you all sorts of awesome features OOTB, but at a certain cost of complexity, which makes things tricky to customise. Themes are hard to tweak, and the cost of entry to plugin-writing is large enough to put-off simple customisation in favour of out-sourcing to the lazyweb directory of plugins, which correspondingly increases the complexity of your install.

    Most pertinently, there's the security record, a cynic might suggest it's a lack of security record. I'm gradually coming around to the line of thought that the frequency of updates actively contributes to the problem. The continual treadmill of manually updating drives people to investigate the auto-upgrade procedures, which are all built around interfaces that sound to me like designed-in exploit vectors, like having all the .php files in the software tree writeable by the httpd user, or running an FTPd service on the webhost that can chdir to the http script directories. Furthermore, the autoupgrade process is prone to terrifyingly unfriendly fail-states .

    I'm not sure if there are any significantly appealing alternatives out there. I think there's probably a circular life cycle to the blog software used by any mildly technical person , that moves serially from 'simplest possible lazyweb solution', through 'this simple thing has been customised past the point of sanity, I'll write my own' all the way through to 'writing blogging software is hard, I'll just use wordpress' and subsequently right back to square one.

    The elephant in the room is the simplest option. Just host your data in an fully managed service like wordpress.com , or tumblr or posterous . Or if you really don't care about handing every last bit of data you can generate about yourself into the possibly malevolent skynet-cum-panopticon Google-monster, you could get all oldskool with blogger As ever, I just can't get with the idea of giving all my content to an at-best disinterested third party. After all, that's where jwz started out , and look where that's got him. Manually migrating to wordpress, and grumbling.

    posted by cms on
    tagged as
  12. If you can read this message, it means I have properly configured blog posting by email. Is this useful? Is this a good idea? Time will tell.






    posted by cms on
    tagged as