I'd promised a Milton Keynes Perl Mongers technical meeting for some time, and on Thursday we finally got round to holding one.
We've found that the Perl Mongers group has plenty in common with the local Linux User Group so we decided to hold a joint technical meeting. We've had joint social meetings for several months.
The meeting started with Dave Cross, our guest speaker, giving an Introduction to the Template Toolkit. Dave did a great job of showing what TT does well. I'm already a fan, so I hope Dave prompted other listeners to discover its wonderfulness.
Adam Lowe told us about some of the projects he's working on at The National Museum of Computing at Bletchley Park. They have some scarily huge machines - some of which work! - that can't even store an MP3 file on their tape drives. As Dave pointed out, this seems strange given that we used to store music on tapes not that long ago. Adam's talk made me want to revisit Bletchley Park and see what the Computing Museum people are up to.
Oliver Gorwits told us about Oxford University's network and how it works. There's lots of Perl, Linux and other open source in there, as you'd expect. I particularly like that SNMP::Effective plays a role in there, as Jan and Oliver have bounced around ideas for its development on the #miltonkeynes.pm IRC channel.
I've put all the slides online at http://miltonkeynes.pm.org/.
Conveniently, we found a real ale festival after the talks. We enjoyed a few beers and met up with Tony, who hadn't been able to make the talks.
So, for a group that's just over two years old, I'm pleased with what we've done. I'm looking forward to some great meetings in 2008 with the regulars, our old friends (I'm expecting visits from Birmingham.pm and Matt Trout), and hopefully a few new visitors too.
It's also great to watch the open source community grow in the city where I live. It seems we have lots of people doing interesting things here, but mostly we're not talking to each other. We're slowly improving this.
I hadn't been any conferences this year, so I thought I'd visit the first ever Pycon UK as it's nearby, in Birmingham, and I know almost nothing about Python.
So far the conference seems very well run: we have frequent coffee breaks, good Internet connectivity, talks keeping to schedule and a fairly tasty lunch.
Fortunately, I chose some interesting talks to attend this morning. It's always hard to know what you'll enjoy beforehand.
I started out in Paul Johnston's talk about SQLAlchemy, an ORM for Python. I've been hacking on DBIx::Class lately as my job involves lots of databases at the moment, so this area interests me. The issues Paul mentioned seemed very similar to those that DBIx::Class has tackled: don't issue too many queries; work well with pre-existing databases; build database schemas from code.
Paul also showed how to incorporate SQLAlchemy with a templating system, which reminded a little me of the talk I gave on Class::DBI at the London Perl Workshop in 2004. Apparently Python programmers have strong opinions about the different templating systems available, just like we do with Perl.
Next, Michael Foord showed how to run Python code in Web browsers using IronPython (Python within
Terry Jones's talk about representing and processing information had little technical content, but instead covered ideas about how we treat objects and attributes in the real world and in computing environments. For example, I can form an opinion about Birmingham and share that opinion without needing anyone's permission. In computing, we too often think of objects as having owners and permissions. Terry's ideas reminded me a little of a few years ago when I got excited by RDF and thought about metadata. We can regard any data as either data or metadata depending on our perspective: all data types intrinsically exist as both data and metadata, but we choose one description depending on how we model things.
Some of Terry's ideas, particularly personalised searching, reminded me of discussions I've had with Nigel Hamilton, the author of the Trexy search engine. I might have to play with Terry's marbl.es search tool when it goes live.
Finally, Michael Sparks talked about Managing Creativity. Michael mostly described how his colleagues at the BBC structure their project's Subversion repository to maximise creativity, experimentation and sharing. Essentially, all work goes in the repository: even if one developer considers something they made worthless, another developer might value it or part of it. As well as the traditional trunk and branch structure, each developer has a sketchbook where they put their experiments. Developers can view each others sketchbooks, but have no guarantee what state they will be in. Finally, you can't merge your own work onto the trunk. This struck me as a very good way to enforce peer review.
After lunch, I felt tired so I've sat in the sun and slept a little. I'm just about to head back for the lightning talks, and I'm looking forward to some interesting informal conversation over the conference dinner this evening. I have a place at the Memory table: each table has the name of a Python exception type.
I've been looking forward to today's London Perl Workshop for ages. I've put together a talk, "Testing When You Don't Have Time", that I thought would fit well with the workshop's theme.
I felt really tired last night, so I went to bed early despite friends texting me, inviting me to the pub.
Today I woke up feeling rough. I've only just got up, as of 11am, and I can't face the journey down to London.
Until now I had spoken at every (well, both) London Perl Workshops, so it's a shame to miss this one at the last minute. I hope everything goes well for the organisers, speakers and attendees, and I hope to see everyone I'd looked forward to talking to soon.
Like many people, I use DBD::SQLite in my unit tests so I don't need to rely on a live database.
I've been using File::Temp::tempfile() to create temporary files for me use as SQLite database files. Yesterday, I noticed that tempfile() and DBD::SQLite don't play nicely together. I could use tmpnam(), but as this doesn't create the temporary file a small race condition exists.
I discussed this with Matts last night and he pointed me towards SQLite's in-memory databases. My test cases don't use huge amounts of data, so I can run everything in memory and avoid hitting the disk:
DBI->connect('dbi:SQLite:dbname=:memory:', '', '');
This means I don't need to bother with temporary files any more, making my tests simpler and faster.
We held our third technical Perl Mongers meeting this evening. I enjoyed it and learned things. Great! I suspect I'll put the slides on our web site once I've caught up with some sleep.
Lee started out by telling us how he uses Perl in his work as a bioinformatician. Nik noticed that anti-spam code uses some of the techniques he described, which made me think a little about evolution and spammers. Lee had very detailed slides that supported his talk well.
Robbie told us about the fun and pitfalls of running an online game. He explained how he used HTML::Template to let players customise their in-game views; he told us how he useds/\bgay\b/hard/ on a messaging system used by frustrated teenagers.
Then we took a quick break to chat to each other before I waffled about things I learned at YAPC:Europe. Well, some of them, at least. I forgot to mention the Chartreuse and making people miss their flights home.
Finally, Nik gave us a great introduction to SVK. Unfortunately, my clever idea of him pulling out the network cable to work offline couldn't happen as he had an SSH connection open to the machine at the other end of the cable. By now I should have learned that my clever plans don't work.
But we had fun. And I guess it's more or less our first birthday now as a Perl Mongers group. I'm still surprised we can draw this kind of audience for Perl in Milton Keynes, but really pleased that our group does so well.
And as Jonas says, "MiltonKeynes.pm sounds more like a solicitors firm than any other Perl Monger group." I choose to take that as praise..
For my sins, I look after ActivePerl installations on several Windows machines including my desktop machine at work. If you don't sin enough to use Windows, the following won't interest you much.
Read on if you use PPM and regularly encounter error messages like:
Unable to recognise encoding of this document at C:/Perl/site/lib/XML/SAX/PurePerl/EncodingDetect.pm line 96, line 251.
Unable to recognise encoding of this document at C:/Perl/site/lib/XML/SAX/PurePerl/EncodingDetect.pm line 96, line 265.
Unable to recognise encoding of this document at C:/Perl/site/lib/XML/SAX/PurePerl/EncodingDetect.pm line 96, line 274.
Unable to recognise encoding of this document at C:/Perl/site/lib/XML/SAX/PurePerl/EncodingDetect.pm line 96, line 279.
Unable to recognise encoding of this document at C:/Perl/site/lib/XML/SAX/PurePerl/EncodingDetect.pm line 96, line 287.
Version 0.13 of XML::SAX introduced a rewrite of the pure Perl SAX parser. This parser has behaved awkwardly for a few people: I've noticed it when using PPM on machines with XML::SAX::Writer installed.
After a quick nose through the documentation for XML::SAX::ParserFactory, I installed XML::SAX::Expat through PPM. I then taught XML::SAX to use this parser instead of the whingeing XML::SAX::PurePerl parser by putting the following line in C:\Perl\site\lib\SAX.ini:
ParserPackage = XML::SAX::Expat
PPM now complained about a missing ParserDetails.ini, so I created an empty file at C:\Perl\site\lib\XML\SAX\ParserDetails.ini.
I feel a little guilty about avoiding the problem with a quick hack rather than creating an elegant solution. On the other hand, PPM doesn't spew errors out at me, so I laze around in the sun drinking. Errrr, I mean get on with other mission critical business tasks...
It's almost two weeks since our first MiltonKeynes.pm technical meeting and I've finally got round to putting the slides on our Web page.
We got a respectable attendance: ten people showed up including the four speakers. The speakers covered a good variety of topics from Nik's talk about Testing Legacy Code, using clever tricks like overriding CORE::GLOBAL from within modules to affect how scripts run, through Dave's Databases and Perl, covering DBI and Class::DBI with good explanations of problems you might encounter, and my Gathering information from the Web with WWW::Mechanize to Rod's talk (no slides) about using Perl to tie together a variety of large systems.
The range of talks did justice to Perl's versatility and power: you can override its internals, hook into databases and Web sites easily, or use it as the Internet's duct tape with a few convenient scripts.
It's funny how time flies: tomorrow we're off to the pub again.
For a small city, not known for its computing industry, we're doing well enough to provoke London.pm into holding a long overdue technical meeting. In a moment of weakness, Dean persuaded me to talk at that, too.
So I gave a lightning talk on Tracing Code with Aspect.pm which Dominic Mitchell has summarised well. From the other talks, I learned a bit about OCaml and JSON both of which have lingered on my things to learn about list for too long.
This evening, I found myself fixing a Postfix installation on a Fedora box using yum. I've used none of these before, but still managed to get everything working. I didn't do this out of the goodness of my heart, though: I did it to guilt trip Robbie into talking about how he uses Perl to run a multiplayer game in his spare time at the next MiltonKeynes.pm technical meeting. Watch this space.
In the WWW::Mechanize talk I gave at this year's YAPC::Europe and NPW, I describe how I have passed invalid HTML through the command line tool tidy before passing it to XML::LibXML to process.
I mention that I don't use HTML::Tidy because it doesn't actually clean the HTML, it just checks for warnings. At least, that's what I thought.
Robbie, who I work with, has just showed me some code where he calls clean to do this. In my defence, the documentation confused me by saying this method returns true, whereas it actually returns the cleaned content, which happens to evaluate to true. I should get into the habit of reading documentation on AnnoCPAN, which mentions this.
I hope I haven't encouraged too many people to use a separate process to do something a CPAN module already does. The module's name makes its purpose clear enough.
Whoops!
I gave a couple of talks at the Nordic Perl Workshop a week and a half ago, organised the first Milton Keynes Perl Mongers meeting last week, and there's a London.pm social on Thursday.
I really enjoyed the Nordic Workshop. I agree with jonasbn's comments: having a single track with around forty atendees worked well.
Both my talks went well. As I get more practice speaking I find myself feeling more confident and relaxed. The audience laughed at my jokes and asked good questions. Even without bribery.
Our first MiltonKeynes.pm social meeting took place last Thursday and five of us showed up. Not bad for a first attempt.
Then there's the London.pm social in two days. I should go because I've missed the last few and haven't seen everyone for a while.
It's easy to forget I started using Perl to write code when I've ended up speaking, organising meetings and using it as an excuse to go to the pub. Even at work, I've found myself spending more time organising and writing up meetings, determining requirements and talking to people than writing code. I guess I'll keep going with the flow and see where it all ends up.
Dear Neglected Journal,
Since I last wrote I have done many things. Here, I should just mention that I went to Portugal and enjoyed a mostly-wonderful YAPC::Europe.
Somehow I've ended up agreeing to give twice the number of talks I offered at the Nordic Perl Workshop.
But you don't care about that. You want to know what you would do if you ever found yourself as a Perl monger stranded half way between London and Birmingham in England.
Naturally, you would join the fresh, new Milton Keynes Perl Mongers group. We're officially Buckinghamshire's most friendly, exciting Perl group.
We'll do the usual things: learning lots about Perl while enjoying ourselves. Join us!
Satisfaction guaranteed, or we'll refund your free subscription.