Dist::Zilla Likes Toys

Yeah another test play-date here in the Dist-Pen.

Playing with testing and Dist::Zilla over the last few posts has not only introduced me to a the newer 'Perlish' way to ogranize your test cases but I have seen a good number of plug-ins that might be interesting for me to add into my '.ini' file. Now besides the two I really wanted and have added in '[Test::Kwalitee]' and '[Test::Perl::Critic]' I know very little about the others so I am just going to plow though them alphabetically.

So my first batch of test plug-ins for today are

Modern OpenGL with Perl

For a long time, I've wanted to actually make use of the modern hardware I have at home. The graphics card is capable of OpenGL and OpenGL now has a fancy little language to actually bring images to life. For example [https://www.shadertoy.com] has great so-called "shaders" that show off what can be done with them.

Because I also want to toy around with programming some shaders, I want to get a live environment running. So during the weekend, I took the Glew library, wrote a small Perl script to convert the header files to XS, and then fought with OpenGL until I had a driver that could run shaders from Shadertoy.com:

shadertoy-01-seascape-still.png

Perl 5 Porters Mailing List Summary: October 18th-31st

Hey everyone,

Following is the p5p (Perl 5 Porters) mailing list summary for the past two weeks.

Enjoy!

FASTQ read-pairer

In bioinformatics, we get data from the sequencing centers usually in BAM or FASTQ format. One of the first steps is to QC the data to remove any reads that have very low quality or which are too short to use. Some sequencing technologies read from both the beginning and the end of the sequence in opposite directions, and so you need to put the reads together. Quite often one of the directional reads (forward or "R1", backward or "R2") are lost to QC, and so those are considered "singletons" that can't be paired with their read mate.

The boss wanted me to write a read pairer in Perl 6 for our class. Challenge accepted! Below is a decent working version, but it's dog slow ("dog" being Mississippi for "very"). Comments welcome!

Dist::Zilla Likes Critic

Another test play date in the Dist-Pen today.
“The covers of this book are too far apart.” ― Ambrose Bierce
hmm criticism, of a fashion, but not much good to us in the Perl world, I much prefer;
“Criticism may not be agreeable, but it is necessary. It fulfills the same function as pain in the human body; it calls attention to the development of an unhealthy state of things. If it is heeded in time, danger may be averted; if it is suppressed, a fatal distemper may develop."

― Winston S. Churchill


take on what criticism is as it shows how it can help us in the Perl world. Now that leads me to introduce our very own resident and much respected critic ' Perl::Critic

Short Rakudo.js update

Rakudo.js managed to parse (including running BEGIN blocks) all of the setting with an exception of one line that requires figuring out/measuring how to support uncached methods efficiently. (uncached methods are ones where we let the HOW handle the method call by running arbitrary code rather then installing a bunch of methods at once).

Generating the js code for the setting uncovered some performance issues like overflowing the stack by recursing too much (fixed) and running out of memory (not yet fixed).

I'm now focusing on getting a small prefix of the setting to fully compile and load so that I can use it measure and optimize the memory usage.

Avoid User Namespace Pollution with Perl 6 Modules

As Perl 5 module authors, we were able to allow selective exporting easily by use of the @EXPORT_OK array where we listed all the objects that the user of our module could import by name, thereby giving the user full control over possible namespace clashes. However, in spite of all the new goodies provided by Perl 6, that feature is not yet available to us Perl 6 module authors. (For more information see issue #127305 on https://rt.perl.org.)

But the good news is there is a way to get the same effect, albeit with a bit more effort. The trick is in using the full power of tags with the export trait available with every object in a module.

One might get a little glassy-eyed when reading the Perl 6 docs concerning module import and export, of which a portion of code is shown here:

A ghetto test library.

I've been working on some slightly complicated code with a myriad of bad design decisions over the course of a decade, and a total absence of test suite. I knew I needed some code reusability in my tests but I had no idea of exactly how much without making a quick start. Meanwhile my brain was filled with ancient code from which I was expurgating zombies, and had issues understanding multi-vendor interactions, so I wanted some bare minimum reusability to make engineering failure conditions easier.

Dist::Zilla Do Kwallitee Test

Playing with tests in the Dist-Pen today.

On part of Dist::Zilla that I do find intriguing is the way it does its testing. As I discovered in my last post some things only work at release time and that is true of testing as well. Dist:Zilla take the newer extended testing model as a default. In the old days we would call these optional tests and usually hide them in a folder someplace, but the more common usage today is to put them in an '\xt' directory on their own.

One can see the logic behind this as I remember a few times having to do a force install of a CPAN mod as the author had some sort of non-functional test in '\t' that would not pass on my perl.

Dist::Zilla this concept a little further and splits it into four types;

  1. release
  2. automated
  3. extended
  4. author

Web development with Perl 5

Even though I am in the thralls of Perl 6, I still do all my web development in Perl 5 because the ecology of modules is so mature. Here I will describe how I typically go about creating a website. For example, I will reference a small project I built for an affordable housing non-profit in Tucson (https://github.com/kyclark/metagenomics-book/tree/master/web).

Data Model

Show me your flowcharts and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won’t usually need your flowcharts; they’ll be obvious. — Fred Brooks

Nothing captures my philosophy better than the above quote. Everything in my method starts from the database design and is propagated by code outward. I tend to use MySQL with InnoDB tables so that my database has foreign key constraints. (The only time I don’t use InnoDB is when I need a feature like FULLTEXT indexes.)

Here is an example schema:

Parsing JSON is a Minefield

Parsing JSON is a Minefield

And on Twitter

Paging TOBYINK

This week marks 2 years since TOBYINK seemingly dropped off the perl map, in terms of viewable open source contributions that is. Since then the author's modules have gone unmaintained, consequently they are no longer compatible with recent versions of perl. This is going to cause problems eventually.

I, and several others, have sent e-mails to TONYINK but have not received any response. So TOBYINK, where are you? Are you OK? You seem to be active in at least one place? Can you give co-maint on some of your modules that are used or recommended in more widely deployed distributions? Some of your modules are too important to leave to abandonware, and forking them is a path i (and almost certainly others) don't want to take.

Edit: Some non-essential information removed as i don't want to give people bad ideas about compatibility between Moo/Mouse/Moose due to the use in our stack.

Dist::Zilla VCS Opps!

Well in the Dist-Pen today I am going to start to play with linking my Distro back into GitHub.

There are a good number of Dist::Zilla plug-ins to be found in CPAN that work with Git and GitHub in one way or an other. Unfortunately source management and system admiration are skills that I have always lacked, so I am hoping that a few of these plug-ins added to my '.ini' will help me keep my GitHub source both up to date and stop me from making any of the VCS Opps! that I have done in the past.

So to start I installed GitHub on the box where I do my building and replicated my database-accessor GitHub repository, not going to go into that you can find a very good tutorial on that here and most likely in many other that I have not seen.

Tau Station Updates

I haven't blogged lately because of ridiculous amounts of work on the Tau Station MMORPG (the game formerly known as Veure and written almost entirely in Perl). I had reluctantly stopped my last contract with ZipRecruiter because of surgery (long story, but not life-threatening) and then experiencing the joy of physiotherapy. Near the end of physio, we decided as a company to make a serious push on Tau Station and bring it to alpha. Here's an update.

wallpaper mockup of Tau Station art

sparrow remote tasks - way to package your scripts and configurations.

Idea behind a sparrow is quite simple. You have a script, you package it as sparrow plugin and you can re-use it somewhere else.

Give me list of available plugins:

Give your first talk at the London Perl Workshop

If you've never given a talk at a Perl event before, and perhaps never given a talk at any tech event, I'd like to encourage you to give your first talk at the London Perl Workshop. I'm happy to be your LPW talk buddy, and help you prepare for it, and am confident that other people would be happy to help too.

Dist::Zilla Takes Instructions

YAP, Yet another Post-ette here at the Dist-Pen today.

There seem to be a never ending list of the chores that are involved with creating a distribution for CPAN. This is my eight post dealing with these little chores and hopefully the last in this vain. So today I am going to see if Dist::Zilla can help me with the README file.

This file normally contains detailed instructions on on how to install the module, not really requirement for a simple Moose module like mine, but something like DBD::Oracle, it uses XS and an external data driver, the README is essential. Anyway I always think it is a good Idea to have one.

Dist::Zill comes with a ' Readme ' plug-in so lets give that a try first, by adding it into my '.ini' file;

Pick

I love the new "pick" method of lists in Perl 6. Here's a handy Shakespearean insult generator (cf https://kyclark.gitbooks.io/metagenomics/content/arrays.html):

GraphViz2 V 2.43 now does image maps

https://metacpan.org/pod/GraphViz2#Image-Maps

Missing and outdated CPAN modules in Ubuntu (Debian)

Today I tried to set up the Perl Maven site on a fresh Ubuntu/xenial 16.04 using the system-perl.

Most of the CPAN modules the site needs could be installed using apt-get, but there were a few that I could not find or that were outdated.

Acme::MetaSyntactic 1.012 not found.
Business::PayPal 0.13 not found.
DBIx::RunSQL 0.12 not found.
Dancer2::Plugin::Passphrase 2.0.5 not found.
Dancer2::Session::Cookie 0 not found.
EBook::MOBI 0 not found.
MetaCPAN::Client 0 not found.
Module::Version 0 not found.
Template 2.25 not found. We have 2.24.
Test::WWW::Mechanize 1.44 not found. We have 1.42.
URL::Encode::XS 0 not found.
YAML::XS 0.59 not found. We have 0.41.

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.