All Good Things

Yesterday I announced the end of The Lacuna Expanse, the first massively multiplayer Perl-based web game. 

Almost 7 years ago I started working on building my second video game ever, a project that would be known as The Lacuna Expanse. Almost 6 years ago, I launched it and over the next year I evolved it as much as I could, before having to return to my other businesses. Luckily, you, the amazing community behind Lacuna Expanse picked up my mantle after I open sourced the game and continued to evolve it and make it…

Pong in Perl 6 at MadMongers Tonight

Pong in Perl 6 at MadMongers Tonight

[From my blog.]

Introducing SVG::Estimate

If you do anything with 2 dimensional CNC machines such as plotters, mills, or lasers, you’ve probably used some form of vector graphics. The most popular open source vector graphics type is called SVG or Scalable Vector Graphics. If you’re doing this professionally, you need to know how to charge for that work, and if you know the length of the shapes included in that vector file, you can do a pretty good job of preparing an estimate for a customer. That’s where SVG::Estimate comes in. It does the mind melting math…

Missing Smart Match

I know that smart match is considered experimental at best and is likely going away at worst, but I hate that! In what world is:

if( grep $_ eq $scalar, @array ) { }

Better than this?

if( $scalar ~~ @array ) { }

The former doesn’t even shortcut. Some will say that I should use any like this:

use List::MoreUtils qw/any/;
if( {$scalar eq $_} @array ) { }

But any damn fool can see that it’s 2 li…

Complicated joins with DBIx::Class

DBIx::Class is a great way to hide database interactions in your Perl classes. However, something that you might find easy in normal DBI queries can seem hard in DBIx::Class, because you lack direct access to the SQL. Take for example the following query:

join slots on (eventtyperooms.room_id=slots.room_id) join dayparts on (slots.daypart_id = dayparts.id) where slots.is_reserved=0 and eventtyperooms.eventtype_id='E375219C-CDBB-11E5-8739-AFC5…