I went to London 2.0 last night, a short bus ride and walk away in Fleet Street. It’s a gathering of the kind becoming more popular — there was XP enthusiasts on the other side of the pub — involving techy chat and a few pints.
The main event was Jason Huggins demonstrating some work-in-progress involving Selenium. He’s intending to show it at the Google Automated Testing conference later this week. If he achieves his ambition, it’ll be impressive as well as very useful.
The nominal topic of the evening was Web 2.0, but the general chat was pretty eclectic:
- Functional programming (lots of “I’ve been wanting to try ..”), and especially functional programming for the Web (I was able to mention our efforts with Icing and AJAXy Haskell)
- Languages on the CLR: SML.NET, IronPython, F#
- Experiences with virtualisation software
- Books: “Freedom Evolves”, by Dan C. Dennett, and those perennial favourites, “Goedel Escher Bach”, and “The Emperor’s New Mind”
If you’re inclined to geekery and optionally beer, it’s a great way to spend a weekday evening.
September 6th, 2006
mikeb
I registered for the Habitat Gift Service the day we launched it — Sunday was actually my birthday, so I didn’t have to invent any details — but of course I was just testing it, and not expecting any of the various materials.
However the kindly gift service administrators sent me one of the welcome packs, and I can tell you it is beautiful: a solid outer with crisp imagery on a silky black background, and precisely folded inserts to hold the various bits and pieces. A real treat for a stationery fetishist (I uh, imagine).
September 6th, 2006
mikeb
I was recently trying to fix our Erlang Jukebox (which Tony is still owing a Blog Post for (and once he’s done that I can write a blog post on adding m3u support to our Erlang Jukebox (and some time after that it should be opensourced…))) so that it would randomly enqueue the wrong track, just to spice things up. Erlang has a uniform function in the random module which returns a float uniformly distributed between 0 and 1. “Brilliant” said I.
However, the random module stores its state in the process dictionary which means that each process has a different state for the random module. It also seems to get seeded by preset values rather than by some more suitable time-based value. So, all works well within the same process:
> lists:foreach(fun(E) -> io:format("~w~n", [random:uniform()]) end,
lists:seq(1,10)).
0.289971
0.186964
0.640637
0.553759
0.478947
0.457143
0.920461
0.915298
0.968977
0.903338
ok
But, once all the call to uniform happens fresh in each process, things are a little less ideally random:
> lists:foreach(fun(E) -> F = fun() ->
io:format("~w~n", [random:uniform()]) end,
spawn(F) end,
lists:seq(1,10)).
9.23009e-2
9.23009e-2
9.23009e-2
9.23009e-2
9.23009e-2
9.23009e-2
9.23009e-2
9.23009e-2
9.23009e-2
9.23009e-2
ok
And of course, in our Erlang Jukebox (yes, the same one Tony’s due to blog about), using the Erlang webserver Yaws, one process is spawned per HTTP request. So I needed to seed the random module with a time based value to make sure that overall, the behaviour was, well, random.
September 6th, 2006
matthew