As some of you may know, I worked on a partial rewrite of Method::Signatures last year, mainly to add Moose types to the sigs, but also to do some tweaks here and there, and to use it as a base for Method::Signatures::Modifiers (included with MS), which can replace MooseX::Method::Signatures inside MooseX::Declare. This latter reason was the primary goal for me, and I’ve gleefully been using MS, and MSM, in practically all the code I’ve written since. I’ve also ported over a rather large codebase (although admittedly not much of it was using MXD). We’re almost at the eleven month mark since our first release of the new MS, so I thought it might be interesting to check in with how things are doing.
The T-Shirts have finally arrived. Weirdly, some of them
are longsleeved, which we didn't order. But there's no
time to send them back. Maybe you can wear them in winter.
We chose to go for two colors for attendees this year, blue and grey.
I hope you like them. The bright yellow ones are for the organizers,
so they stick out.
The DC PM Podcast has changed hosts. This was due to multiple reasons, but the podcast will reside at the new address for the foreseeable future. The new location is
http://zak.freeshell.org/dcpm/.
I saw a post out in the Blogosphere today about getting weather info from NOAA (The United States National Weather Service). Oh! the horrors of using XML::LibXML or XML::DOM or those other hairy XML modules to get at the data.
The blogger didn't seem to keen on my quick and dirty Mojolicious solution:
I'm returning to Europe next month, and my first stop is in beautiful Lausanne.
I've been visiting that lovely city for several years now for private classes, but
for the first time we have been able to arrange some public training events as well.
We'll be offering the following four classes, with the first three open to the
general public. The fourth is only available to academics of SIB and CUSO
(and is already almost full):
As these are the first public classes we've been able to run in Romandy, I hope that many local Perl users will finally have the opportunity to come along. If you'd like to attend any of these, we'd love to see you there.
You can sign up on the SIB website.
(This post is just a lazy "proof-of-concept" for articles that review modules, but not focusing on comparing similar/competing modules for a task, but on listing various modules surrounding a theme or task.)
So far, this is a short list. You'd guess correctly that more prominent languages like English would have far more tools for it.
Converting number to/from verbage. There's Lingua::ID::Nums2Words for converting number to verbage and Lingua::ID::Words2Nums for converting verbage to number. I've seen far more widespread application for the former task (e.g. 45000 to "empat puluh lima ribu") compared to the latter. Where the former is usually seen in applications that print receipts or cheques, the latter I've only seen used in a script for practising the Indonesian language. Side note: These two modules are actually my first CPAN modules ever, written 13 years ago!
There are two opposing ways to go with any process. Your process can be completely external to the actual distribution so that nothing in the distribution is set up to support the process or its automation.
Or, you can create a process and make your distribution match that.
You choose the one that works for you. Don't jump into something without thinking about the long term consequences. Think about it for the next week, no matter what you are doing, whether at work or during a hobby or whatever you do. What's deciding how you do something?
While I have been on vacation, I have found a little time to add some polish to Galileo, my recently released CMS. Recent additions include a utility for writing a mostly generic configuration file and administrative popups which explain how to create new pages or add new users. The most important thing I have added though is some more setup-time documentation! Hopefully people will now find it even easier to get a Galileo-based CMS up and running.
In writing the documentation, however, I was faced with a question that I do not know the answer to: do any other plack-based or otherwise Mojolicious compatible Perl webservers (i.e. plackup, starman, twiggy etc) support websockets? While in principle a Mojolicious app can run under all of these, Galileo depends heavily on websockets, especially for content editing.
If any of you know, please comment.
I have more ideas for improvements to Galileo, but they will take a little more work than I want to put in here on vacation. In the meantime it is still very functional, go take a peak. :-)
To catch common memory errors you simply have to use the new clang -faddress-sanitizer, along these instructions in perlhacktips.pod or use valgrind.
But to detect race conditions tsan is another gold-mine from google's moscow lab. This is the old valgrind based version:
cd ~/bin;wget http://build.chromium.org/p/client.tsan/binaries/tsan-r4356-amd64-linux-self-contained.sh;chmod +x tsan-r4356-amd64-linux-self-contained.sh;cd -
After hard work and many trade-offs, we have finished the schedule for this years YAPC::Europe. Find the three days on the YAPC::Europe website (iCal export).
Unfortunately it is likely that there still are talk conflicts where you would like to attend two or more talks at the same time. We are recording some of the tracks, so hopefully you can watch the talks you missed after the event.
First, I edit Changes and dist.ini. Some people automate filling their Changes entry from 'git log', I find this inappropriate since Changes are meant for users, not developers. I also still bump version number manually (though only in one place, dist.ini). Perhaps someday I'll automate it; my version numbering scheme is mostly a boring 0.01-increments anyway.
This modification to two files will be in the commit message that marks the release.
Then I "push the one-click release process button", by running a simple Perl script, without any arguments, in the dist's top-level directory. Thanks to Dist::Zilla, the script is fairly simple. It just needs to:
(cross-posted from jobs@london.pm.org)
------------------------------------------------------------
Hi guys and girls,
We're looking for a Perl developer with 2+ years of experience programming
professionally to join our engineering team in central London, primarily to
work on the Nestoria property search engine (http://www.nestoria.com)
Nestoria is a great product to work on. As a vertical search engine we work
hard to solve many of the same problems as a larger search company:
Reliably and quickly processing millions of listings
Even more quickly searching those listings at query time
Tracking user behaviour and always improving the user experience
Internationalization - we work in eight countries with six languages
Geocoding, Natural Language Processing, Image Processing, Historical, House Price Aggregation, Mobile Web...
We are looking for somebody who has:
2+ years' experience as a professional Perl programmer
Strong knowledge of Perl best practices and modern Perl development practices
Excellent technical communication skills
A desire to coach, mentor and share your experience with junior team members
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles
Spoiler alert: the answer is 1 or true
Before delving back in the next planned blog post of another important nuts-and-bolts Devel::Trepan topic — position and status information — I'd like to take a step back and talk a little bit philosophical like I did in the first blog.
In that blog, I wrote something a bit contradictory. I wrote that I wrote Devel::Trepan to follow gdb. But at the end of the blog I wrote that I wanted it to be more of a platform for (cough, cough) research.
On the evening of the first day of the conference, we will hold the Social Event
at the Depot 1899 in the lovely Sachsenhausen part of Frankfurt.
Here you will be able to wind down from a day of talks with a buffet.
We arranged a bus transfer from the University to Sachsenhausen. As Sachsenhausen is
close to the city centre, you may want to finish the day by taking a walk
through Sachsenhausen back to your hotel or by taking the bus transfer
or a tram back to the university.
Someone on IRC asked me for an example of how to parse schema.org markup using my HTML::HTML5::Microdata::Parser module. So here one is. It pulls the microdata from the page, and queries it using SPARQL.
Marpa::R2,
the latest version of
Marpa,
has some significant speedups.
Enough so, that it seems appropriate to revisit an
old benchmark.
(For those new to this blog
Marpa is a new parser with a decades-long heritage.
Marpa parses anything you can write in BNF and,
if your grammar is in one of the classes currently in practical use,
parses it in linear time.)
The benchmark I'll revisit
compared Marpa to Perl regexes,
testing the speed with which each could find balanced sets
of parentheses in a string of parentheses,
on a first longest match basis.
It's an interesting test, because it has easy cases
and hard cases,
and because the dividing line between good applications
for Marpa and good applications for regexes is
somewhere between the two sets of cases.
In the "hard cases",
the matches come toward the end.
On these, Perl regexes go quadratic (O(n2)),
while Marpa stays linear.
When Perl regexes become unuseable depends on your hardware
and your patience, but there does come such a point.
I've always been fond of origami, and in some periods I also had time to fold some as a hobby. Alas, this is not the case any more... most of the times.
I'm also proud to produce my greeting cards for birthdays and occasions, when I remember to actually make one (which happens seldom... but happens). Some time ago I stumbled upon a neat design for an origami envelope - although I don't remember where I saw it, I've found a couple of web sites that include it (e.g. here). So... two of "my" things coming together...
Then I'm fond of Perl, of course. So why not kicking it in and use it to add an image to the back of the envelope... automatically?