Using Perl Dancer and Docker to create simple monitoring system

I needed a simple system to monitor events. I wanted to have a system where I can specify that object with some name is 'ok' or 'fail'. And I wanted the system to be able to expire statuses. In case there is no data for the object for a long time then the status should be automaticly changed to 'unknown' — to handle situations when script that sends data breaks.

I looked for several systems, but none suited me well, so I've written my own very simple solution with the name 'curry' (it is named after delicious indian dish, not after Haskell Curry =)

Here is the source code — https://github.com/bessarabov/curry

The system is a web server that is powered by Dancer and the system is bundled into an image with Docker.

I really like this way of creating web apps with Dancer & Docker. Every time there is a new commit in git report Docker Hub automatically builds new image.

Today’s bit of black perl

use 5.010;
{
    package F;
    sub new { bless {}, shift }
    sub me { $_[0] = 'surprise!' }
}
my $f = F->new;
say $f;
$f->me;
say $f;

Output:

F=HASH(0x7f9daa025c80)
surprise!

Teehee…

Deployable

I just wrote about a program I crafted some time ago... in Perl. Happy reading if you're interested into producing smarter tarballs! The article is here.

Hacked Again?

I was just alerted by haveibeenpwned.com that my email address was leaked, and the link given was this:
https://www.quickleak.org/QtPly6aE. "Islamic Cyber Resistance Hacked blogs.perl.org to Show Support Syrian People And SEA". I can't say I follow their logic, but there's a database dump there.

Fun with overload

Spoiler alert: If you are participating in the DFW.pm February thought exercise, this post is about my solution :)

DFW.pm challenged its members with the following exercise:

Pivot a multi-row/multi-column table, 4X4 in size for example, containing name-value pairs. Code should account for larger table sizes with any number of name-value pairs. Numbering the pairs is optional but encouraged for readability. An example would be as follows:

Short survey of modules for combinations and permutations

This is a short look at some modules for generating combinations and permutations. There are likely more modules that aren't listed. RosettaCode has examples of writing the combinations and permutations functions by hand.

Combinations and Permutations
Module Impl Comb Perm Comb w/rep Perm w/rep Derange Speed Order Comments
Algorithm::Combinatorics XS yes yes yes yes yes + Lexico Fast iterator or array
ntheory XS yes yes no no no ++ Lexico Fast block call
Math::Combinatorics Perl yes yes no no yes - - Impl Iterator or array
Algorithm::FastPermute XS no yes no no no +++ Impl Fast block call
Algorithm::Permute XS no yes no no no + Impl Iterator or fast block call
Algorithm::Loops Perl no yes no no no + Impl Iterator
List::Permutor Perl no yes no no no - Lexico Iterator
Iterator::Misc Perl no yes no no no - - Lexico Iterator
Math::Permute::Array Perl no yes no no no - - Impl Iterator or index
Math::Permute::List Perl no yes no no no Impl Block call
Math::GSL::Permutation XS no yes no no no - Lexico function interface
Math::Disarrange::List Perl no no no no yes Impl Block call
Math::GSL::Combination XS yes no no no no + Lexico iterator or by index

Mojolicious Triumphs Over Legacy Code

I got a text at 8:00am:

"Hey, can you jump on a conference call?"

Groggy and disoriented, I blearily type the conference line and enter my passcode, followed by the pound or hash sign. At the tone, I would be the 6th person to enter the conference. Tone.

"The app is down, and trading has stopped."

GSoC: I need your ideas


As I mentioned in my last blog post it would be really great if we were to get into the Google Summer of Code for 2015. We had an extremely succesful 2014 and being a part of this event again would be good for the community and for Perl.

However to do that we need a stack of ideas of projects, modlues or code for the students to look at and then choose. We need mentors to volunteer and we need people looking for students. We have a week to really flesh out the ideas page.

Currently the ideas are on a wiki and you need to contact myself or Paul Johnson to be added as an editor. However if that seems to onerous, you can just add them to this Google Doc which has been set to freely edit.

So I need your help, I need people with ideas or plans to help improve Perl, a Perl project or library, a documentation project, or build a whole website for a project, tackle some fun features. Which means I need you.

Please spread the word, join the mailing list and get involved.

-mdk

GFU Cyrus AG is sponsoring the QA Hackathon

We’re happy to announce that GFU Cyrus AG will sponsor the Perl QA Hackathon 2015.

Originally founded as GFU Cyrus + Rölke mbH in 1980, GFU Cyrus AG is now one of the best-known IT training companies in Germany.
Several thousand IT specialists from all over the Federal Republic of Germany visit seminars at GFU every year. The program includes more than 1000 different seminars.

STRATO is sponsoring the QA Hackathon

We're happy to announce that STRATO has decided to sponsor this year's QA Hackathon.

If you live in certain parts of Europe then you will probably have heard of STRATO, but others might not. STRATO is an ISO 27001-certified hosting provider with its headquarters in Germany. STRATO offers domains, email and homepage packages, online storage, web shops and servers through to high-end solutions.

Blocking DNS malware with Perl and BIND

This evening at Sydney-PM, Nick Urbanik gave an excellent presentation about his work at a large well known Australian Internet provider, in automatically blocking malicious DNS requests in Bind based resolution servers.

His method uses Perl, Inotify and Bind.

If you have customers or external IP's making requests generating huge amounts of SERVFAIL's - his work will discover and block these requests which seem to simply waste CPU time on servers.

He has detailed his work and published his code at his personal website

Fix Those Legacy Subroutines or Methods

Maybe you know the feeling… you go to add an option to that method or subroutine and… cue Jaws theme

sub update_shopping_cart {
    my $cart_id        = shift;
    my $item           = shift;
    my $quantity       = shift;

Argh. You don’t want your legacy code to break but you also don’t want to add a fourth unnamed parameter to the existing problem. And the solution is simple:

more

DC-Baltimore Perl Workshop 2015 - Call for Speakers!

Attention Speakers! You are invited to submit talks for the 2015 DC-Baltimore Perl Workshop, which will be held on Saturday April 11 2015, in Silver Spring, MD (same venue as last year).

As in previous years, by default talks are 20-25 minutes, which we've found is a sweet spot for most topics. We get a great variety -- enough to get a dose of newness and not overwhelm. We also welcome proposals for more tutorial-style talks of around 50 minutes. We'll take the talks and build out a two-track schedule.

Speakers of all levels are welcome! This regional meetup is great for getting your first taste of giving a community talk, sharing projects or topics that you have experience with, or even doing a first run for a talk you'll be presenting at a larger conference such as YAPC::NA 2015 in Salt Lake City! All Perl-related topics are welcome -- from beginner to advanced, from technical to social.

Infinity Interactive is sponsoring the QA Hackathon

Following the recent announcement of the QA Hackathon, we're happy to announce that Infinity Interactive have signed up to sponsor this year's event. Their support means that we can invite more people to attend, and lets us focus on the work rather than the money.

You might have heard of Infinity Interactive, and you're even more likely to have heard of some of their employees. Just in case you haven't, we'd like to share some information about them.

blog change... again...

It seems that I'll never really be happy with blogging.

Passwords.

I am creating a separate post only because I now seem to have lost the permission to comment on other people's posts...

No bigfoot, you are not the only one. I know there was some kind of security breach and some things were disabled so I've come to grudgingly accept it.

It would be nice to get it fixed though...

Anyway I had to change mine again just to post this comment but I felt it was important! :)

Passwords?

I think one of the impediments to seeing more blogs on this site is the blog engine. It's awful.

Am I the only one that has to reset his password EVERY single time I try to login to this blog system? And why to do I have to login twice if I want to post?

Very frustrating...

git-refresh: Automatically rebase current branch onto master

Different people have different workflows with git. Mine is pretty simple.

  1. Branch from master
  2. Hack, hack, hack,
  3. git stash; git checkout master; git pull --ff-only; git checkout $branch; git rebase master; git stash pop
  4. Goto step 2 until done

That step 3 is pretty damned annoying. I try to keep branches short-lived, but I often rebase onto master to ensure a clean merge. Thus, I wrote git-refresh. It does step 3 for me. However, my git-fu is sorely lacking (and my bash scripting ain't great either), so suggestions for improving this code are welcome.

system(), run()... roll_your_own()

I'm working on a program that is thin wrapper around the execution of many other programs (mainly shells scripts) in Linux. The initial - and working! - choice was to use system():

my $code = system {$program} $program;

but it showed some limits soon...

GSoC 2015

It's that time of year again when I will start the usual cajoling and pushing to find the Perl Communities presence for the Google Summer of Code. Yes, once again this is seemingly being done at the very last minute as busy volunteers are once again made busier and I fail to start the ball rolling early enough.[1] But heck this is Perl and Developers, deadlines are those things we like to hear go whoosh as they pass us by, am I right?[2]

However better late than a no-show at the sticky end of a wicket with the last pair riding a duck[3] and we do have the success of 2014 to build on when a great group of mentors and students once again gave us a 100% pass rate and performance. Let's see if we can match their success and increase the students for this year.

About blogs.perl.org

blogs.perl.org is a common blogging platform for the Perl community. Written in Perl with a graphic design donated by Six Apart, Ltd.