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.

Continuity is a great little Flash game. It’s an original hybrid of platformer and sliding block puzzle. Playing through it cost me an hour or so of sleep last night.

Continuity is a great little Flash game. It’s an original hybrid of platformer and sliding block puzzle. Playing through it cost me an hour or so of sleep last night.

Comments (View)
Comments (View)
Comments (View)
[Flash 9 is required to listen to audio.]

Recommended Listening: Software Carpentry (great concept, poor name.)

Greg Wilson talks about teaching condensed coding wisdom in this episode (53min) of Jon Udell’s Interviews With Innovators. He has for many years run a stand-alone course for university scientists summarizing important software concepts. Wilson is very pragmatic about both the value and the difficulties of having some kind of computational thinking taught throughout education.

It is software carpentry as a limited subset of subset engineering - “About putting an extension on the house, rather than building the Channel Tunnel.” I hate this term; I greatly dislike the engineering metaphor, and carpentry also triggers the differently valuable software craft metaphor for me.

Toward the end they discuss how outdated some of the key concepts in the course have already become (Wilson is hoping to work on a new version) given the rise of networks and agile. I was reminded of a recent conversation with an ex-colleague on which abstractions and worthy books on coding survive such changes.

Comments (View)

OnLive demo - could cloud really get game?

Steve Perlman of OnLive demos the cloud gaming service at Columbia NYC (48min video.)

You plug a box into your TV, or a 1MB plug-in into your low-end PC or mobile device. You subscribe to the service (now in public beta) and rent/”buy” access to games. They lease the very high-end main servers the games run on.

Eighty milliseconds from input to output at the player’s end is the magic number they enforce for acceptable interactivity. The servers are in data centers max one thousand kilometres from the player, and use UDP over (I think) circuit-switched connections from pretty much every provider, and optimize for latency elsewhere in the last mile too (e.g. their wireless controllers use a more aggressive protocols than standard console ones.)

They compress on specialized hardware two ways: one on a frame-by-frame basis for the live stream that the player sees with various measures to tune for the connection, correct/conceal errors due to packet loss, etc., and one slightly more conventional media stream IP multicast within the center for replay and broadcast to a wider audience.

Proof of the sufficiently low latency and the plausibility of the business model (hardware is expensive!) will be in the pudding, but this idea sounds less implausible the more I hear…

Comments (View)

rashitproductnaming.apple.com

People keep speculating that Apple’s tablet will be called the iSlate. Seems a bad idea unless they’re really confident it won’t get delayed.

Comments (View)

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)