graphql-perl - plugin to make GraphQL "just work" with DBIx::Class

As mentioned in the LPW "trailer" for shiny new toys, I will be giving a talk on graphql-perl. I promised to talk about introspecting a DBIx::Class schema to make a GraphQL interface. This is how!

The API for a "convert plugin" for graphql-perl is simple: implement a to_graphql, and optionally a from_graphql method. The to_graphql returns a hash-ref with three keys:

  • schema
  • root_value
  • resolver

These are all the entities, apart from the specifics of an individual query/request, needed for GraphQL's execute to operate. The Mojolicious and Dancer2 plugins need only to be given which plugin to call, and any necessary arguments (e.g. a DBIx::Class::Schema object) and they can now create a GraphQL endpoint from that.

The newly-released v0.03 of GraphQL::Plugin::Convert::DBIC is the first functioning plugin. It implements generic CRUD for the given DBIC schema: it creates two types of Read (primary key, and "search" on fields), and Create, Update and Delete mutations.

Perl and AI

Following a brain fart, I've had a dig around for AI related stuff in perl. I haven't found much currently active, except an interface library for an Apache project (which looks good). I've found very little in the sentiment analysis sphere. This is what I've found so far:

AI::Categorizer Not touched since 2007
AI::NeuralNet::Simple Not touched since 2005
AI::FANN Not touched since 2009 Old!
AI::NeuralNet::BackProp Not touched since 2000
AI::Perceptron Not touched since 2003

And the live one:

AI::MXNet Live!
Interfaces to

Am I missing anything obvious?

Perl and the Operating System at the London Perl Workshop, 25th of November

One of the strengths of both Perl -- and our talk schedule -- is a diversity of ideas. We see this in the rich depth of Perl libraries on the CPAN, in the large variety of places Perl is deployed, and in the many ways people use Perl to make their lives easier.

eligo.pngThis summary is brought to you by our Platinum Sponsor: Eligo. Eligo are a niche recruitment agency with a team of dedicated Perl Consultants, who specialise in and have experience in recruiting Perl Specialists across a wide range of sectors and roles in the UK and beyond.

Perl and the Operating System

Lacey Powers -- better known as Perl's resident Postgres badass -- gives us a tour of "Debian Tips and Tricks", showing us that Debian is a fantastic platform for running your applications, Perl or otherwise, on. The talk will cover some of her favorite tips and tricks to make your life using and administering Debian easier. Debian goodies, unattended upgrades, molly guard, useful non-Debian project repositories, and many others will be covered.

Perl 5 Porters Mailing List Summary: November 2nd-12th

Hey everyone,

Following is the p5p (Perl 5 Porters) mailing list summary for the past week and a half.


Human Perl at the London Perl Workshop November 25th

There's more to Perl than perl. There are Perl people, there's a smattering of Perl philosophy, and there are many other peculiarities on the Perl periphery. This year's London Perl Workshop will have some great talks on Perl-y subjects that don't just focus on the language itself!

adzuna.pngThis summary is brought to you by one of our sponsors: Adzuna, a search engine for job ads used by over 7 million visitors per month that aims to list every job, everywhere, proudly built in Perl.

Human Perl

Julien Fiegehenn (‎simbabque‎) will tell us how he "[Turns] humans into developers with Perl" -- his methodology for teaching apprentice software developers. He often works with young trainees who start their professional careers with very little to no prior tech knowledge and will cover the social aspects of being a mentor and show process examples that help with long-term motivation.

Perl client for NATS Streaming Messaging System

Hello all,

With micro-services and cloud being a buzzwords of the day it's no surprise that a market for messaging systems is pretty busy at the moment.

One such system (NATS and persistent version NATS Streaming) seems to be a leader among relatively new arrivals. If interested please read more on it at its official page

There's a lot of clients for original NATS already exist on the market, including one for Perl,
Net::NATS::Client, though without support for recently added NATS Streaming. I did not think that was optimal and wrote one.

The purpose of this blog post is the announcement of new Perl Client for NATS streaming I just uploaded to CPAN and github Net::NATS::Streaming::Client.

From the README.

Net::NATS::Streaming::Client - A Perl client 
for the NATS Streaming messaging system.

Basic Usage
This class is a subclass of Net::NATS::Client 
and delegates all networking to the parent.

use Net::NATS::Streaming::Client;
$client = Net::NATS::Streaming::Client->new(
  uri => 'nats://localhost:4222'

$client->connect() or die $!;

$subscription = $client->subscribe_channel(
  { subject => 'foo' }, sub { warn shift->data } 
  { subject => 'foo', data => 'Hello, World!'}



Hopefully it'll be useful for Perl community.

I want my, I want my Kwa-li-tee

If you publish code to CPAN, you've probably noticed the steady improvement in its entire ecosystem over the last couple of years. ++Neil Bowers and ++the meta::cpan core hackers in particular have laboured tirelessly to improve the release process for authors and the user experience for consumers of CPAN code.

One of the things that's most useful as an author is the CPANTS Kwalitee ratings generated for any release to CPAN. The Kwalitee ranking markers are continuously being improved and added to, and I recently updated my build config to follow some recommendations the system gave me.

I use Dist::Zilla for publishing to CPAN, and I was able to address all the recommendations using Dist::Zilla plugins. Here are the newly added configs in my dist.ini:

perl hacking

I am now going to talk about my perl 5 code repository, it is located at

There is a module HollyGame which is about the fastest game kit for adventures/RPGs and so on by using everything in lists, e.g. enemies, sprites lists which are updated every game loop and a image resource indexer which gets you the next image also from a list of images. It was primarily developed on FreeBSD, which is why they didn't include it in CPAN.

If you like Linux more then there is a HollyGameRPGAI which uses a Gauss formula of the Gauss Support Vector Machine to wander around enemies or other non-player characters.

To show the "power" of HollyGame there are examples in that same directory which use it with an SDL 1.2 layer (SDL on CPAN), there is also a Wycadia and Ultima 8 perl game start which I am further working on. The Ultima 8 program has a system for walking around in low levels of platforms inside the file. Each hashed level contains intersected objects with that width, height and depth instead of a usual octtree using contained items.


The Great London Perl Bake Off

You may not have noticed, but the London Perl Workshop is happening later this month (Saturday 25th November). It's a free-to-attend community event: organised by members of the community, for the community, and made possible by sponsorship from companies in our community.

Reinforcing the community theme, we're trying an experiment this year: crowd-sourcing bakes from attendees for one of the coffee breaks. If you're an experienced baker, an occasional dabbler (like myself), or even a complete neophyte looking for a reason to start, why not give it a go?

London.PM at a glance

Shiny New Toys at the London Perl Workshop, Nov 25th

Who doesn't like shiny things? I love shiny things. The London Perl Workshop loves shiny things. CV-Library, this post's sponsor, loves shiny things. So if you come to the London Perl Workshop, Nov 25th, you'll learn about some shiny things.

Shiny Things!

cvl.pngThis summary is brought to you by one of our sponsors: CV-Library. CV-Library is the UK's leading independent job board, developed in Perl and is hiring developers in its London and Fleet offices. CV-Library's technical director is also one of this year's organisers!

Shiny New Toys

The inimitable Ed J (‎mohawk‎) will be talking about his sterling progress in developing "GraphQL in Perl: The Story So Far". GraphQL is the Next Big Thing in implementing APIs, maybe even a successor to REST. Ed has ported the JavaScript reference implementation to Perl, plus written plugins for Dancer 2 and Mojolicious to make it trivial to add a GraphQL endpoint to your web application. He'll also talking about exposing DBIx::Class schemas -- and, more generally, Moose classes -- via GraphQL using introspection.

Inline::F2003 - An ILSM for modern FORTRAN

I would like to announce the first release of Inline::F2003. The project features the program "", which performs a matrix multiplication calculation, to showcase the use of Inline::F2003.

The project's URL is:

Inline::F2003 is a Perl extension module that allows program units written in modern FORTRAN to be added into the "__DATA__" section of a Perl program. The term "program units" is a collective FORTRAN term that refers to subroutines, functions, and module procedures. The module reads the FORTRAN source code, compiles it into object files, and builds a single shared library file.

What Time is Midnight?

Yesterday was time change in the U. S. of A. I pulled out my iPod Touch to update a Numbers spreadsheet, and hit the "today" button to put the current date in the date column. But when I did that I got not the current date but 11 PM the previous day. Today it works as advertised.

Now, I am not privy to the internals here, but this behavior would be explained if "today" were implemented by the Objective C (or Swift, or whatever) equivalent of the following Perl:

my $date = time + $zone_offset;
$date -= $date % 86400;

This code is clean, simple, obvious ... and subtly wrong because on time change day, after the change, midnight has a different offset than the current time. This is a bug that manifests only 44 hours in every year. I think that when I want the local day I round-trip through localtime and Time::Local::timelocal. But do I really? Always? And would the above snippet be valid for UTC?

I just did ack '%\s*86000\b' on my Perl modules, and came up dry. Then I looked for '=>\s*86000;' to find relevant manifest constants (three -- I'm considering picking a name and converging all modules to it), and find the modulo operations on them. Still nothing. Am I really clean? What about you?

London Perl Workshop 2017 - Curtain Raiser

Perl and Testing at the London Perl Workshop, sponsored by Perl Careers


One of the major strengths of Perl is the strong focus on automated testing and the pervasiveness of software testing tools on the CPAN. As you'd expect, London Perl Workshop on the 25th of November will have talks on testing!

Perl Jobs by Perl CareersThis summary is brought to you by one of sponsors: Perl Jobs by Perl Careers. Perl Careers is a specialist Perl recruitment consultancy who can help you find your next job, run by a CPAN contributor (and one of the LPW organisers!).

Testing Talks

There's a special treat in a two-hour workshop run by's Martin Berends and's own John Davies: Perl and Selenium workshop. Selenium is a suite of tools for driving a web-browser and testing the resulting HTML and behaviours of pages, suitable for testing web applications. Martin and John will get workshop attendees setup and ready to drive Selenium from Perl for all their web-testing needs (so bring your laptop!).

Help CPAN Testers During meta::hack v2

Would you like to help CPAN Testers build some new data dashboards and new web applications during meta::hack v2? Join us on IRC in #cpantesters-discuss on, join our mailing list on, or e-mail me directly at

With meta::hack v2 only two weeks away, I've written down my todo list for the hackathon. With another brand-new machine graciously provided by ByteMark, who have been hosting CPAN Testers for years, this year's hackathon will involve more devops tasks to improve reliability and stability of the various parts of the project.

The new server will be the host for CPAN Testers backend processes, the processes that turn the raw incoming data into the various reports used by the websites and downstream systems. It will also be the new home for the CPAN and BackPAN mirrors that CPAN Testers uses for data, and provides to external users as part of CPAN's mirrors list.

Ooo! Ahh! The deadline for Lightning Talks for the London Perl Workshop is Monday

Fast, often loud, and the finale of the London Perl Workshop, lightning talks share a lot in common with the fireworks lighting up our skies this weekend.

The response to the call for longer talk submissions has already been amazing, so we’re not going to be able to squeeze in any unscheduled talks this year, but if you didn't submit a full talk proposal in time, you can still participate with a lightning talk!

So, if you have a proposal just waiting to explode (see what I did there? ;) submit it on or before this coming Monday, the 6th November at And, see our previous post for hints and tips on how to make your 5 minute lightning talk go with a bang!

YAML::PP Grant Report October 2017

See also my previous report on and

In October, I have worked over 50 hours on YAML related stuff. Read on...

Configure at the 2017 Perl 5 Core Hackathon

Configure at the Perl 5 Core Hackathon

One major focus of discussion at the Perl 5 Core Hackathon in Amsterdam last month was the status of the program Configure. In this post, we provide a brief introduction to Configure and then discuss the work done on it at the Hackathon and in the subsequent weeks.

What Does Configure Do?

In order to build and install an executable program on a machine, the programmer first has to identify characteristics of that machine: the CPU; the operating system; the libraries; and so forth. Where the machine offers the programmer choices -- e.g., which C-compiler do you want to use -- those choices have to be recorded in a way they can be used by the build and installation procedures.

A configuration program is one which performs these tasks. When building a program from source code, the programmer will typically start with something like this:

    $> ./configure --config-option-1 --config-option-2=foo

Perl 5 Porters Mailing List Summary: October 16th - Nov 1st

Hey everyone,

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


About 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.