two
short
planks
The Personal Homepages of Mark Fowler

Programming Projects

Productivity Perl Modules

Mac::Safari::JavaScript

Run JavaScript in Safari from within Perl and collect the results. Really useful for scripting your web browser or extracting part of the page you're currently reading.

Net::SSH::WatchRemote

A command line utility that can be configured to connect to a remote server over SSH, install a command in that server's path to edit files, and then open the remote files on the local computer for editing whenever that command is used on the remote machine.

Perl Testing Modules

Test::Builder::Tester

Test your test modules. This module is now bundled with Test::Builder itself, and is distributed as part of the perl core (i.e. along with Perl itself and is probably already installed on your computer.)

Test::DatabaseRow

Test your database. Use existing SQL or have this module build it for you dynamically. Perform multiple tests on the returned data and get clear, concise, diagnostic output if any test fails.

Test::XML::Easy

Testing XML with Perl easily. Unlike Test::XML (whose interface I steal) we just rely on XML::Easy which has no external C libary dependancy and is fully functional without a C compiler at all.

Test::utf8

Huristically test to see if you've double encoded a utf8 string by looking for things like "é©" in your strings.

Test::DoubleEncodedEntities

Huristically test to see if you've double encoded your XML entites by looking for things like "&é" in your strings.

Acme::Test::Buffy

A tutorial module; This silly testing module is designed to be an example of how to write, and test, your own testing module.

Perl XML Handling Modules

XML::Easy::ProceduralWriter

XML::Easy is a wonderful Perl module for writing XML. It's blindingly fast, has no dependancies on external C libraires, has just one non-core dependancy with Params::Classify, and can be installed without a C compiler. Despite this, and despite the name, it's not particularly easy to write XML with XML::Easy. This module is simple declarative interface that simplifies the interface considerably.

XML::Easy::Transform::RationalizeNamespacePrefixes

XML namespaces link prefixes (the foo part of <foo:bar/>) to URIs to allow the prefixes to refer to different namespaces. Because of the tree nature of the document however, the same prefix might mean a different namespace at a different point. This module works its way though a document changing the prefixes that are mapped to URIs so that all the prefixes that refer to the same URI are the same and all the prefixes that refer to different URIs are different.

Template::Plugin::XML::LibXML

Use XML::LibXML from within the Template Toolkit. This module exposes the XML::LibXML parser to templates and monkeypatchs the various XML::LibXML modules so they work with the Template Toolkit [% VIEW %] directive.

Perl Extensions

Sub::Clean

Mark a subroutine to be removed from your namespace (i.e. to prevent a utility function being called as a method on your class) with an attribute.

Devel::CompiledCalls

A utility that can print out, as they are compiled, all function calls to a particular subroutine.

Array::Extract

Extract out elements of an array that match a particular block and return them.

Attempt

Syntatic sugar for attempting an operation a number of times if it throws an exception.

Devel::UseFromCommandLineOnly

A utility module that, if you include it in your class, prevents your class being loaded apart from on the command line.

Sublime Text 2 Plugins

Super Snippet

Missing the ability that TextMate has to execute shell commands within snippets now you're using Sublime Text 2? Want to execute embedded Python from within your snippets? This extension to Sublime Text 2's own snippet mechanism allows you to do that.

ReplaceIt

A version of find and replace that can be bound to a keyboard shortcut.

TerminalHere

On Mac OS X, this plugin allows you to open a Terminal in the directory the file you're editing with Sublime Text 2 lives.