Copyright © 2006 - Sébastien Aperghis-Tramoni
Even though labelled a workshop, this conference is in fact very 
international by its organisation (alternatively done by the Norwegian, 
Swedish and Danish mongers) and by the speakers who have been invited, 
as Audrey Tang, Jesse Vincent and Michael Schwern (who therefore 
accepted to let WoW aside for a few hours ;-)).
![Nordic Perl Workshop 2006 (JPEG 7 Ko) [NPW 2006 conference logo]](npw-2006/npw2006_medium.jpg) 
As it is often the case, a small dinner is organised the day before the conference to welcome some of the attendees who come from far away, and is at the same time a good mean for the organisers to cheer themselves up. Jos Boumans plays a live version of Where's Waldo by trying to find me in Oslo and guide me up to the dinner place. Here are the organisers, Salve Nilsen, Trond Michelsen and Dag Asheim, and also some of the speakers like Gisle Aas, Jos Boumans and Marcus Ramberg. Salve and Trond present a project they're working on: a detailed map of Oslo for Google Earth, linked to a web site for giving additional information, for example the bus, tramway and subway timetables.
We also talk politics and free software. Their growing adoption by European governments is a hope for a brighter future despite the endless and undercover lobbying by pro-patents software editors.
At the end of the dinner, the group splits in two: one half, headed by Jos, goes deeper in Oslo to find other places to drink, the other goes to add indications for getting to the venue.
Salve has a few troubles to connect his PowerBook to the projector. Its screen appears, then nothing, a black screen, and finally a guru meditation. The Nordic Perl Workshop 2006 is officially open. Salve presents the topic of the conference, Managing complexity, then gives some practical information, like where to eat and drink. He also announces that there will be a barbecue at the chemistry building.
Gisle presents himself (as if we didn't know him): he worked for ActivePerl 
during several years on several projects like their PPM archive format. 
The subject of his talk is another project, Perl Bench, which he hacked 
around 1997-98. As the name implies, its aim is to compare the speed of 
different versions of Perl by running lots of microbenchmarks against each. 
He shows critics of Jarkko Hietaniemi and Nicholas Clark who both think 
Perl Bench numbers have little to no meaning. Gisle nonetheless continues 
to work on improving Perl Bench, and presents how he wants to use 
gettimeofday() and the functions clock_gettime() and clock_getres(), 
recently added to Time::HiRes, in order to get better time measurement.
Salve thanks Gisle and gives him a NPW 2006 mug, and will do the same for each speaker.
Jesse present Jifty, the "only web application framework that JFDI and 
comes with a pony." Everything works by using the jifty command, and 
Jesse shows the different steps for creating a small blog, including the 
way to censor it using Regexp::Common::profanity_us. The interface 
even works in Lynx! He then presents the inners of a Jifty application: 
Jifty::DBI, the ORM part that hides all the database management and 
even provides a tool for upgrading the database, Jifty::Dispatcher, 
the kernel written by Audrey Tang, Jifty::Continuations, which 
promises to ease the development of web apps. 
"The web is built on GOTO. I prefer GOSUB".
Jifty's views are currently built on Mason, but Jesse promises upcoming 
support for Template Toolkit. Jifty also provides a useful support for 
debugging everything including templates and SQL through halos. Yet it 
runs fast thanks to Apache, Memcached and modules like CSS::Squish 
and JavaScript::Squish. Jesse promises a wiki-style editor for the 
future.
Member of smidig.no and organiser of Oslo XP meeting, Johannes first explains Barry Boehms' theory on "Software economics" but doesn't seem convinced by its pertinence. He goes on with the basics of agile development: being agile is enabling a safe myopic vision, so projects should be spliced in smaller functional units, focused for short term delivery: design for the current feature, write a test, make it pass, deliver and adapt from the feedback. Delivering and deployment should also be as simple as possible so they can be frequent and thus avoid too big gaps between releases.
He emphasises the importance of an automated regression test suite and recalls that if unit tests are easier to write, acceptance tests are of greatest value. A good tests suite, especially when executed by a smoker, allows to write code using in a test-driven development fashion, as well as refactor existing code. He adds that using such methods allowed him and his team to rework more than 400 files and treat a 500 kloc application as one code base.
Jesse presents his company Best Practical; they develop cool kids toys like RT and SVK. He then tells us the story of RT, exposing the main features of each major version, for example the big refactoring of RT 3.0 (what Jesse calls I22N, internal rationalisation) and its support for internationalisation, and especially Chinese, made by Audrey Tang. RT 3.6 also brings its share of new features: the UI has been entirely remade in CSS (Jesse shows RT with a Goth theme), reminders, customisable home page, custom fields with AJAX support, graph support, googlish search and more. Jesse explains that at last NPW, he had promised Jifty by Christmas. He released it on December 25. But where's RT 3.6? Jesse releases it now, just before the audience.
Heiko first explains us the context, how air pollution causes damages to buildings, forests and human health. Most of it comes from big industries and the traffic, and may even come from other countries: that's the case for 95% of SOx present in Norway. Therefore decision makers want an assessment of the current situation to measure the impact of their potential decisions.
The Norway Meteorological Institute is using a Fortran 90-based software for swallowing 60 GB of meteorological data and lots of small files and outputting 50 GB of concentration data. A single run takes five hours on a 36 CPU box. They wanted to use Perl for their model verification, but if Fortran is good at number-crunching, it's bad at string-handling, while it's the reverse for Perl. Until PDL, which offers Fortran-like arrays in Perl with speed and memory consumption comparable to C and Fortran.
Each PDL is a strongly typed multidimensional rectangular array, but also behaves like a regular Perl object so you can have scalars, lists and hashes of PDL. Mathematical operations are overloaded and apply cell-wise.
Heiko shows the same example of a pair-wise max of two arrays in Perl, 
basic PDL and advanced PDL, and follows with a real world example. He 
finishes by presenting how he used PDL and other software for creating 
reports, mainly jFreeGraph (called via Inline::Java) for generating 
nice graphs and Spreadsheet::ParseExcel for reading XLS files. He 
explains how he patched this module for improving its speed.
During the questions, I ask him why he didn't send his patch to the author. He did, but the author never answered. I suggest him to take over the maintenance of this module and quickly tell him how to do so.
For Audrey, Perl 6 is here today. Pugs and Parrot are already here for 
experimenting, but she promises Perl 6 for Christmas ;-)
Perl 5.9.3 has the feature pragma for using some of the Perl6-isms 
in Perl5, but as it's the development version, it's not ready yet for 
production. Same for Parrot, which still lacks a Perl5 front-end. Pugs 
uses the reverse approach by implementing back-ends: the code written in 
Perl6 is translated to Perl5. Audrey also presents Moose, a module 
that provides Perl6 objects in Perl5, then several Pugs modules, like 
Pugs::Compiler::Rules. She explains some of the Perl6 rules new 
features, like named captures, backtrack control and Perl code inside 
the regexp.
Audrey then proceeds to explain why "everybody hates Spiffy". She shows 
some code.. ETOOMUCHMAGIC! It's based on Filer::Simple, hence the 
hate because it has to process the source each time it's used. She explains 
the idea she had to correct this, using her Module::Compile. This module 
uses the little known fact that each use Foo first searches for a 
Foo.pmc before a Foo.pm. So the result of the source filtering can 
be saved in the .pmc, giving a faster startup time. And as it's sane 
Perl5, it's also debuggable. Audrey therefore wrote Filter::Simple::Compile 
which is a drop-in replacement for Filter::Simple. This technique 
can also be used for writing a better version of Filter::Macro, which 
replaces the code in the caller package with the expanded code, hence 
Inline::Module:
use Inline::Module Filter::Simple => "slurp";
Coming back to Perl6 and Perl5, Audrey explains that use v6-pugs 
uses the syntax trick of the unary dash operator: -pugs is seen as 
an option of the v6 module>. Thanks to both tricks, one can now 
write Perl6, convert it and run it on standard Perl5!
This is the same talk that Abigail did at the London Perl Workshop 2005[1], where he introduces the concept of inside-out objects where attributes are stored in lexical hashes in the definition class. The aim is both to allow derived classes to have different attributes with the same name and to generate an exception for incorrect attribute names.
Gisle Aas asks about the compatibility of inside-out objects with the debugger. Abigail says that he doesn't use the debugger, and therefore can't answer from first hand, but thinks it's probably not the case.
After the talk, Salve makes a few announces: a page has been put on the wiki so speakers can link the slides of their talk; there will be a key signing session tomorrow during the first coffee break; and he wants to take a picture with all the speakers.
The barbecue takes places in an atrium of the chemistry building, which gives an easy access to a large amount of dry ice. Jos Boumans asks Audrey Tang if she still has a house in Taiwan given that she seems to travel that much. Audrey reassures him and explains that she still has a house although it may change with the political situation of Taiwan. She also says that the next stop in her Erdös-like hack & talk tour will be in Seattle, at Microsoft Corporation[2]. Jos and Jesse Vincent make a laugh about the fact that, as there is no cabal, there won't be any meeting on certain dates in the next months.
On one side, some people are distributing Sun goodies: Java t-shirts, 
OpenSolaris DVDs and additional batteries for mobile devices. Jonas 
Nielsen asks me about Heiko Klein and Spreadsheet::ParseExcel, 
because he's using this module as well, and would like to see it 
maintained and improved.
Jonas quickly presents his company logicLab, one the sponsors of NPW, then 
goes on with their main product, logicShop, an e-commerce engine based on 
Class::DBI and PostgreSQL, showing the technical ins and outs. He plans 
a closer integration with Handel and hopes to accommodate other languages 
than Perl (Ruby, PHP).
Qpsmtpd is a Perl SMTP daemon written by Ask Bjørn Hansen, and is like the 
mod_perl of SMTP, providing a plugin API that makes writing extensions 
quite fun. Fred explains the configuration format, then shows how to write a 
simple plugin to filter mail against the subject.
He then proceed to explaining the concept of SMTP applications, like SMTP to HTTP gateways, that can be used to automate tedious processes. A practical application, for example, is to take pictures with a mobile phone, send them by email to the mail server where the plugin can receive it and extract the photo and post it on a web site like Craig Lists or Flickr.
Some recommended API practices are to execute the application after all the other plugins, just before the queue; to send an email to the sender, as a kind of receipt; to give feedback to the user, telling him if the process succeeded or failed, and in this case why. For security reasons it may be useful to require the users to authenticate themselves via SMTP and to register the mail address and verify they're real persons.
» https://www.redhotpenguin.com/svn/talks/npw/qpsmtpd/
» http://smtpd.develooper.com/
This talk Jos should have made during the London Perl Workshop 2005 is a kind of follow-up to the 20 things you may not know about Perl he did at YAPC::Europe 2003.
A problem with Perl is that parsing Perl code with Perl is Hard(tm), but 
it's now possible with Adam's Kennedy's PPI. Jos shows examples of code 
for which we wonder whether they die() or not, then presents 
Acme::BadExample, a module written by Adam with the property of being 
syntactically correct but impossible to run. Adam promised $100, or a 
vertical meter of beer for anyone who could make it run. And Jos happens 
to like beer...
Jos explains the source code of Acme::BadExample, then the tricks used 
in the code of Acme::Code::Police and Acme::Code::FreedomFighter. 
He then explores barely legal Perl syntax tricks, trying to find ways to 
execute Adam's code. For example, how to declare and call a function with 
only digits the name:
    *42 = sub {};       # create the sub
    *42{CODE}();        # call it
    main->can(42)->();  # another way to call it
By looking at the source of pp_ctl.c:pp_require(), Jos discovered 
that one can pass a coderef to require(), which it executed as a 
source filter. After experimenting a little he could then find the 
appropriate filter to make Acme::BadExample run :-)
brian d foybrian's problem was that some of his modules did have problems, some of 
them were reported by CPAN Testers but not all, and not for all his modules. 
brian explains how, while releasing code on the CPAN is easy, releasing 
good code is hard. For a good release, an author like brian must test and 
disttest, check in the source, check the MANIFEST, update Changes 
and README, then upload the tar ball on PAUSE, then on SourceForge 
(with their overly complicated file release), tag the release in the SCM 
and finally announce the release. Then repeat this for 50 modules.
Mistakes typically occur because repetitive task are boring, and the 
developer must stay focused on bug squashing which is not fun either. 
This process can obviously been automated and executed by the computer. 
Hence Module::Release, a program that checks each point, dies if there's 
an error or goes on and publish the module if none. brian plans to extend 
it beyond Perl modules using plug-ins. He then demoes it with his module 
Data::Constraint. The Pod coverage test fails, so brian does an evil 
trick and replaces the actual test with pass(). He runs the release 
command again, but the CVS check gives some errors, so he adds the files 
to the CVS, commits, and runs release again, which this time is happy 
and asks for the changes. It create the tar ball, uploads it on PAUSE, 
then on SourceForge, and tag the release in the CVS.
Marcus Ramberg asks if Module::Release works with Module::Install. 
brian doesn't use it, but thinks this should work.
Michael exposes in his talk common sense principles for building systems 
(not just computer systems) in order to make tasks easier, and more 
generally to avoid pushing users to do stupid things. He pictures his 
sayings with both serious and funny examples: to configure the time zone, 
Unix tzconfig asks the geographical zone, which is an interpretation; 
on the contrary, the control panel under Mac OS X shows a nice map where 
the user can just click where she is. Someone asks if this is also valid 
in the USA where 70% of the population can't place their own country on a 
world map :-)
Feedback is an important point of complex systems: cp(1) doesn't provide 
any while scp(1) does; geeks were used to detecting hard disk problems 
by listening to its noise, but now they're silent; and if people shout in 
cell phones, it's because they don't give you the feedback of your own 
voice, while landlines do.
He recommends reading The Design of Everyday things, the book he used to prepare this talk.
brian begins his presentation of CGI::Prototype by firs showing how 
many steps of a web application are all the same: after start up it must 
receive and validate the input, then process it and output a result. The 
current way to handle this and avoid the hassle is to use a MVC environment 
such as Catalyst, Maypole or CGI::Application. CGI::Prototype is 
another one to do this, just lighter. It's mostly based on Class::DBI 
and XML for the model part, and Template Toolkit or XSLT for the view part. 
Each state of the controller is a namespace of the web application, along 
with a corresponding template: actions translate to changing namespaces, 
and errors are handled by the Error namespace. A safe mode is available 
to avoid any 500 error. The template can be chosen as late as possible 
in order to adapt to the results. For example, a search with no results 
would show the search form again, while several results would be listed 
and only one would be showed.
» http://www.ourmedia.org/node/1644
Marcus Ramberg
Gisle explains how ActiveState has overcome a limitation of Perl, which 
is that it detects its environment at build time, but not at run time. 
They introduced the module ActivePerl::Config to override values in 
%Config in order to match the system where Perl currently runs. 
If an administrator doesn't like this, it can disable it by setting 
ACTIVEPERL_CONFIG_DISABLE=1 in the environment or by removing the 
corresponding package: ppm remove ActivePerl-Config
Kjetil presents some of the notions behind the semantic web, then focuses 
more closely on the RDF data model, a graph model based on triples: 
subjects, predicates and objects. There are many RDF-related modules on 
the CPAN. Too many even. The next big thing should be RDF::Helper, 
the DBI of RDF. Kjetil then shows some code but, being too long, 
is interrupted by Marcus.
Formatter is base class for leveraging a generic API for formatting 
and conversion modules.
Dmitry explains that many modules encapsulates DBI and its connect() 
method in simpler API, but they are usually problematic when one wants 
to use more than one connection. Hence his module DBIx::Roles, which 
he presents as "one hack to rule them all".
Dmitry presents an other of his modules, Regexp::Log::DateRange, 
which he wrote because he wanted to read and SMTP log file, sort it 
by date and find lines within a selected range.
This is the same lightning talk that Abigail did at YAPC::Europe 2005, 
where he explains how Perl is totally inconsistent with regards to this 
warning. His experiments show that it appears only with the print(), 
printf() and sort() functions, when there is exactly one space 
(not a tab) between the function name and the opening parenthese. 
It may even depend on the content of the string!
Anton Berezin first explains the concept of POOP, Pointless Object 
Oriented Programming, then presents his hypothetical module Acme::Depoop 
whose aim would be to convert modules with (what he judges) a POOP API 
to a procedure API.
Audrey presents a talk that was made at YAPC::Asia 2006 in Tokyo by 
Yoshinori Takesako. It begins with a very fast and very satirical (and 
very funny) presentation of the future hype technology: the Unfactoring, 
based on a high-skilled technique, copy-paste-paste-paste-paste. 
Then it goes on and explains how to force Perl programmers to use Ruby: 
just take out the $ and ; keys from the keyboard. Except it's 
in fact possible to make Perl programs with only keywords and whitespaces. 
And here comes ppencode, a JavaScript program that generate such Perl 
programs!
Salve promises videos of the talks, as well as the slides of the talks. 
He then gives some prizes, but lacks the gifts, so runs out of the room, 
while Trond arrives by the other entrance :-)
The organisers all come on stage for a final photo, and invite local people to join the Oslo.pm group. They announce that the next Nordic Perl Workshop will be in Copenhagen and officially close NPW 2006.
I wish to personally thank Salve Nielsen and Trond Michelsen for helping me to find an hotel, and even transporting me a few times. Combined with the sheer weather (Oslo was as warm as Antibes) and the very good means of transportation of the city, this carefully planned conference was a complete success.
cf. London Perl Workshop 2005, GNU/Linux Magazine France #79, http://articles.mongueurs.net/comptes-rendus/lpw-2005.html#h1.3
Remember that Simon Peyton Jones, author of the Glasgow Haskell Compiler that Audrey Tang uses for Pugs, works at Microsoft R&D.
Nordic Perl Workshop 2006 - http://www.perlworkshop.no/2006
Talk Slides - http://wiki.perlworkshop.dk/2006?TalkSlides
Copyright © Les Mongueurs de Perl, 2001-2011
pour le site.
Les auteurs conservent le copyright de leurs articles.