YAPC::Europe Day 0

I travelled from Heathrow to Sofia, Bulgaria very early this morning. I managed to bump into a few Perl Mongers on the flight over and we were welcomed by a camel sign at the airport. I managed to find my hotel and have a proper shower. First order of business was to have a proper lunch, I bumped into someone and we took the shiny new metro system into town and explored the center of town. I managed to pick up a Баница , a pastry with fresh cheese. We then wandered around, found a great Rodin exhibition and made it to the evening meetup a little early. Luckily we weren't the only people turning up early and started drinking a Zagorka or two. Very drinkable.

Type::Tiny Tricks #5: Wrapping Moose/Mouse Type Constraints

So you have this Moo class, and it turns out what you really need for it is the StrictVersionStr type constraint defined in MooseX::Types::Perl. You could switch the class to Moose, but long term you want to stick with Moo.

Eventually you'll steal what you need from MooseX::Types::Perl, so you don't have the Moose dependency, but for now what you really want is to be able to use a Moose type constraint within a Moo class! What a predicament you've gotten yourself into! Type::Tiny to the rescue!

   {
      package Local::Eg5;
      use Moo;
      use MooseX::Types::Perl qw( StrictVersionStr );
      use Types::TypeTiny qw( to_TypeTiny );
      
      has version_number => (
         is   => "ro",
         isa  => to_TypeTiny( StrictVersionStr ),
      );
   }

Bring your dirty YAPC::EU 2013 money to YAPC::EU 2014

Nicholas Clark:

It turns out that it’s quite hard to change Ukrainian Hryvnia back into your local currency. Apparently you need to get a special form to do it, which seems to be about as common as a Ryanair refund.

Given that quite a few of us aren’t that likely to return to Ukraine any time soon, it implies that there’s quite a lot of paper money sitting around various Perl monger’s desks, drawers etc, not earning its keep. For each individual it’s not much in value, but I suspect that all together it adds up to a few thousand Pounds/Euros/Dollars etc. Meanwhile, the Ukrainian central bank is very happy about all currency it got in return for selling us [its] bits of paper.

So I thought that it would be a good idea if we put the notes carefully to one side, and then all took them to Sophia next year, where at YAPC::Europe 2014 someone from Kiev can come with a big bucket, collect the money, and take it back to do useful things with it.

I assume that the intervening events have not made changing the currency any easier…

In any case I’ll be bringing my 70 along, and bulk88 has expressed interest to buy, should none of our attendants from the Ukraine want them.

CPAN Day - 317 Uploads and 21 Guns

Sometime in May 2014, ETHER mentioned on IRC that she would soon be passing me up on this leader board. I was number 20 and she wasn't far behind. I guess I took that as a challenge, because this past weekend on CPAN day, I moved into the #6 spot. This post explains how.

I've created a couple CPAN packagers over the years, like Module::Install, and Module::Package, but earlier this year I decided to give up on those and just use Dist::Zilla, so I moved most of my active stuff to that. In the past year, as an Acmeist, I started doing a lot of real programming in Bash, and recently I made a Bash-heavy wrapper around Dist-Zilla called Zilla-Dist.

The 19th CPAN Day and the 1st

Yesterday (August 16th 2014) we celebrated the anniversary of the first upload to CPAN by Andreas König (ANDK) (as he worked on what became PAUSE). It was the 19th anniversary, but the first that we've marked in this way.

In one day, 107 people uploaded 775 releases, 41 of which were the first uploads of new distributions, and 10 of which were the first upload by new CPAN contributors. The first two numbers were outright records, and the second equalled the previous best. All of those numbers were higher than I expected.

Type::Tiny Tricks #3: One-off Coercions

Here's a quick way to create an attribute that coerces to an integer from any other number:

   package Local::Eg3;
   use Moose;
   use Types::Standard -types;
   
   has foo => (
      is      => "ro",
      isa     => Int->plus_coercions( Num, sub{int($_)} ),
      coerce  => 1,
   );
   
   __PACKAGE__->meta->make_immutable;

CPAN Day winner?

I didn't think it was a contest but I think Ingy won CPAN Day....

View image

Kephra XP ded prototype works

Mark eting may prefer vampires, but here's a different why Kephra keeps evolving, for all that are interested in dev tools, written in Perl. Oh , btw, it go ready on CPAN day - mere coincidence. :)

CPAN Day

First off, let me say I think CPAN Day is a great idea, and I am happy to take part in it!

For CPAN Day, I have contributed App::HTRender, a command line tool to assist development of HTML::Template-based templates. If you are building a website using HTML::Template and your data model is still fluid (or you just want to quickly test different values) you can lay out your data in JSON format and use the ht_render command to feed it to your template without having to change any of your Perl code.

Additionally, Logical Helion has released a new version of Helios, Helios 2.81. This version is largely a bugfix release, but does include a new command for retrieving jobtype information and some improvements to the helios_config_* commands.

Happy CPAN Day everyone!

Type::Tiny Tricks #2: Types Are Objects

When you use code like this:

   package Local::Eg2;
   use Moose;
   use Types::Standard -types;
   
   has foo => (
      is      => "ro",
      isa     => Int,
      coerce  => 1,
   );
   
   __PACKAGE__->meta->make_immutable;

Perhaps you don't think very much about what that bareword Int is actually doing. Well, it's a function that returns a blessed object. This object is used by Moose to check whether values are integers. Yes, Moose uses the object, and you can use it too!

PPI 1.218 has been released - bug fixes, speed optimizations, tests, doc improvements

On request of Neil Bowers i pushed this release back a day, so now on CPAN Day in 2014 the first update of PPI in 3.5 years has been released to CPAN and will be available on a mirror near you soon.

Since the release candidate only minor changes affecting the release process itself have been made.

The change log has a detailed listing and the git repository is even more detailed (it even has tags if you clone it). That said, the summary of the changes is:

  • a number of fixes to how Perl is parsed, notably around the x operator and some case sensitivity
  • many speed optimizations, allowing PPI to parse big files in reasonable time
  • the 1MB limit is now removed
  • many many doc fixes
  • many more tests for previously untested code
  • PPI is now on Github

A brief history of CPAN

My project for CPAN Day has been to pull together a history of CPAN:

  • How it was started, and by whom
  • The other services that make up the CPAN ecosystem
  • The key modules that have helped shape CPAN

In best CPAN tradition, this is the work of dozens of people, who patiently responded to my pestering via email over the last few weeks. Thanks to everyone who helped get it to this point.

Announcing CPAN.io

To celebrate CPAN Day, NEILB and BOOK are proud to announce a new CPAN-related site, specifically targetted towards playing with CPAN (with the underlying goal of improving it).

Please join us in celebrating the first the day of cpan.io!

The site is rather empty now, but we have grand plans for it. Come play the CPAN game with us, fork cpan.io on github and send us patches and feature requests.

Type::Tiny Tricks #1: Quick Intersections

Type::Tiny objects overload the & (bitwise and) operator to build a type constraint intersection. For example:

   package Local::Eg1;
   use Moose;
   use Types::Standard -types;
   
   has foo => (
      is  => "ro",
      isa => ArrayRef[Int] & HashRef[Int],
   );
   
   __PACKAGE__->meta->make_immutable;

Though that example isn't especially useful. Do you remember Venn diagrammes? Intersections are that small overlapping section in the middle. So the value for foo needs to be something that is simultaneously an arrayref and a hashref. (Which no value could satisfy.)

But there are ways intersections can be used more usefully.

The new Test::Builder - "Why?"

Lately there has been a buzz of activity in the Test-More project (Test::More, Test::Simple, Test::Builder). In fact, it is safe to say that very little code has gone untouched in this process. We are currently on the 34th alpha release of the new Test::Builder, and I wanted to take a moment to discuss the things that are happening!

This is the first of several blog posts that will cover the changes to Test::Builder. This one covers the "why".

Why are things changing? The simple answer of course is "Testing". A more helpful answer is this: Test::Builder is the de facto standard when you go to write a test. Just about any testing tool you use will rely on Test::Builder under the hood. The problem though, is that testing your testing tools is still somewhat archaic.

Currently, if you want to test a test library, you have two choices:
Test::Builder::Tester
Test::Tester

For CPAN Day: Show Off Your Web Framework!

While I know many of you have CPAN Day projects, some of you might still be searching. There is a very well known benchmark from TechEmpower which compares web frameworks. It gets plenty of press and generates much interest. Unfortunately, the Perl results look like this:

perl_results.png

We all know the reputation that Perl has to the outside world, and sadly these results would tend to reinforce it. The person or persons who added these apps seems to have long since forgotten about them. At least the Mojolicious app was a port of one of the others and did not exemplify either the style or power of the framework. The others likely share those traits.

But all is not lost! TechEmpower has recently made it much easier to contribute, and I have fixed the deployment and toolchain problems. I have also updated the Mojolicious app. Would you like to improve the submission of your favorite framework or add your own? Read on!

CPAN Day - start your engines!

CPAN Day (August 16th, UTC) is nearly here. Someone asked me what the goals are, if any, for CPAN Day. When BOOK came up with the idea, we both thought it was an opportunity to celebrate CPAN, but also a chance to reflect on how we got here, and to think about how we can keep driving it forward.

I also saw it as an opportunity to bang on my curation drum — give everyone ideas for how they might improve their distributions, or those of others, and in doing so improve the overall quality of CPAN.

CPAN was created by us, for us, so do whatever feels right to you.

If you do something for CPAN Day, please tweet about it with the #cpanday hashtag.

Type::Tiny 1.000000 Released

It's been almost 17 months, and over 160 releases to get there, but Type-Tiny 1.000000 has been released on CPAN Day 2014.

Type-Tiny is a framework for type constraints and coercions. It can be used for isa checks in Moose, Mouse, and Moo attributes, function parameter checking, and so on. It's already used by over a hundred CPAN distributions.

Over the next few days I'll be posting some tips and tricks explaining some Type-Tiny features that you may find useful.

CPAN Day 2014 in Oslo

Oslo Perl Mongers are organizing a CPAN Day event! \o/

Tomorrow (Saturday August 16th 2014), we’ll be hanging out at the Hackeriet (Norwegian for “The Hackery”) hackerspace, helping anyone dropping by with CPAN and Perl issues they may have!

We can help with…

  • Getting your modules published
  • Sign up for PAUSE
  • Answering your Perl quesions, of any difficulty!
  • Telling about Perl and CPAN best practices
  • Show how to create a CPAN distribution
  • Help toubleshooting module deployment and installation issues
  • Offer therapy, constructive criticism or Real Help for anyone struggling with Perl or CPAN
  • Hang out and have fun!

We’ll have Club Mate in the fridge (unless it’s sold out) and even a short presentation about CPAN and Perl module basics, courtesy Arne Sommer.

Feel free to sign up at meetup.com, and drop by! :-D

perlprogramming.org

In addition to perlpolls.com and perlsurveys.com I just found out that the domain perlprogramming.org is also about to expire. As I don't want to pay for these any more I'll let all of these expire.

If you have an idea what to do with any of these domains, please let me know and I'd be glad to transfer the ownership to you instead of letting random people register them after they expire.

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.