Net::AMQP::RabbitMQ Releases

This weekend I released two versions of Net::AMQP::RabbitMQ on CPAN: 0.007000 and 0.007001.

The first version was the culmination of some major refactoring in how Perl types were inferred into C and AMQP types in headers, and then also adding a bunch of previously-unsupported AMQP header types into Perl.

The second version was fixing an oversight where timestamp types in headers weren’t supported. I also added a manual_tests directory which is where I will add some manual tests as I do some of those. There is a test where I verify dead-letter queue functionality that helped me verify that x-death headers were working properly now.

The primary reason why this is huge is because the special x-death headers are now supported. Not only that, but in the event that you had a non-Perl program publishing to your queue with headers, you may have had compatibility issues with the header types that would cause to have to kluge.

As of now, the new version – 0.007001 – isn’t live, but if you search for the module on CPAN you should find the latest published version.

If you notice any issues, let me know by going to the official github repo and filing an issue.

Re-factoring Your Old Projects

Once upon a time I maintained a very small, lightweight framework to allow for Perl interfaces to be integrated with directly from client-side JavaScript. I called this framework ModExec. This framework took into account the various security implications which I’m sure are already sounding the klaxons in your brain. I even managed to get this framework into a state where I was proud enough to present it to the Perl Special Interest Group in Lisle, IL in 2006. Man, those were the days… and that was 7 years ago. Continue reading Re-factoring Your Old Projects

Gist of the Day: Test::MockModule for Repeatable Tests!

I like repeatable tests. The #1 benefit of repeatable tests is that they’re repeatable. This also means they’re less vulnerable to data changes (e.g. this test depends on this product record remaining unchanged) and don’t pollute your environment. There are two ways that I think you can make your tests repeatable, and I think both of them are equally valid, and each should be used in their appropriate time:

  1. Creating and tearing down fixtures
  2. Using some sort of mocking framework to force a repeatable result from an up-stream dependency that is not what you’re trying to test

Continue reading Gist of the Day: Test::MockModule for Repeatable Tests!

Gist of the Day: How to Test a File You Wrote!

First, I suppose I should apologize for two days of silence. I am currently going through a major life transition, so things could get a little spotty for a while. I haven’t forgotten about you. I actually have had a couple of days where my experiment for the Gist of the Day failed, and I couldn’t get something working in time to put it up.
Today, however, I do have something for you!
Today we are going to cover two topics very briefly (as usual): 1) how do you factor files you wrote into your tests, and 2) how do you write your code with testing in mind (which you should). Continue reading Gist of the Day: How to Test a File You Wrote!

Gist of the Day: There's More Than One Way to Switch Your Class!

In programming you will commonly see abstraction layers. Say, for instance, you wanted to have a program to take some arbitrary data format and load it into your data. We’ll call it product feeds (just because some people like relevant examples). So, you want to pull in product data from various different web sites and vendors to list some products on your site. Now if you have ever done this task before then you’re already thinking “jeez, what a pain in the ass it is to get everybody to use the same format!” If you’ve done this task before then you’ve probably already dabbled in this type of abstraction. In Perl – my go-to language (since I arbitrarily prefer it) – this usually results in dynamically loading a “driver” class based on the data format which is likely vendor-specific. This makes it easy/easier for you to allow each data source to have its own format while using them all in the same way.
If you were to pick a Design Pattern for this, you would do well to choose a Factory pattern. In Perl, since you have so much dynamic leeway, you don’t need to go with a pure Factory pattern here, but what you end up with I think is most certainly in keeping with a factory pattern.
For this Gist, I will demonstrate three common ways to get from knowing which class you need to getting that class:

Continue reading Gist of the Day: There's More Than One Way to Switch Your Class!

Gist of the Day: Mojo Merging Hashes

Mojolicious is a fun module/framework/thing for me. How do I love Mojolicious? Let me count the ways (sorry Shakespeare):

  1. Mojo has ridiculously few dependencies, especially when compared to other web frameworks
  2. Mojo brings web servers (morbo and hypnotoad) with it
  3. Mojo does MVC, or doesn’t do MVC, whatever I want to do
  4. Mojo has templates, and they’re outstanding
  5. Mojo does routes very simply, which is badass
  6. I can write an entire web application in only one file (though it could get big and may not be advisable) using Mojolicious::Lite
  7. Mojo has helpers which are actually helpful
  8. Mojo is crazy fast, so fast that if there is a performance problem I’m pretty sure it’s me
  9. The more I use Mojo, the more I find cool stuff that it can do Continue reading Gist of the Day: Mojo Merging Hashes

Gist of the Day: Using Mojo, Mongo, and SL4A to send SMS Messages (2 of 2)

I am very sorry that I missed posting this yesterday, I kinda got crazy sleepy and went to bed shortly after getting home from work.
AS PROMISED, however, this next Gist is the SL4A Android component. This program gives you two buttons: “Process Queue” and “Exit the program!” With these two buttons you can either process a message from the queue (see previous post) or exit the program. Processing the queue involves sending an SMS message and then repeating the message with TTS. Continue reading Gist of the Day: Using Mojo, Mongo, and SL4A to send SMS Messages (2 of 2)

Gist of the Day: Using Mojo, Mongo, and SL4A to send SMS Messages (1 of 2)

I got a little bored with what I had been posting (I suspect you did, too), so I’m doing something neat. I’m going to write a full (though limited) program for you. Here are the user stories (if you don’t know what user stories are, see here before continuing):

Gist of the Day: Old SL4A Example!

So I’m on very little sleep after a long three days of travel which is not yet done. Nonetheless, the show must go on!
Today I have for you a demo program I wrote for CMI.pm a while back (last July I believe) on how to use Perl with SL4A (Scripting Languages 4 Android). This sample code loads a screen which does one of two things: says “something nice” or exits the program. This program demonstrates how to make an event loop for SL4A, how to load an external XML UI resource for Android, and also uses some very basic functionality of SL4A (TTS speak, in particular).
As I am very tired – three hours of very interrupted sleep – I will not be writing any more than this, but I will, of course show you… Continue reading Gist of the Day: Old SL4A Example!

Gist of the Day: Counting Bits

I’m pretty sure there’s a more efficient way of doing this, but here’s what I’ve quickly typed up in 10 minutes sitting in my hotel. It just takes in a number, and then the size (in bits) of the number. It returns the number of bits it counts. I believe there is a very common algorithm called the Hamming algorithm, but as I don’t know that algorithm I’ve kinda worked this up instead.
This post is super short as I have a very busy day ahead of me. I’m going to go ahead and just post the code and call it a day. Sorry for the brief post. Continue reading Gist of the Day: Counting Bits