Dynamic ACL for EC2 with Dancer

An in-house Dancer webapp that's running on EC2 needed an ACL (Access Control List): a list of IPs that are allowed to access the application. Here is how we've accomplished it in a few lines.

Perl 5 Porters Weekly: October 22-October 28, 2012

Welcome to Perl 5 Porters Weekly, a summary of the email traffic of the perl5-porters email list. I'd hoped to get this published earlier, but it didn't happen.

In the US, we just switched back to "standard" time on Saturday. Rah, rah energy savings, but toddlers don't adapt well to legalistic time changes, so I was up and at 'em at the butt crack of dawn this morning.

Enough complaining, let's get to this week's topics. I hope you wanted a week full of discussion(?) around subroutine signatures, because that's what we got.

  • perl-5.16.2-RC1 is now available
  • 5.12.5 last call for patches
  • Consider Forbidding Developer Releases in Production Perls
  • No-taint support in Perl
  • What happened to the whole "small core" idea?
  • sub signatures
    • too many arguments
    • function to return the signature
    • too few arguments
    • status - I'm going quiet for a while ...

Testing is a Feature of Your Service

My job at Bank of America consists largely of data collection and storage. To collect data in Perl, I have to write XS modules to interface with the vendor-supplied native libraries. Because I want to know my code works, my XS modules come with robust test suites, testing that everything works correctly.

Since the XS module was intended to be used by other, larger systems, I decided to help those larger systems test their dependency on my module: I included a Test::MockObject that mocked my module's interface. By using my test module, the tests can try some data and see if their code works.

But the hardest part to test is always the failures. How do they test if the news service goes down in the middle of a data pull? How about if it goes down between data pulls but still inside the same process? How do they test if the user has input an invalid ID for data?

A grammar that exemplifies, describes and parses itself

[ This is cross-posted from the Ocean of Awareness blog. ]

I've written a grammar in Marpa's new BNF interface, to parse Marpa's new BNF interface. In the 70's, when I learned parsing theory, this was a very fashionable thing to do, perhaps because yacc had done it, in Appendix B of the original 1975 paper. By 1979, Hoftstadter's book Godel-Escher-Bach (GEB) was out, and the next year it took the Pulitzer for General Nonfiction. Self-description, recursion, self-reference, self-embedding, you (preferably autologically) name it, these things were all the rage.

YAPC::Europe 2013 in Kiev, week minus 41. Venues

Viacheslav Tykhanovskyi summarises his trip over the venues in Kiev during the last few weeks. He did a huge job and now the huge job for us is to pick up the best venue :-)

Net::Icecast2 is out!

My friend and co-worker Pavel Zhitomirsky, who also organized the last TA.pm meeting, has made his second CPAN contribution: Net::Icecast2.

While trying to work with Icecast, he found that there is no Icecast 2 API on CPAN and decided to write one. As usual, he writes Modern Perl with all the usual bells and whistles: Moo (+ Sub::Quote), MooX::Types::MooseLike, read-only attributes, documentation, Dist::Zilla and so on.

It's on Github to hack on, and I assure you he is very cooperative. Feel free to help out, suggest improvements or offer any criticism.

no ident specified when using Log::Dispatchouli (MooseX::Role::Loggable)

Sometimes when working with the lovely MooseX::Role::Loggable you might encounter the following fatal error:

no ident specified when using Log::Dispatchouli at Loggable.pm line 117.

I keep running into this and resolving this each time without remembering what this means, so I keep having to debug it all over again. While I've documented this issue in the new version of MooseX::Role::Loggable, I'd like to explain it here as well.

Auto-detection of clusters in Graphviz *.gv files


I've released GraphViz2::Marpa::PathUtils V 1.01, which now offers an algorithm that performs auto-detection of clusters in Graphviz *.gv files, via the find_clusters() method.

Download, or read the docs at the usual place:


Peruse the demo.

The most complex input file I tested ran foul of a bug in Graphviz itself, which I've reported. I am using Graphviz V 2.26.3, and the bug has been kindly confirmed by Ryan Schimdt in 2.28.0 and 2.29.20121022.0445 on OS X. So, that image is not yet on the demo page.

Note: An option in the code allows outputting the resultant *.gv file, hence making it available for further processing, and the format of the (optional) output image (svg, png, ...) is also an option (which is passed to 'dot').

Note: Nodes and edges using ports are not yet supported.

Thanx to Ron Newman (on the Graphviz mailing list) for the suggestion to implement this (despite the complexity of the code I had to write :-).

Lastly, the previous algorithm in the module (in V 1.00), accessed via the find_fixed_length_paths() method, finds all paths of a given length starting from a given node. Demo output is included in the above URL.

About blogs.perl.org

blogs.perl.org is a common blogging platform for the Perl community. Written in Perl and offering the modern features you’ve come to expect in blog platforms, the site is hosted by Dave Cross and Aaron Crane, with a design donated by Six Apart, Ltd.