Catalyst IT Limited  
Planet Catalyst
 
| |

Well, it was a conference of five parts, and on the day, Open Source was the winner.

Pre-OSCON: the Reposithon

Leading up to OSCON in Hawai'i, in between the short bursts of surf and sunshine that my skin allows me and a disastrously timed trip to find hot lava, I spent much time working on extraction of the "ancient" history of Perl, and produced another release of the historical converson. This led onto the Reposithon, hosted by Michael Schwern, which turned out to be just hours of discussions - one an evening at a restaurant which I had dragged Penny and Brenda into, and then on the Sunday it was a handful of people at Schwern's house. We talked about how things might work with git and I gave some very basic introductory tutorials. I was eventually left on my own to work and quit after producing another release of the pre-perforce history. There are now 1643 revisions covering the period currently in Perforce as about Changes 1 through 17. Next is the somewhat delicate era around the transition from traditional Pumpking patches to Perforce - Tim Bunce's 5.004_0[1-4] series (something like a couple of dozen releases), a brief stint of Malcolm Beattie and then the work of Gurusamy Sarathy.

Monday-Tuesday: tutorial days

The first couple of days were tutorials. The Taming Legacy Perl tutorial gave a lot of sound advice on Test-Driven code refactoring. This was by the author of two books on refactoring Perl. This guy does know what he's talking about and is probably worth having a copy of his books (Perl Medic and Perl Debugged) around, if you are not well experienced with Test-Driven refactoring already. Even better would be to read them, and then for bonus points, put them into practice. Yeah, right.

In the afternoon I saw Mark Jason-Dominus' tutorial which I'll call My New Higher-Order-Parsing Technique is Unstoppable. MJD is a speaker I recommend to everyone, and this talk was good as it went over a lot of Higher Order Perl that I didn't get to, and it really is fascinating to see how quickly you can build a recursive descent parser (or even a back-tracking parser) from a BNF-style grammar without necessarily even using a module. I sent MJD a little script which demonstrates avoiding the necessity for Eta transformation (which deals with using a block in a closure before it is defined) using Perl globs. It also happens to closely match the way grammars in Perl 6 work (grammars being perhaps the most completely finished part of Perl 6).

The next day was a little bit of a write-off. I sat in on the OpenID bootcamp, which again was a good session but I think the introduction we'd had at Perlmongers went through enough of the basics that I didn't really get much new out of this, apart from finding out how widespread it has become, and how many people (eg, AOL, Verisign) are backing it. The DNS 'hack' I described that would undermine OpenID's verification turns out to be pretty easy to avoid (use the https URL + check CACert).

I went to Schwern's tutorial on How to be a better programmer, as I had enjoyed the talks of his I'd seen back in 2001 or so in YAPC::Eu in Amsterdam. An entertaining take on netiquette and getting your life in balance, though I disagreed on many of his points.

In the evening was the "Meet 'n' Geek", many open source awards given out.

Wednesday-Friday: conference days

Wednesday

The morning keynotes had a focus on parallelism. First up was a hilarious act from a pair of Intel dudes. The first got up in a suit and advertised Intel® Threading Building Blocks® for only™ $399.00 + tax, a good-cop-bad-cop run-in to pointing out that they also have GPL (+runtime exception; differences between that and LGPL, anyone?) version at http://osstbb.intel.com/. Very funny, got just about everyone with that gag.

Of course then Simon Peyton-Jones came up and pointed out that if we all just use Haskell and other lazy functional languages then the compiler can exploit parallelism for you. He also talked a bit about Software Transactional Memory, a feature found in a couple of languages that allows you to write critical sections without manually writing locks.

I tried to get to the Subversion: Powerful New Toys session (if nothing else, to see what on earth in Subversion could possibly be called "powerful"), but it it was full by the time I got there. I shrugged and ended up talking to people like MST and David Wheeler about Object-Relational Mappers and the sick, sick things that MST is building into the Perl lexer.

So the first actual session I went to was on Open Source Voting, they were mostly talking about systems for electronic vote taking and ballot counting. This guy ran the district of Palo Alto in California using an open platform. He's the anti-diebold!

Nagios: under orders, I attended the nagios talk, and gots lots of lists of add-ons to make working with nagios easier, which I posted to internal IRC. The speaker pointed out an event API which should help be the basis for extending Nagios to be something useful rather than retarded and noisy.

Next up was Larry Wall's state of Perl 6, which was Larry showing how many ways that the Perl 6 language spec had evolved in the last year. Not only is it changing, but it's changing more quickly than before. But don't worry, you can still apt-get install a version of pugs guaranteed not to change more than once every 6 months, at least on Ubuntu. Debian are of course yet to allow it even into Debian testing. Perl 6 does appear to be solidifying and making a bit more sense, and in the end the bits that really need not to change (ie, the grammar spec) are remaining constant. So, better to get a design which has had more iterative steps than not. It's getting a lot less quirkier than Perl 5. But, of course, more power and new constructs (eg, you can write sum in the Haskell-esque [+] or find the smallest in a list with [min]). There is also a lot of access to parallelism in nuances in how you specify things like list reduction and nested iteration. ie, you should end up with idiomatic ways of writing parallel code, and have the compiler turn it into code that keeps massively multi-core processors humming.

Patrick Michaud followed up with a session on the state of Perl 6 on Parrot. It's passing a few tests - they are getting towards the point where it can run enough Perl 6 to run Test.pm, which means that it can also run against the main Perl 6 test suite authored in the pugs repository.

compiling .net to Parrot: this talk I found very interesting, I thought that running .net bytecode on parrot would be a matter of emulating a .net virtual machine, but it turns out a lot of it can be done with a single-pass and compiled to static Parrot bytecode, often making it tighter in the process. Johnathan Worthington has done a lot of very interesting research in this area, including doing something not enough open source hackers do, which is look into detail into the academic white papers on a topic to see how the problems are approached. After this talk, with a whole bunch of core Parrot hackers around there was something of an informal Parrot BoF, which I was delighted to listen in on and even contribute a bit to.

That evening there was also a Object-Relational Mappers BoF, which was a fantastic debate between authors of ORM tools. There were representatives from many camps - myself with Tangram, I forget who represented the RoseDB camp, of course MST virtually chairing the dicsussion, and then there were a few people from Kansas who were representing their own ORM (but left early without saying much). Conclusion: RoseDB and DBIx::Class are the only reasonable tools these
days. And new developments in DBIx::Class may be sick, but they are
going to be extremely powerful.

The Sun Party I got to eventually, and got to show Mark Shuttleworth this picture for his approval. He seemed to like it, especially since "his head was bigger than Linus". I had to duck across town and missed the later shenanigans with the bikes.

Thursday

The theme for the keynotes this day was freedom of software, licensing, etc. There was the "boy with his finger in the dyke" - an Open-Source advocate working for MicroSoft - explaining how he was getting some MS software released under true Open Source licenses. The leader of the Swedish Pirate Party also gave a talk on freedom of information for copyright. I was particularly interested to hear that the Norweigian Liberal Party had taken their digital rights policy and made it wholesale a part of their policy platform. Nice. Finally a dude called Yegge ranted for a while (he had to rant, owing to a technology failure) about the problems Open Source has with branding.

Onto the sessions, I first checked out Eric Wilhelm's talk on wxPerl: Agile Cross-Platform GUI Design and Development. He gave a nice practical introduction to what it takes to actually develop with wxPerl. Hint: read the C++ documentation, it even has notes for the Perl bindings.

My talk was popular, and they put me in a small room. The net result was a full room. They put me after lunch which meant I could get all my A/V stuff set up before I began, so that helped things go smoothly. I was extremely lucky not to run out of power; I had left my NZ/US converter at the hotel and afterwards noticed the power angry light was flashing on my laptop. I finished with about 3 minutes for questions, slightly less than I'd hoped but did have the fun side-effect of making people ask questions very eagerly.

It sure was fun dealing with heckling from the Subversion core team. Later that night at the Speaker's drinks, I talked to them and found out that they basically agreed with most of my points and were in fact trying to engineer the Mercurial back-end into Subversion so that they could get at the benefits of the tools I was talking about. Of course this would require API extensions to leverage many of the benefits, which would take a while to trickle down into the tools to see the benefits... so don't hold your breath on that front. My official recommendation is still "abandon ship" to all SVN users out there.

In the afternoon I watched some Perl lightning talks. Schwern gave one on how to waste everyone's time, and then a second on how he'd like to be a Perl 5 project leader by stepping up for people to blame for new features going in. So if you hear people say "I Blame Schwern", that'll be a reference to that talk. Tim Bunce gave an interesting talk on the state of DBIv2, which is basically the good parts of JDBC ripped off wholesale. He also talked about DBD::Gofer, which amongst other things allows you to cache DB queries using a web cache. I got bored and instead went to see how Brenda's talk finished up.

I wanted to watch Larry Wall's State of the Onion address, but in the end got so mindnumbingly demoralised watching T-shirts be auctioned for $5 that I had to leave.

So instead I got to the Speaker's drinks at the Doubletree, where I met all sorts of interesting people, including the current maintainer of Gnash, which is apparently good enough now that its framerate performance for YouTube exceeds that of the "official" MacroMedia product. Well done, Gnash team.

Friday

Friday's keynotes were some of the funnest of the conference. I missed the early ones as I had been up late the previous night 'arguing' GPL vs Apache License with one of the Apache project founders over scotch. Actually it was more like two people acting out parts in a classic play that has been showing in all good Open Source theatres for at least the last decade.

I got there just in time to hear Simon Wardley saying "and this makes me unhappy. Why? Because it's bad for the environment. And that's bad for ducks." Apparently Simon had quit Fotango that morning over a licensing dispute - they decided they didn't want to release as Open Source the code these people had been working on. Talk about a PR ballsup the size of a conference sponsorship. Simon was followed by Nat Torkington, who gave three final (this is his last time hosting OSCON) hilarious talks. He described programming languages like they were children. Perl was the child that was "determined to change", while his parents wished "she would just hurry up and change". I'm sure Nat will be missed by all.

I went to r0ml's talk on Preventing Code, because he was a recommended speaker. He made some arguments about how middleware was unnecessary and why not just open up access to your database. I really didn't see how applicable his arguments were to any real world application.

Just in case you thought I hadn't been to enough Perl 6 and Parrot talks, Patrick Michaud and Chromatic then talked about writing dynamic languages very quickly using the Parrot Compiler Tools (PCT).

There was a very funny closing keynote called "Pimp my garbage", showing all sorts of geeky hardware sports including a version of the steady hand game, except with 30kV running through the wand - meaning as you move the wand along there is a permanent arc of electricity, a leather-fetish modded version of Pong, and "motherboard ker-plunk", which is where you desolder components from a running system's motherboard until the music stops playing.

Epilogue I: parrot hackathon

On the Saturday after the conference I stayed out at chromatic and Allison's place, and there was also Johnathan Worthington, Jerry Gay and Patrick Michaud there working on Parrot bugs. I helped out a little by doing some bisecting using my git parrot conversion. I also got a little bit done towards the Moose port to Parrot/Perl6, which is basically re-writing some Perl 5 tests in PIR using Test/More.pir so that a Moose-like system can be tested to work like the original, which should give the Perl6-on-parrot port good objects. This will likely be a long task but I hope to make it one of my major contributions to the project.

Epilogue II: meeting another Perl Pumpking

While I was in Vancouver, I had the pleasure of meeting and speaking to Gurusamy Sarathy, who was the Pumpking for many of the Perl releases in the 5.5 -> 5.6 era. This was extremely valuable, he was also the person who set up the Perforce repository.

Footnotes

eta-expansion, from Glossary for Partial Evaluation and Related Topics, 2000, Kluwer Academic Publishers, Netherlands:

In terms of lambda calculus, replacing a term t by λx.t x where x does not occur free in t. Eta-expansion separates t from its context, and thus a binding-time analysis may assign different binding times to both. Eta-expansion can be generalized to other kinds of objects, e.g., pairs t → (first t, second t) and sums t → case t of inl x → inl x | inr y → inr y.

In terms of Perl, it's like making a temp closure that calls the one you define later, like:

   my $closure;
   my $eta = sub { $closure->() };
   $closure = sub {
      # do something...
      $eta->();   # call "self"
   };

Named functions work like this using the symbol table as the
placeholders for the late function binding, which means that the above
can also be written as:

   *closure = sub {
      # do something...
      &closure(); # call "self"
   };