Moving to Moose Hackathon roundup
After returning from the Moose/RDF hackathon in Norway and moving to another city this weekend, I finally have the time to tackle two tasks on my TODO list at once, viz finally starting this blog and writing up on the hackathon.
The Moving to Moose Hackathon 2012, organized by the Oslo Perlmongers was a five-day event that catered both to the Metaobject Protocol enthusiasts (who use Moose now and may soon use the new p5-mop to be moved to Perl5 Core) and developers interested in using Semantic Technologies and RDF with Perl. I was one of the RDF guys.
The venue was extraordinary and beautiful: a remote lodge near Southern Norway's Lysefjorden. The famous Preikestolen cliff was a mere two hour walk (well, mere is a bit optimistic, it's actually quite exhausting and steep, but still great fun) from the lodge and we went there on the first day. The view is wonderful and dangling one's feet from a 600m abyss is the best feet dangling there is. An Oslo.PM affiliate brought his toy helicopters with attached video camera along and filmed our heroic ascent to the delight of the Perl crowd and innocent bystanders alike :)
I discussed possible convergence points of MooseX::Semantic and KiokuDB with Yuval Kogman. Even though we backed away from adding RDF capabilities to KiokuDB, Yuval helped me massively improve the Type Constraint detection and method dispatch system used in MooseX::Semantic by refactoring KiokuDB's dispatch table mechanics out of KiokuDB into Data::Visitor. Later that day, Gregory Williams, Kjetil Kernsmo, Toby Inkster, Ruben Verborgh and myself discussed how RDF::Trine could be improved by using Moose and how MooseX::Semantic should evolve.
Shawn Moore gave a very helpful talk about Role Usage Patterns. While I have been using Moose and Moose roles for several years now, it was enlightening to get a systematic overview of what roles are and what they can be used for beside simple Java-like interfaces.
Greg teamed up with Chris Prather to re-organize the RDF::Trine source code for using Moose. What I learned: Using
API as a sub-namespace for roles. That is a convention I will stick to from now on, since I have had trouble organizing my roles in the past.
Ruben rewrote the Turtle parser with astonishing results: DBPedia can now be parsed 100x faster. Yay! Shawn tracked down a bug where a regex was frequently re-computed under certain conditions with the help of DTrace, which was so far beyond my skills that it seemed like magic.
I factored the MooseX::Types based type constraint library out of MooseX::Semantic and into RDF::Trine. Kjetil and Chris bundled the scattered XML namespace handling functionality into one (of course Moose-based) convenient module.
Greg and Toby Moose-ified many components of RDF::Trine and Toby cleaned up the interface for serializers and parsers to be modeled around formats and not vice versa. RDF::Trine now has the concept of a format registry, which registers formats (such as RDF/XML, Turtle etc.), to which parsers and serializers can register. This allows users to choose from different implentations, e.g. pure Perl parsers and Redland parsers. I rewrote (and am still rewriting) the parsers to use this new interface.
What else? Chris told me about Magpie, Tamarou's cool new RESTful web framework, which is proudly not following the MVC pattern and is all about HTTP, resources, states, events and loosely coupled components (there is an Intro POD). Magpie is heavily based on Bread::Board, an inversion of control framework that seems perfect for large applications with lots of components. Another module I embarassingly never looked deeper into is KiokuDB. I always thought that it was just another document database, while it is in fact the perfect solution for persisting Perl objects and not only useful for freezing and thawing (and for some backends even searching) arbitrary data structures, but educational for mapping RDF and Moose semantics.
Having never been on a Perl-related event beyond the very occasional PM meeting, it was a really exciting and fun experience to be at MTMH. Seeing all those CPAN handles like STEVAN, DOY and RAFL resolved into real life-size humans was great -- and sometimes surprising :-) Not only did I improve my hacking skills and got tons of inspiration for my projects, but I feel like I'm part of the community which feels really good and motivates me to keep on programming in Perl, engage in the Perl community and even blog about it from time to time :)