By all means, try out $LANG, but also give Perl a real chance (a.k.a.: Good tools)

A lot of things mentioned about Emacs in this short essay (via Reddit) also ring true about Perl to me.

Good tools are investments. Learning Perl to a sufficiently advanced level is not easy. Like any aged tool, Perl has quite a bit of idiosyncrasies and quirks that still exist due to maintaining backward compatibility. But there's not a single working day that I don't benefit from knowing Perl. Learning Perl has also introduced me to regexes (to a level deeper than it would have been if I had learned other languages) and various other technologies.

Good tools give confidence. I certainly feel that whenever it comes to most text manipulation or automation tasks, I can rely on Perl and CPAN.

Good tools are timeless. Sometimes I can't believe that it has been 17 years since I first knew Perl. Other languages come and go, and other tools even more so, but Perl sticks. Virtually all of the Perl scripts that I wrote back then can still run on my current system's Perl. The same cannot be said with some other languages (even shells). Isn't that amazing?

Good tools grow with you. Perl still surprises and amazes me to this day. CPAN delights me constantly.

Give the original article a read. You'll probably enjoy it (and perhaps be intrigued to learn Perl and/or Emacs).

A New CPAN Mirror Is Born

As part of my work on Stratopan, I've setup a spankin' new CPAN mirror located at http://cpan.stratopan.com. It is an "instant mirror", so it should get new releases almost immediately after they ship to PAUSE. It also has everything from BackPAN too.

Other than that, it's not anything special. It's a mid-sized Linode server located in Texas with 8000 gigabytes/month of traffic. I get a warm and fuzzy feeling from hosting a CPAN mirror. It makes me feel like a more useful part of the community.

Feel free to point cpanm or pinto at http://cpan.stratopan.com. We'll see if my hosting bill goes through the roof :)

Importing the LOCKSS lockss-daemon into Eclipse

I haven't found any guidance on developing for LOCKSS with Eclipse, so here are the steps I followed to load the lockss-daemon code into Eclipse after checking it out from the anonymous CVS repository:

  • Create a new project (I named it lockss-daemon).
  • Select Use project folder as root for source and class files to make your life easier in the next step.
  • This will bring up the dialog Java Settings. You will want to use the Link additional source link with parameters like these:
    • Linked folder location: – Use something like LOCKSSDAEMON/src (my folder was C:\cygwin\home\lockss-daemon\src).
    • Folder name: – use org. This helps Eclipse put all of the files in Eclipse's idea of the right location (i.e. starting at the beginning of the package name). (Figuring out this step is where I had the most trouble.)
  • Select your project in Project Explorer, then use Build Path -> Configure Build Path with the External JARs button to get the lockss-daemon JAR files – my JAR files were at C:\cygwin\home\lockss-daemon\lib\*.jar.
  • Use Build Path -> Configure Build Path to remove, then re-add the JRE System Library to restore the correct dependency order (a fix found via http://stackoverflow.com/questions/860187/access-restriction-on-class-due-to-restriction-on-required-library-rt-jar).

Why the perl community is no boy's club

First, the reason for this post: There was this answer in the recent survey:
"None - I refuse to acknowledge the term man hours, you patriarchical pig. But I have many person-hours. And let me tell you..."

You can discuss if this is discriminating feminists or not. It's a matter of perception, if you know the author or not. It seems that there are people who find this offensive. And I also think that it shouldn't be on a perlmonks poll, while in a group of friends it might be funny.

The Partner Programme at the YAPC::Europe 2013

Hi,

We are proud to announce that we will have the full-time three-day Partner Programme for the partners of the conference attendees.

Our idea is that both the attendee and their partner come together to the venue in the morning, then split, and in the evening they meet again at the venue. Partners participating in the Programme pay only for the tickets to museums etc, or food they consume during their day. No additional fees.

More details and a draft schedule have been just published in this week's newsletter. Feel free to let us your thoughts either by e-mailing to mail@yapcrussia.org or leaving a comment below the news.

Random thoughts about agile software development

I'm going freelance next month in a company that my wife and I are starting. Part of what I've been doing is consulting on various issues companies have and part of that is this whole notion of "agility". I fear that the term "agile" is becoming a meaningless buzzword because, while the core principles are sound, companies are just using the word to say "we have no process." It's a fine line between a process so lightweight that you don't even notice it and a process that doesn't exist and it's understandable that some companies will incorporate "agile" into their buzzword bingo without understanding what it really means. This is sad because it not only dilutes the utility of agile, but it creates a perfect straw man for agile detractors.

Notes from a Newbie 14: Edit and Delete Comments

Notes from a Newbie document the creation and deployment of yardbirdfanclub.org with Perl Catalyst on shared hosting. They are intended for a Perl Catalyst Newbie who would like to study the creation and deployment of a simple Perl Catalyst application.

OI::M::Finally({IO::All})

Get it?

(Meant to post this to perlmonks, but the site's submission form is missing the [Add] button right now).

Anyway, as a long time user of File::Slurp who utilizes both idioms below often:

# slurp into a scalar
$content = slurp("file.txt");

# slurp into an array
@lines = slurp("file.txt");

I'm willing to switch to IO::All's:

# slurp into a scalar
io("file.txt") > $content;

But there's no array counterpart:

# slurp into an array
io("file.txt") > @lines;

I've hopelessly tried several variants:

Play Perl is a Startup

Yep.
I'm leaving my daily job at Yandex in 2 months to see how far I can take the concepts behind http://play-perl.org/.

I spent 7 years at Yandex, it's pretty much the only job I ever had.
I never participated in any startups.
I have no idea what I'm doing :)
But I really want to try.

Here are the slides I showed at Moscow.pm meetup today:
(I'm not sure how comprehensible they are without the talk, though.)

What this means for the Play Perl future:

  • Source code stays open (for now; I'm not making any promises, but don't see reasons to close it either.)
  • Service stays free. (I have several ideas about monetization. None of them include ads or require payments for the current functionality. And I promise none of them are evil.)
  • I have a big incentive to take this beyond the Perl community, to the other open source communities, at least. Maybe to non-programmer communities too. I'm planning to do this as soon as possible.

In the meantime, it's been 1.5 months since my last post, so here are some new features Play Perl got:

  • tags!
  • comment likes;
  • reward circle, displaying the number of points you're going to get on quest accomplishment;
  • "quest completed" modal box;
  • lots of frontend optimizations and other minor improvements.

App::Midgen, update notice + some colour

switched output format type from cfile to cpanfile

`midgen -f cpanfile'

thanks for the kick Miyagawa++

nb, if you have written an `.midgenrc' file suggest you either edit it or delete it and start again, opps.

Notes from a Newbie 13: Create, Edit and Delete Blog Entries

Notes from a Newbie document the creation and deployment of yardbirdfanclub.org with Perl Catalyst on shared hosting. They are intended for a Perl Catalyst Newbie who would like to study the creation and deployment of a simple Perl Catalyst application.

Emacs (c)perl-mode for Python-oriented people?

In the middle of reading the surprisingly rather good blog post on a very old topic (hey, didn't know wordpress.com offers HTTPS URLs, nice), I wonder about whether people would think such a mode (or a minor mode for cperl-mode) would be interesting, or not too silly. (BTW why can't I stop doing parentheses?)

The mode's main task is to reduce visual "clutter" for people who has less tolerance for such.

  • Change the appearance of sigiled variables $foo into foo (that is, a space followed by an italicized/emboldened/underlined/differently-visually-marked foo).
  • Conceal or reduce the visibility of semicolons at the end of lines.
  • Reduce the visibility of block-delimiter braces (some challenge here, remember that braces has over 9 uses).

Adding "tags" to Test::Class::Moose

I've been thinking about the idea of adding optional "tags" to Test::Class::Moose, similar in concept to Mark Morgan's Test::Class::Filter::Tags. Here's an example of what that would look like:

sub test_get_profile : Tags(redis network) {
    ... tests go here
}

What could you do with that? Well, the other day our network went down at work. My test suite blocked because all of the tests which required a network would hang. With the above, I could do this:

Test::Class::Moose->new( exclude => 'network' )->runtests;

And have carried on with my work.

Or maybe you have tests that you know could run in parallel:

sub test_some_unit_test : Tags(parallel) {
    ... tests go here
}

What exactly is going on at Perlmonks?

I went back to Perlmonks for the first time in quite some time, and was greeted with by a poll titled "How many man-hours would you estimate you have invested in learning Perl?" - okay, could have been hours, not enough to make a big deal of, I'm trying not to make every interaction on the site about male privilege...aw, dammit:

None - I refuse to acknowledge the term man hours, you patriarchical pig. But I have many person-hours. And let me tell you...

Oh, COME ON.

This is going from microaggression ("man-hours") straight into pure jackassery. Straw feminists are just as much a stereotype as any other. Making jokes that require me to be complicit with a stereotyped view of the world really gets up my nose.

It sends the message that "we here at Perlmonks think this kind of thing is really funny and we don't care what you think. We especially don't care if you're the kind of person we're enjoying making fun of."

App::Midgen, now with cpanfile prereqs

More features

  1. cpanfile output format, prereqs (requires, recommends, on test, on develop)

    midgen -lf cfile

  2. Basic scanning of Dist-Zilla Plugins

here is a sample, with cpanfile and dist-zilla plugins, see wiki for more examples.

EplSite ETL 1.2 Released

EplSite ETL 1.2 Release Notes

Release date: 02 April 2013

Bug Fixes
- Catalog checking can be done against any fields.

Improvements
- Everything is saved in the sqlite database, from the external scripts until
reports, in this way if you backup or migrate your scripts, you only need to
copy the sqlite database EplSite.sqlite located in folder htdocs/eplsite/Storage/
- Better error handling, now there are logs for xref and catalogs.
- Log reports can use runnumber to display data.
- Better layout maintenance.
- Now you can use the field descriptions to insert the data into another table, see
sample 001.
- Better control panel, the most important scripts edition has been improved.

You can download from here:
https://sourceforge.net/projects/eplsiteetl

Enjoy it =)

Another strike against AUTOLOAD

When you're using Redis, you can issue the select index command to use a different database (think "namespace"). By default Redis provides you with 16 different databases numbered 0 to 15 (you can configure it for more). All keys and values will be separate from any other keys and values in other databases. So how do you know which database you're in? As it turns out, Redis doesn't offer a command for directly querying that information.

Hello World

Saved By Pinto

That title may remind you of a certain song by The Fixx.

Last week a new version of CPAN::Meta was shipped to CPAN. Unfortunately, it caused a test to fail in Module::Build. In turn, that set off a whole chain of downstream failures in hundreds of distributions that depend on Module::Build.

So if you were building up a complete application stack last week (like on Stackato or Heroku) and you were pulling the latest dependencies from CPAN, you were hosed. This sort of thing happens all the time, and when it bites you, it will be at the worst possible time.

Pinto also uses Module::Build. But those who were building it with the installer at http://getpinto.stratopan.com were completely insulated from the failure. This is because the installer pulls dependencies from a private repository. Unlike the public CPAN, that repository is stable and only changes when I decide to upgrade or add a dependency.

Fortunately, the problem with CPAN::Meta was short-lived. Dave Golden had released a fixed version only 23 hours later. But I think this perfectly demonstrates why you should lock down your dependencies with a tool like Carton or Pinto.

Perl and Perl Module Administration in the Modern Era

I recently gave a talk on perlbrew, cpanminus, and local::lib at $work. I've uploaded the talk to Speaker Deck

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.