Moose vs the API Change Gang

Its not the end of a story but the beginning of one here in the Moose-Pen today.

When we last saw our hero he was deep into the lair of the dreaded API change gang, Fending off invalidated tests cases left right and center until there was only one left!!

The much to be feared! Test case 't/58_parenthes.t'.

The first error was;

not ok 11 - OR added to last gather condition predicate
Now that my API has changed the following test;

Performance Report - August 2018

Belated Happy Independence Day to all my fellow Indian friends.

Last month, August 2018, was really busy for me, personally and professionally. My 9 years old daughter had summer break from school. So lots of action all the time together with the nearly 2 years old twins. Best part of August was attending The Perl Conference in Glasgow with the entire family. My first Perl Conference ever and it didn't disappoint me. We, as a family, got to explore the city of Glasgow and Edinburgh. Already looking forward to the next one at Riga. There was another highlight last month was that I completed one year of daily CPAN uploads and went past Barbie's record of 370 days. As of today, 1st September 2018, I have completed 377 days.

Lets get into details as below:

  • Pull Request
  • Git Commits
  • Pull Request Challenge
  • Perl Blog
  • PerlWeekly Newsletter
  • Adopt CPAN Module

Pull Request

Last month, I submitted 51 PR as compared to 41 PR in the month of July 2018.

Solving one of the two great unsolved problems in computer science

It's said that there are two great unsolved problems in computer science: naming, cache invalidation, and off-by-one errors.

If you have a text file and you need to point to particular lines of the file, you may be familiar with the off-by-one errors problem. That's where Text::LineNumber by Jurgen Wiegert comes to the rescue. With this module you no longer need to think about calculating line numbers, but can just hand off the work to the module.

Language::SIMPLE - The Portable Integrated Scripting System

Introducing SIMPLE

SIMPLE is an experimental attempt to integrate end user scripting into Perl applications. It actually stands for Simple Integrated Modular Programming Language Experiment. The idea is that an application one develops might allow an end-user to run scripts they have made, in a custom language targeting the application's operations. Sounds silly? A script parsing utility written in another scripting language? I do a lot of silly stuff.

Some time ago, IpiGears1.jpg attempted to use a Raspberry pi for robotic and other IO applications. To save time and allow for flexibility, I had developed piGears, a scripting tool that could handle the GPIO and also have some basic flow control as well as support for I2C devices. It had been useful for my experiments with electronics, but was a rather niche utility.

Moose Tests Cheaper by the Dozen.

Its test fix up day again in the Moose-pen.

Well this post will look very similar to one I did a few days ago. Fixing tests that where invalidated by extending the API to stop users from entering dynamic attributes with elements that are not in the elements array.

The first nasty one I ran into was on '31_elements.t' where I got this fail;

Can't locate object method "_lookup_name" via package "Database::Accessor::Function" …
I was getting the error because all of the attributes in elements of the test $da are 'functions' or other classes;

A change to this year's LPW Date, 3rd -> 24th Nov

After a few chats at this year's The Perl Conference in Glasgow, and realising that the chosen date for London Perl Workshop 2018 will clash with freenode #live, we decided it would be a good idea to bump the workshop date from Saturday 3rd November to a week later on Saturday 10th November.

However, after speaking to the venue (the usual place of The University of Westminster) this won't be possible due to their prior commitments. So we have decided to push the date back to the "usual" one of the last weekend in November - Saturday 24th.

Having checked a couple of sources the 24th will not clash and this leaves the other potential dates free for people to attend workshops happening then, namely the 3rd November for freenode #live and the 17th November for Barcelona Perl & Friends.

We hope this doesn't affect the plans of anyone who was going to come, and after a straw poll during the first day of lightning talks at TPCiG it seems that bumping the date by a couple of weeks will be of more benefit to those who wanted to attend but wouldn't have been able to (or were going to favour freenode #live).

As always, thanks to our sponsors:

- Eligo
- Perl Careers
- CV Library
- Oleeo
- The Perl 6 Community
- Adzuna

namespace::local - confine imports to current scope

namespace::clean (along with its cousins namespace::autoclean and namespace::sweep) allows to "forget" imported functions, only making them available for the current package. This is neat.

After looking at the inside of namespace::clean, I thought I could do an inside-out version that would erase imports that come after and not before it. A prototype turned out surprisingly easy to implement.

The usage is as follows:

The Perl Conference - Glasgow 2018 - A summary

I was lucky enough to attend TPC 2018 (my first perl conference), mostly because it was in Glasgow, my home town. This was a very busy week, the conference started on the first day of school (ever for my kids!) so I was late every day :P I met a lot of great people, some all too briefly, and learned a lot of interesting things through conversation, unrelated to the talks below.

Here are some of the talks I really enjoyed (in no particular order) and would recommend watching when the individual videos are up (at which point I'll update the links below).

Reverted Moose Back on Track

Its pick and choose day here in the Moose-Pen

So I have made a decision to drop the new feature of checking dynamic adds as they come in. Fortunately I did this in a branch so all I really have to do is drop that branch from my repo and carry on where I left off.

Now before I do that I did have some good ideas while I was working with this branch which I plan to keep.

The first bit of code I am going to keep is the 'get_element_by_lookup' changes. I found this sub more useful than '_get_element_by_name' as the latter incorporates both the name and the view in the lookup. The code for ' get_element_by_lookup' was just not the addition to the 'elements' attribute it also included a new attribute on the 'elements'.

Now I did notice while I was playing within the branch I found another back-door in the system. I did have this;

"A Haskell challenge"

"A Haskell challenge" is my most recent blog post. Michael Arntzenius pointed out that Haskell's native parsers have trouble with its list comprehension syntax, and wondered if Marpa could do better. It can.

RPerl at YAPC Europe - Day 2

On the second day of my newbie adventures in Glasgow, I had the pleasure to talk to Larry Wall, who stopped by our table and told me about the time he was a booth babe himself. That conference is really full of surprises.

We used this day to deliver new fliers, give more information about RPerl, and especially the different possibilities for programmers to try it, through Cloudforfree.org, rperl.org and our new packages.rperl.org installation files. Mahrez is working from day one with Will Braswell to get us a demo on a VM, and they’re making good progress.

Thank you Chris Jack for the photo below, I'm officially part of the TPC photo album! This is when Wendy convinced me to give a thirty-second commercial during the Lightning Talks. I presented our booth, the compiler, and told everyone to come have a look. I look like I know what I'm talking about, right? Well... my heart was racing, I was mostly scared of saying something stupid.. Very intense 30 seconds, glad I did it!

yapc2.jpg

Daily CPAN uploads: Mission continued...

I still remember the blog A year of CPAN uploads by Barbie published on 22nd March 2015. In his blog, he mentioned my name and my intention to break his record. At that point in time, I was at 150 odd days old. I was no where near the Barbie's record number. However I had made up my mind, no matter what I will go past his magic number. One day not only I crossed the magic number 370 but I reached 1000 days mark.

All-time Top 10(sourced: neilb.org)

On 23rd July 2017, I blogged about it. In response to my blog, I received appreciation from many greats like Larry Wall, Dave Cross, Shlomi Fish, Lee Johnson and Steve Bertnand. One comment by Larry Wall is still fresh to my mind as below:

Remorseful Moose

If back-paddle postette day here in the Moose-Pen

My great re-factoing did not really work as well as expected. I has a suspicion, when I started working on the re-factoring, that I would have trouble with the 'parenthesis' check. I though the problem would crop us when adding two or more conditions on separate 'adds' where I open the parenthesis on the fist on and close it on the last.

Fortunately I had a test case, '43_dynamic_conditions.t ', that tests this situation exactly;

msys2 is good environment to use Mojolicious in Windows

msys2 is good environment to use Mojolicious in Windows.

I write the entry to install msys2 and perl and Mojolicious.

msys2 installation to Windows(Japanese, use google translation)

How lazy am I?

Occasionally I find myself running some random Perl script from a Github gist or dealing with some code from a colleague that doesn't have proper dependency management (yet). It's a bit painful to

  • run the script
  • wait for it to die on a failed dependency
  • install the missing dependency
  • re-run the script
  • wait for it to die
  • install the missing dependency
  • rinse
  • lather
  • repeat

I've tried to solve this problem via lazy

Read the full post.

"Marpa and combinator parsing 2"

My new blog post is "Marpa and combinator parsing 2" . In it, I continue to talk about how to combine Earley and combinator parsing to get the best of both.

This time, I have a trial implementation. I take on parsing of Haskell's significant whitespace, implementing all the examples in the 2010 Language Report and the classic "Gentle Introduction". By the time I'm done this amounts to a substantial subset of Haskell's syntax.

Just Another Moose Day

Its test day again here in the Moose-pen

Today I am working of a separate branch 'trigger_dynamic' as I am trying out a large re-factotring of the code. The switch to the branch and then a pull I have

4 files changed, 341 insertions(+), 67 deletions(-)
so some major changes. On my first rung to the test cases I got fairly poor results with 14 test cases failing. The majority of fails were tests I invalidated by my code changes from the past few days;

 1/12 Gather view_element Price in not in the elements array! Only elements from that array can be added …

# Looks like your test exited with 2 just after 11.

RPerl at YAPC Europe - Day 1

This is a first. First Perl Conference for me, and first time the RPerl compiler is represented at YAPC, also known as The Perl Conference. We had a table, fliers, chocolates, and a computer! Go team RPerl!!!

You may ask : what the heck is RPerl? Very good question, but please watch your tongue. It’s the Perl compiler, for Perl 5 software (and Perl 6 soon), and it’s the work of Will Braswell, long-time member of the Perl community. Its goal is to make your code run faster. Way faster. And it does.

Could anybody explain this code?

Hi,

I have a shell script and it looks like this:

#!/bin/bash
for i in *dat.gz do gunzip $i echo uniprot_sprot_archaea.dat | perl -slane '$a=(split /\_/, $_)[2]; $a=~/(\w+).dat/; $b=$1; print "perl screen_complete_proteome_from_uniprot_division.pl \$i >> uniprot_".$b.".fasta"' -- -i=$i done

I don't know coding. But I need to understand this perl commands. From echo to end of the command, I don't understand. Could someone please explain them?

Thanks a ton.

Exploring Type::Tiny Part 5: match_on_type

Type::Tiny is probably best known as a way of having Moose-like type constraints in Moo, but it can be used for so much more. This is the fifth in a series of posts showing other things you can use Type::Tiny for. This article along with the earlier ones in the series can be found on my blog and in the Cool Uses for Perl section of PerlMonks.

It's pretty common to do things like this:

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.