New logicLAB Policies for Perl::Critic Released to CPAN

Today I have uploaded a new release of my Perl::Critic::logicLAB, it lists the two new policies I mentioned on earlier occasions in my blog.

– Perl::Critic::Policy::logicLAB::RequireParamsValidate
– Perl::Critic::Policy::logicLAB::RequirePackageNamePattern

Both released are released and maintained as separate distributions and Perl::Critic::logicLAB acts as a collection (Task::). RequirePackageNamePattern 0.01 was uploaded to CPAN about a month ago and RequireParamsValidate 0.01 was uploaded today together with Perl::Critic:.logicLAB 0.08.

I could have uploaded RequireParamsValidate earlier, but I decided to participate in the Questhub challenge of releasing a new CPAN distribution for every month for 2014 so I decided to stretch the releases for two months. Apparently I forgot to blog about the releases as nicely pointed out by the master questhubber and overall CPAN magician Neil Bowers, so here it is the public announcement of the two releases for January and February.

Their basic details have been fleshed out earlier so I am not going to go into details with the policies as such, but I do however want to address an issue that was raised in conjunction with the challenge on Questhub and that was the flooding of CPAN of new releases bringing no actual value (as I read it). This brings me back to my own contributions and the two mentioned policies.

It is really hard to come up with CPAN distributions that satisfy a greater audience, I for one do by no means satisfy needs other than my own, I would love to, but lets be honest, that is hard – I will get back to that later.

The same problem applies to Perl::Critic policies, coming up with original ones are not so easy as it sounds. But I write policies that my own scratch my own itch and I write policies to get accustomed to working with policies. And just as policies, Perl distributions serve many purposes and some are for getting your head around a specific problem area or improving your own workflow for working with a certain problem area.

A very positive thing in all this apart from the obvious reasons like learning something new, sharing your knowledge and sharing your techniques as open source benefits others – yes it might be annoying and it might be hard to find exactly the best suited module for addressing a certain problem, but my experience with CPAN tells me that the community part of CPAN will take care of that and you can always use trusted sources like the Intarwebs to find your way – what I really mean is that you can always go to you local Perl mongers group, IRC or places like StackOverflow to get guidance and pointers in the right direction and if all is lost – roll you own.

I have several distributions on CPAN, which are dead-ends, they should perhaps be deleted, they will persist on BackPAN, but I just have not gotten “around to it”. These distributions served a purpose at one time, I made errors and mistakes, I learned lessons and I improved as a Perl programmer, CPAN distribution maintainer and Open Source contributor.

Most of us can agree that trial and error is one of the best learning practices and practicing with CPAN distributions might be overkill for silly and personal experiments, but for a long time and still to some extent CPAN is the main repository for Perl code, yes we have Github and cpanm and we can do things differently, but CPAN is just a part of larger ecosystem and the questions you most hear often when you interact with the Perl community when people outline an idea, a concept or a project are:

  1. It is on CPAN?
  2. When will it be on CPAN?
  3. Will it be on CPAN?

(the order of the questions should be random, but for the sake of the beauty of the poetry in the questions the order here is arranged).

So CPAN is important for marketing and distributing your work and getting all the benefits of the community driven tool-chain. And to get back to a previous blog post on Perl and its role in the overall developer community, where it is often regarded as dead, every little contribution, every new distribution which is uploaded or updated on CPAN matters. Perl is alive because of CPAN (*1), because here everybody can play along and it is not so hard and it should not be hard to contribute. I recently migrated my Workflow distribution from SourceForge to Github, simply to easy the process of contributing and SourceForge and Github are important, but CPAN is the distribution channel.

And if you read the blog post I mentioned, the other languages to which Perl is compared their repositories are larger and they are growing and have outgrown CPAN and they are generating buzz, so there is absolutely no need to shut the castle gates and go all ivory over Perl – yes there will be lots of useless crap uploaded and I for one will be one of the contributors in to the (cr)App:: namespace (*2), but natural selection will sort it out and the best distributions will survive, long after there authors have stopped maintaining them, simply because of the community – and CPAN is the community, so when you contribute to CPAN you contribute the community.

It is hard to contribute with original stuff, it is hard to come up with original ideas and implementations that will rock the community. But everybody who has just touched product development, entrepreneurship know so. So until you ship that distribution, which will rock CPAN and get the Perl community all buzzing, because “you can get it on CPAN today” – code, share and learn.

I plan to upload 10 more new distributions this year, I have about 5 up my sleeve and I will run out of ideas just after summer with the current plan, but I am sure that using CPAN and interacting with the Perl community will give me additional ideas for contributions and this gives me a slight chance that I might be able to complete the challenge for 2014.

jonasbn, Copenhagen/Denmark

*1 Not solely, I do not want to forget all the people contributing to the Perl core, they are indeed keeping Perl alive, but in this context they will be mentioned in a footnote – sorry.

*2 This is just a pun, like “Captain of the USS Make-shit-up”, the App:: namespace is a fine a well respected namespace of which I am a happy user – thanks to its contributors

New logicLAB Policies for Perl::Critic Released to CPAN

Prophecies and The Rise and Fall of Programming Languages

Just having read was must be the annual piece in Dr. Dobbs on the state of programming languages entitled: “The Rise and Fall of Programming Languages”, it was with some concern I observed my local minicpan mirror reports being seriously reduced in size.

From January 9th.

authors/01mailrc.txt.gz … updated
modules/02packages.details.txt.gz … updated
modules/ … updated
authors/id/J/JI/JIMI/Statistics-Reproducibility-0.04.tar.gz … updated
authors/id/J/JI/JIMI/CHECKSUMS … updated
authors/id/J/JI/JIMI/Statistics-TheilSenEstimator-0.04.tar.gz … updated
authors/id/L/LT/LTP/Audio-Play-MPlayer-0.05.tar.gz … updated
authors/id/L/LT/LTP/CHECKSUMS … updated
authors/id/O/OV/OVNTATAR/GitHub-Jobs-0.05.tar.gz … updated
authors/id/O/OV/OVNTATAR/CHECKSUMS … updated
authors/id/S/SE/SEKIA/Algorithm-LibLinear-0.09.tar.gz … updated
authors/id/S/SE/SEKIA/CHECKSUMS … updated
authors/id/T/TH/THALJEF/Pinto-0.097.tar.gz 500 read timeout
authors/id/V/VT/VTI/Attribute-Contract-0.05.tar.gz … updated
authors/id/V/VT/VTI/CHECKSUMS … up to date
authors/id/Y/YT/YTURTLE/Nephia-Setup-Plugin-Assets-Bootstrap-0.04.tar.gz … updated
authors/id/Y/YT/YTURTLE/CHECKSUMS … updated
cleaning /Users/jonasbn/.minicpan/authors/id/J/JI/JIMI/Statistics-Reproducibility-0.03.tar.gz …done
cleaning /Users/jonasbn/.minicpan/authors/id/L/LT/LTP/Audio-Play-MPlayer-0.04.tar.gz …done
cleaning /Users/jonasbn/.minicpan/authors/id/O/OV/OVNTATAR/GitHub-Jobs-0.04.tar.gz …done
cleaning /Users/jonasbn/.minicpan/authors/id/R/RW/RWSTAUNER/Dist-Zilla-Plugin-CPANChangesTests-1.002.tar.gz …done
cleaning /Users/jonasbn/.minicpan/authors/id/R/RW/RWSTAUNER/Dist-Zilla-Plugin-PodLinkTests-1.006.tar.gz …done
cleaning /Users/jonasbn/.minicpan/authors/id/T/TH/THALJEF/Pinto-0.096.tar.gz …done
cleaning /Users/jonasbn/.minicpan/authors/id/Y/YT/YTURTLE/Nephia-Setup-Plugin-Assets-Bootstrap-0.03.tar.gz …done

From January 10th.

authors/01mailrc.txt.gz … updated
modules/02packages.details.txt.gz … updated
modules/ … updated
authors/id/T/TH/THALJEF/Pinto-0.097.tar.gz … updated
authors/id/T/TH/THALJEF/CHECKSUMS … updated

With some horror I thought that the prophecies were coming true? – Perl is dying?

As always Perl is declared dead or dying and in this article Perl is mentioned explicitly. I always take these articles with a grain of salt. I write Perl on a daily basis and I am really busy, so I do not consider Perl dead. The article however did not only list the always problematic TIOBE index, but also Ohloh. I actually considered Ohloh dead (sorry, we should not go around considering things dead), but still it hurt since I love Perl and I worry that Perl dies at little every time this is mentioned, so writing the blog post is probably not a good idea at all – since I might be assisting in fulfilling a prophecy.

Anyway – visiting Ohloh, I found out that all of my CPAN contributions listed there had b0rken links to repositories. I have just migrated a large part of my repositories from a hosted Subversion solution, so I quickly ran through all my projects and updated the repository links.

I know that my small contributions are insignificant, but at least I could flag that my CPAN contributions are out there, they are being somewhat actively maintained, as I wrote I am busy, so open source activities are not always on the top of my TODO for whatever little CPU time I have available.

Then the minicpan reports started coming in, in normal size and when I read Perl Weekly issue #129 and discovered that PAUSE had had issues I felt relieved, fear leads to … yoda yada yada.

Tiobe and Ohloh might be statistics trying to say something about how Perl is doing compared to other languages, but judging by the number of updated modules coming to PAUSE (CPAN) on a daily basis, a lot of active development is actually going on.

I did a swift comparison of some package repositories (numbers from the time of writing).

Perl (CPAN): 28.992 distributions (
Ruby: (rubygems): 68.915 gems (
Python (PyPI): 38.887 packages (
PHP (PEAR): 595 packages (

I cannot conclude anything from these numbers, since they say more about the communities and the concept of code distribution and packaging. A statistic from github would perhaps be more interesting. Gabor Szabo wrote a blog post mentioning another blog post on the topic. Here PHP is actually doing quite well compared to Perl.

So taking a step back and looking at the statistics on all the languages I am thrilled to see the sheer number of different programming languages represented on Github (20). That is awesome. I love Perl and I love programming, so seeing how many open source projects and languages are available makes me happy. And it seems that no matter what the statistics say there is still and always room for Perl as a language.

So a note to self is “do not believe in statistics and prophecies”, even though my name is Jonas

But if you however want to play the statistics game on the Perl team, you could do the following:

– join the Questhub quest of releasing a new Perl distribution every month
– put your Perl projects on Github
– mention your projects on Ohloh

Have a nice and productive day programming in whatever language that solves your problem the best.

jonasbn, Copenhagen

Prophecies and The Rise and Fall of Programming Languages

Worksheets and Accomplishment

As I mentioned in my previous blog post: “Questhub, quests and CPAN”, sense of accomplishment is a very fulfilling feeling. Gamification is a technique, which can be used to obtain that particularly feeling, but often play on other psychological aspects of the human mind.

I am often very satisfied, with the sense of connecting the dots or clearing the table. Therefor I mostly identify everything as tasks and organize tasks into releases or work packages, so when everything is ticked off I am one happy camper.

Tasks are like the key component. The key concept is that tasks should be viewed as either closed or open, not half-done or similar. Clusters of tasks as releases or work packages can of course be half-done, but every task should be easily identifiable, break down to sub-tasks if this is not possible.

Tools like Best Practicals Request Tracker and Atlassians Jira are very interesting to me, because they often support the process and workflow I use and not only for professional work, but also for hobby projects were picking up work can sometimes be with somewhat extended intervals and these tools, which are sort of advanced TODO files let me organize and manipulate tasks easily and I can easily identify where I am and where I want to go, even though projects have laid dormant for some time.

Since some issues I need to address are spread across several CPAN distributions, Meaning they will influence several different software packages and therefor require inclusion in several road maps and release plans. Here I use a very nifty feature in Jira and Confluence, the two products from Atlassian.

By tagging the issues with a special tag I can create a worksheet with all of the tasks cross, releases and distributions, so I then can create sort of a work package.

First time I did this was for an issue with the best practice of Makefile generation for Module::Build. I had to change a lot of distribution build files for a lot of projects. So I simply created all the tasks in the different projects with the same tag to let a Confluence report provide me with an overview.

This technique could again be used when I could see that almost all of my Changes files where either missing or malformed according to the proposed standard.

So I created a new tag and a Confluence report. The report gave me a quick overview of the tasks related to the quest I had created at Questhub.

Questhub and it’s quests are also a magnificent combination of gamification and task organization.

The report visualized a problem with my quest. I have planned to do 20 releases, but the overview visualized that I have 18 distributions under version control in Jira and one on SourceForge.

The problem is simply because one of the issues is for a distribution, which is no longer being maintained. It changed name and implementation from: Bundle::JONASBN to Task::BeLike::JONASBN, so I might have to make a rogue release using a branch from an old release under the early name or alternatively via GitPAN.

It seems that to every issue there is a solution, so now I just need to get on with the tasks at hand.

Worksheets and Accomplishment

Questhub, quests and CPAN

I fell over this blog post “Make me do some work, via Questhub!” by Neil Bowers via Twitter on some quests he had undertaken using Questhub.

The idea of Questhub is quite fun and summertime projects are always fun (see my previous post), IMHO the Summer of Code concept existed long before Google branded it.

Neil Bowers have set up a quest to get 1% of CPAN distributions to conform with a certain layout for Changes files, described as the CPAN::Changes::Spec and Brian Cassidy has implemented a service which check changes files named CPAN::Changes Kwalitee service.

Anyway I poked around the service and found out that my CPAN distributions apparently do not do quite well. Out of 31 distributions I have 2 passes and 29 fails (overall 6% success). Gamification is always good and sense of accomplishment is always very fulfilling, so I decided to play.

The 29 failing distributions are:

  • Bundle-JONASBN 0.05
  • Business-DK-CPR 0.08
  • Business-DK-CVR 0.06
  • Business-DK-FI 0.04
  • Business-DK-PO 0.05
  • Business-DK-Phonenumber 0.05
  • Business-DK-Postalcode 0.05
  • Business-OnlinePayment-CashCow 0.09
  • Date-Holidays 0.15
  • Date-Holidays-Abstract 0.05
  • Date-Holidays-Super 0.03
  • Date-Pregnancy 0.03
  • Games-Bingo 0.15
  • Games-Bingo-Bot 0.01
  • Games-Bingo-Print 0.04
  • Module-Build-Bundle 0.11
  • Module-Info-File 0.11
  • Perl-Critic-Policy-logicLAB-ProhibitShellDispatch 0.01
  • Perl-Critic-Policy-logicLAB-ProhibitUseLib 0.01
  • Perl-Critic-Policy-logicLAB-RequireSheBang 0.03
  • Perl-Critic-Policy-logicLAB-RequireVersionFormat 0.03
  • Perl-Critic-logicLAB 0.05
  • Task-BeLike-JONASBN 1.04
  • Task-Jenkins 0.01
  • Test-Timer 0.05
  • WWW-DanDomain 0.05
  • WWW-Nike-NikePlus-Public 0.01
  • Workflow 1.38
  • XML-Conf 0.04

Of all of these distributions the most should be fixable quite easily, the others are part of another summer project of migration version control system, before I can move on with these. These are the ones, which I will have to ignore for now.

  • Date-Holidays 0.15
  • Date-Holidays-Abstract 0.05
  • Date-Holidays-Super 0.03
  • Date-Pregnancy 0.03
  • Games-Bingo 0.15
  • Games-Bingo-Bot 0.01
  • Games-Bingo-Print 0.04
  • Module-Info-File 0.11
  • XML-Conf 0.04

So out of 29 fails I can address 20 imminently.

The two passes are modules I currently do not pay much attention to, but I will have a look at their Changes files just for understanding why they pass.

  • Module-Template-Setup 0.03
  • Tie-Tools 1.06

I have created an account with Questhub and I am setting up a quest to get my 6% to as close to 100% as I possibly can by addressing issues with 20 of the 29 distributions.

Have fun,


Questhub, quests and CPAN