Anthony Bailey Feed Public Domain Dedication

Where am I?

This tumblelog is a noisy stream of consciousness from Anthony Bailey. (And not Amazon.)

Tell me less:

For a lower traffic, more obsessively edited Anthony, see the real blog.

Wave propagation

So yeah, Google Wave can be confusing, and certainly isn’t sufficiently dense in the average social/thinking circle to have been useful yet to, say, me.

But I am impressed by its potential as a platform for prototyping new collaborative workflows. There are already some intriguing demos. I think this is fertile ground and wonder what else might blossom?

See, I think this kind of application is very hard to develop from the ground up - but Wave gives you a framework for delta-based multi-party editing, a network of users running clients to embed the widget housing your great idea, and perhaps most importantly, all the other multimedia communication channels that you have to surround the key interaction with to make it work the best it can. (The old chestnut is that useful software grows features until it can read e-mail; I suspect contemporary group-think apps will prove to have IRC-envy.)

Comments (View)

Kata lists

This post contains a collection of thoughts about coding katas.

A fair few are gripes - apologies for this negativity. I should start by saying I do love many aspects of the idiom:

  • practice as play
  • solving puzzles
  • simple examples to unearth core ideas
  • enjoying exploring multiple perspectives

But (perhaps because with passion comes a desire for perfection) I do find a few aspects of the movement irksome:

  • Most trivially, the “software as martial arts” thing is way overblown. I’m sure some analogies work, but many seem stretched. I detect lame Neo aspirations / geek Zen tourism.
  • More substantively, the form is very often used in combination with B/TDD. But the katas necessarily have a small scope and hence more algorithm-centered than typical code; so solving the problems often involves an “aha!” moment after which the implementation is kind of obvious. Because of this the driving that you do tends to be along a path you can see the end of. You get value from the refactoring safety net and in the micro-design decisions of test-driven development, but aren’t very likely to encounter the joys of test-driven design.

Right now I’m further feeling (quite unreasonably!) discontented by the recent wave of performance kata as seen at e.g. Katacasts. In principle these should be great - a chance to sit briefly with a fine programmer and watch them play through a problem that they understand well. (I really do appreciate people for giving it a go, and would recommend Bob Martin on Prime Factors despite the criticisms below!) But in practice I’ve found myself somewhat underwhelmed.

  • My primary disappointment goes: “without saying.” The casts contain no commentary; the audio is simply classical music. The art of coding is interesting because there’s so many subtleties to the thought process. Thanks for the keyboard visualizations, but the keys that don’t get pressed are even more important than the keys that are! I want to hear the inner dialogue. Even better would be to hear a pair in genuine dialogue, point and counter-point. I believe the casters have good intentions and plan to add some commentary to some casts, but for me they currently lack their essence.
  • My other qualm is the repetition and donkeywork in many of the specs/tests. This is perhaps partly another consequence of the “clever algorithm” computational nature of the kata. Most of the testcases/examples are “ok, now apply the one true function we’re writing to yet another input and expect this complicated result”.

That last bullet point at least provoked me into trying out some other testing approaches for one of the kata myself.

Comments (View)
Comments (View)

Sometimes I don't GET it straight away

I recently encountered some wwweirdness I’m hoping someone smart can explain to me.

So there’s a client computer A1, and a host C serving some web pages. If you ping or traceroute C from A1, the round trip time is consistently around 200ms. if you use a web browser on A to visit one of the pages that C hosts, then most of the time individual requests are served in a similar time.

But for around 25% of requests, it takes orders of magnitude longer to serve the file: around 20s. The behavior doesn’t seem related to the URL being fetched: all are usually fast, sometimes very slow. Logs on C always show responses being turned around rapidly once requests are received - the delay is never visible within the server side.

A1 is a machine in a domestic residence using a particular Net connection from a particular ISP. The problem is reproduced for another client machine A2 when it uses the same connection. C actually serves a variety of different domains, and the problem is reproduced across all of its websites, and when using its numeric IP address.

It appears that tens of other clients use C’s websites without encountering the issue. A1 is reported to occasionally see anomalous delays when browsing other websites, but nothing quite so remarkable - could be regular network unpredictabilities.

And finally, on overriding A1’s DNS to persuade it that awebsite is actually served by host B, and telling host B to reverse proxy all requests for pages under that domain through to C, then the issue disappears.

So it seems that A’s ISP and C just don’t get along with each other, but they do get along with the rest of the world. I can postulate some kind of blacklist on one side or the other, with a deliberate policy of throttling through introducing huge delays for a random sample of HTTP requests, but that sounds like quite a stretch.

(Especially since A and C are both perfectly reputable. Probably irrelevant concrete values for my abstract identifiers: the ISP for A is VirginMedia / Blueyonder. C is a virtual host I rent from Slicehost. B is another virt rented from Bytemark by a friend.)

Anyone have a halfway plausible explanation?

Comments (View)
Comments (View)
Great imagery in the latest Dollhouse episode.
Comments (View)

iplayer-dl is a real TV gem

Suppose you’re a (Ruby-biased) developer wanting to get at some BBC TV programme in a sane format. (The desktop iPlayer needed to play their default content is actually pretty shiny, but all DRM ends up hurting me eventually.)

How happy would you be if you could just do

% gem install iplayer-dl --source http://gemcutter.org
% iplayer-dl http://bbc.co.uk/programmes/whatever

and end up with the nice unencumbered MP4 they publish for iPhone users?

Pretty happy! Thanks, Paul Battley!

Comments (View)

Chromey yum

I have loved the Google Chrome browser from the moment I saw it. But my main machine at home runs Ubuntu, and the only OS Chrome is properly released on as yet is Windows. So I found myself bizarrely looking forward to needing to launch Windows to play a game or develop in MSVC, since I got the side thrill of launching something shiny when it was time to look webwards.

But lately I’ve been trying the unofficial daily builds of Chromium for Ubuntu and they’re working great. Even the Flash support is getting better (and it isn’t a big deal for me because my only usecase for Flash is video, and save it all up for a single viewing session after midnight due to the unusual bandwidth charging policy of my broadband provider.)

So for day-to-day browsing, Chromium is now my default choice. Yay!

(Ironically the main time I’m not using it is when I have to swap often between multiple Google accounts - e.g. personal and Modern Mixers - when using their services; in Firefox, there’s an add-on for that. The Fox’s extensibility - Greasemonkey, Firebug - remains unchallenged, and there’s no way I could do without it at work.)

Comments (View)

LiveJournal OPML fail

LiveJournal appears not to have seen updates to any third-party feeds for around forty-eight hours. (It’s a known issue on their support page.) This impacts me, since I use LJ mainly as a feed reader - with very few exceptions, my “Friends” list is composed of syndicated feeds. So I haven’t seen updates from anyone I follow anywhere on the web for a couple of days.

Of course, I know that relying on any one service is a bad idea, because Sometimes Stuff Breaks. But LJ is all fluffy and open, and so my plan for an outage like this was simply to export my subscriptions as OPML and read the feeds elsewhere. But, nuh-uh. The OPML that LJ exports points back to LJ’s own broken endpoints for the syndicated feeds, not to the feeds themselves. This is so dumb! Time to start scripting and scraping, I guess…

Comments (View)
Comments (View)