I’m happy to announce that Rimm-Kaufman Group (RKG) has...



I’m happy to announce that Rimm-Kaufman Group (RKG) has decided to sponsor YAPC::NA 2012.

RKG is a full-service digital marketing agency that combines talented and creative marketing analysts with unmatched proprietary technological capabilities to create the industry’s most efficient and effective data-driven online marketing solutions. We drive business to our clients by maximizing a full range of opportunities including Pay-Per-Click, SEO, Social Media Advertising, Comparison Shopping Management, Display Advertising and Multichannel Attribution Management Services. RKG was founded in 2003 and works with organizations ranging in size from young startups to established Fortune 500 companies in sectors including retail, travel and finance.

[From the YAPC::NA Blog.]

Scalar-only Perl

Now that Perl's builtin functions can directly operate on hashrefs and arrayrefs (I'm already starting to dread having to write push @{$foo->{bar}} instead of just push $foo->{bar}, but I'll be stuck with 5.10 for at least a couple more years), it chuckles me a bit imagining a future where beginners only use and know about scalars, and not arrays/hashes. Where they just need to memorize $ as the variable prefix. And where % and @ are nowhere to be found in baby Perl.

Among the issues with this would include the many special variables like @_, @INC and %INC, %ENV, %SIG and so on. We can provide some abstraction like self or MooseX::Declare for @_. With Moose et al, we already don't need to muck with @ISA directly.

Another would be list assignment, but I don't think beginners use it much.

Wouldn't it be cute? Albeit a bit pointless maybe. I can do away with context in Perl, but for now I like being able to have $thing, @thing, and %thing at the same time. Or do I?

Auto(Split|Loader) in a modern Perl world

As a few of my previous posts have implied, I am attempting to reinvigorate the Zoidberg Perl shell. Much of the work of getting it back to a functional state has already been done at my GitHub repo. I have a bigger post coming on why this is cool and even another with some examples, but for now I have a question:

Is an AutoSplit/AutoLoader mechanism helpful on modern hardware? I mean Moose/MOP (and many other projects) are huge and doesn’t use it. In fact it seems that very few modules depend on it.

Now, I understand that AutoLoader has some cool uses for causing subs to spring into existance. In the context of Zoidberg, though, I only care about its use to defer loading infrequently used subs.

To test some things, I created a branch in which I naively removed these bits, and lo and behold, with only one missing my (see AutoLoader Considered Harmful), the tests all pass and a quick run seems fine.

So I fairly call the question: should I leave AutoLoader in, or pull it?

exec's portability

Pop quiz! What does this perl 5 program prints when executed with no arguments?

All Talks Welcome

I’ve apparently been too effective in asking for the talks we want for our primary two tracks, or not effective enough at explaining that we have 5 total tracks and that you can submit any kind of talk you want for YAPC::NA 2012. I say this because Sawyer X posted a comment indicating he didn’t think his talks would be welcome. I apologize that I gave that impression to anyone.

For the record, here are the tracks at YAPC::NA 2012:

  1. Perl in the Wild - Real world Perl applications.
  2. Perl 101 - The stuff everybody needs to know to be a good Perl programmer.
  3. Anything Goes #1 - Talk about your favorite module, framework, or what halve you.
  4. Anything Goes #2 - Same as Anything Goes #1.
  5. Mini Workshops - 1 or 2 hour long hands-on tutorials. 

We’re still looking for sessions to fill all of those areas, although we could definitely use some 1-hour long mini workshops. 

[From the YAPC::NA Blog.]

Reducing spam comments to your blogs.perl.org blog

Since I’ve never used MT before I signed up to blogs.perl.org, it’s only recently that I found that MT does have some spam settings, which unfortunately are not turned on or default to the most conservative value. Along with other settings, you can reduce the number of spam comments being posted/notified to you.

  1. You can increase spam detection aggressiveness (Preferences → Spam). By default this is set to 0 which allows many spams to pass through. I set this now to 5 which seems to be okay (so far only 2 spams after a couple of days).

  2. You can disallow anonymous comments (Preferences → Comments → Setup Registration) or at least require email verification. By default anonymous comments are turned on and email verification is not required.

  3. You can use CAPTCHA! (Preferences → Comments). By default this is off, and unfortunately when I tried to turn it on (either using MT’s own CAPTCHA or reCaptcha), no image is displayed and yet all comments got rejected with the message “Text entered is not correct”. I guess this is currently a bug.

Using App::p Command Line Magic to Parse Vimperator History

I noticed today that my firefox has been really slow lately. I use a firefox plugin named vimperator which provides vim-like keybindings for firefox. I have it configured it to store 5000 command history entries, which is considerably more than the default (500). It has always been in the back of my mind that this might come back to bite me one day. So today I decided to check how many entries have so far been saved in the history file. I easily found that the history is stored in a json file located at ~/.vimperator/info/default/history-command. Running wc (word count) wouldn't help because all the data is stored on one line. I noticed that the file simply contains a serialized json array. To determine the size of this array, I used App::p and whipped up this simple one-liner:

    p 'p @{jl r "history-command"} + 0'

Test::NoWarnings 1.04 - Immediate warnings with :early pragma

http://svn.ali.as/cpan/releases/Test-NoWarnings-1.04.tar.gz

One of the common gotchas with Test::NoWarnings is that the warnings are collected up and displayed in one go at the end of the script.

While this is strictly speaking the correct time to show them and has the least likelihood to result in a collision with some other test module resulting in an explosion, it makes debugging test scripts much more difficult.

Since I took over Test::NoWarnings a number of people have asked me to “fix” this problem.

After much thought, I’ve decided to leave Test::NoWarnings default behaviour the way it is and show everything at the end.

Instead I’ve added a specific debugging aid in the form of an :early pragma.

use Test::NoWarnings 1.04 ':early';

The :early pragma explicitly turns on emitting warnings at the time they occur instead of gathering them until the end.

Last Call For Presenters

The talk submission process for YAPC::NA 2012 closes on March 15th. After that time we’ll finish building out the schedule with the talks that have been submitted. So if you’d like your talk considered, please submit it today.

[From the YAPC::NA Blog.]

GitHub-friendly README files with ExtUtils::MakeMaker and Module::Build

GitHub is a great place to host open-source projects and expose them to a wide community of developers, so it's not surprising that more and more Perl modules are making it their home.

One of the features of GitHub is that it checks if a repository has a README file in its root directory, and displays it on the home page of the repository. This makes the README file a good place to introduce your project to the public.

GitHub also understands a number of markup languages, such as Markdown and Textile, and if the README file is in one of these formats, it will be transformed into nicely formatted HTML. One of the supported formats is POD, which means that the standard documentation of a Perl module can be used as its README file and serve as the repository's home page (much like on CPAN).

How to Parse HTML

This is the first of a series of posts that will detail a Marpa-based "Ruby Slippers" approach to parsing liberal and defective HTML. As an example, let's look at a few lines taken more or less at random from the middle of the perl.org landing page. That page is exactly 400 lines long. Here is line 200 and some lines lines to either side of it.


</td>
<td>
<div class="module">
<a href="http://www.perlfoundation.org/">
<img alt=""
    src="http://mc-cdn.pimg.net/images/icons/onion.vee5cb98.png"
    width="45" height="45" />
</a>

<h4>
<a href="http://www.perlfoundation.org/">The Perl Foundation</a>
</h4>
<p>
The Perl Foundation is dedicated to the advancement
of the Perl programming language through open discussion,
collaboration, design, and code.

For readability, I've rearranged the whitespace, but otherwise the above is untouched. My more-or-less-random extract is part of a table, and captures the end tag of one cell and the beginning of another.

No YAPC::Cuba

A very tiny handful of you may know that I was trying to push YAPC::Cuba. Later I expanded the idea to be a more general open source conference in Cuba as that would likely be a better fit. Sadly, it appears that it's not to be (or at least, not to be through me). There was a fair amount of excitement at the idea from those I spoke with. Quite a few said they wanted to be involved and would contribute time and effort to it, but as is often the case with volunteers, time is at a premium and dedicating volunteer time to a long-shot opportunity is understandably low on their priority list.

And of those who I spoke with who said they wouldn't attend? They were invariably not US citizens. They expressed concern about repercussions from the US government for attending a conference they were legally allowed to attend.

Isn't that sad? People are afraid of the US and it kills the chance to have an interesting conference at a time when it seems perfect for Cuba and the world to be talking.

Advanced Modulinos

brian d foy will be giving a talk at YAPC::NA 2012 described as:

A modulino is a module that also can act like a script. This talk explores how a typical command-line invocation of the script, with switches and standard input and output, can connect with a module’s interface without sacrificing flexibility.

[From the YAPC::NA Blog.]

Thanks to krimdomu and Rafael Kitover

Net::SSH2 (ssh client library based off libssh2) now has agent support, something that i've been wanting for a while and had just sat down to write. Very happy it had already been done! Thanks fellas!

DBD::SQLite 1.35 released

DBD::SQLite 1.35 has been released to the CPAN. If your mirror has not updated yet, you can install it via pip or cpanm from the following URL.

http://svn.ali.as/cpan/releases/DBD-SQLite-1.35.tar.gz

Normally the release schedule of DBD::SQLite is tied to that of SQLite update recommendations, as this module is used in an enormous number of places and having relatively large gaps between releases is considered an advantage for downstream distributions and corporate users in particular that have very large testing burdens for each release.

This is the first DBD::SQLite in a long time that was not done as the result of an update recommendation from the SQLite maintainers.

In addition to a number of Perl level bug fixes, this release gains the SQLite 3.7.8 and 3.7.9 updates, the former of which contains a new merge sort for indexing resulting in an order of magnitude performance improvement to indexing and performance improvements to any queries that do index lookups.

Looking for Ilja Tabachnik

I'm looking for Ilja Tabachnik.

I want to fix his only module on CPAN (POSIX::RT::MQ), but his public email address no longer exists. If I can not reach him I will ask the PAUSE admins for permission to take over this module.

Migrating an Enterprise across 14 Perl Releases

Steffen Mueller will give a talk at YAPC::NA 2012 described as:

Booking.com is the world’s leading online travel agent for hotel reservations. It is a wildly successful enterprise that was built with Perl at its heart. The company’s IT team runs millions of lines of Perl code on thousands of servers.

In this presentation, we will outline how we migrate(d) one of the world’s biggest users of Perl across 14 stable releases of Perl from 5.8.5 to 5.14.2, why we did that, what bit us, and what we learned from it.

[From the YAPC::NA Blog.]

Whither perlsphere.net?

Hi Folks

Does anyone know why perlsphere.net is off the air? Is it just because I'm in Melbourne (Aust)? Is it temporary?

TIA.

Falling in love with Pod::Weaver

I've been working on Redis::Client for a while now. It's not ready for production use yet, and there's a lot of work yet to be done, but it's much better than anything else on CPAN right now for talking to Redis.

I hate boilerplate with a burning passion, and I will often go to extreme lengths to avoid typing it. (I typed it once already, dammit! Leave me alone!)

After having a great time learning to mess with Dist::Zilla, I decided to give another of Ricardo's projects, Pod::Weaver a try. Here's the cool stuff I was able to do after not a lot of work.

Marpa and the Ruby Slippers

In a previous post, I listed the four ideas that are essential to Marpa. This post delves into one of them: Ruby Slippers parsing. In Ruby Slippers parsing, the parser imagines ("wishes") that the language it is parsing is easier to parse than it actually is. The part of the application that handles input (the "lexer") manipulates the input to make the parser's "wishes" come true.

As an example, take liberal HTML. "Liberal HTML" is HTML as it is found "in the wild", with missing and spurious tags. I've written a Marpa-powered liberal HTML parser which uses the Ruby Slippers as its primary technique. The grammar behind Marpa::HTML assumes a fantasy world, one where no element ever occurs out of place, and where all HTML elements have both start and end tags.

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.