CGI::Application

This website is powered by the Perl-based CGI::Application framework.

That framework is very extensible, and allows a lot of useful things to be done quickly and easily. The core of the application is small, and numerous plugins exist to implement additional behavior, we've written and published two new plugin-modules:

CGI::Application::Plugin::AB

To allow us to perform simple testing of pricing models, and similar, we wanted to use A/B testing, but the framework didn't support that easily.

This plugin adds the appropriate support to allow A/B testing to be achieved easily.

CGI::Application::Plugin::Throttle

This module allows rate-limiting of incoming requests, using Redis for persistence.

This is just one of the measures in place to mitigate against abusive requests, and ensure that our service is running well, even under load.

TinyDNS::Reader

Our zone-files are based upon the TinyDNS format, and the code to parse those has been released here:

Because the zone-files we parse are not standard there is no intention to publish upon CPAN:

  • We ignore the NS record-type.
  • We ignore the SOA record-type.
  • Our TXT-record type is non-standard.

Despite that the code has some value for external consumers - if only to show how a zone-file would be parsed:

$ ./dump-zone  ./zones/edinburgh.io
Type MX
 Name:edinburgh.io
 Value:15 mail.steve.org.uk
 TTL:300

Type A
 Name:edinburgh.io
 Value:80.68.84.103
 TTL:300
..

Webhook Receiver

The code that listens for incoming webhook-requests from your code-hosting service has also been publicly released:

The intention here is to make it simple for others to add support for particular hosts we don't yet support.