Speaking at QCon London next month

I've been invited to speak at QCon London next month. I'll be giving two keynotes: my infamous Fun With Dead Languages talk plus a one-hour mini-tutorial entitled Instantly Better Presentations. I'll also be offering the full one-day version of that second talk as a tutorial earlier in the same week.

QCon is an incredibly eclectic conference with a strong real-world focus. The presentations in this year's schedule discuss development in C++, Erlang, Groovy, Grails, HTML5, Java, JavaScript, MongoDB , NoSQL, Scala, and Perl (guess who), ranging over a vast range of topics including: agile development, cloud computing, startups, distributed Systems, REST design, mobile computing (iOS and Android), open data, system architecture, test-driven development, general problem-solving techniques, functional reactive programming, hiring skills, the Pi platform, and programming in Latin (guess who, again).

Essay: "Just write the God-damn tests, motherfucker!"

(I originally wrote this in a post to qa@perl.org, and I apologise for the profanity in the title, but I felt it is needed in this case.)

So why am I writing this? I used to feel guilty about not being conscious of the distinction between the various scopes of tests, like unit tests vs. integration tests vs. system tests vs. functional tests etc. when I wrote the tests. I just noticed that I need a test here (as a regression test for a bug, or to TDD (= test-driven develop a new feature, or after implementing a new feature, etc.), and wrote it using Test::More or whatever. However, now I feel that trying to philosophise about the distinction between all those is not so useful for the people who are actually trying to write the tests.

Tests are good, mmkay? Just freaking write them!

chromatic has expressed some sentiments against the so-called "Behaviour Driven Development" (BDD) Domain-specific-languages (DSLs) such as cucumber.

YAPC::Europe 2013. Week minus 27. Current progress

This week's post by Viacheslav Tykhanovskyi:
showmetheco.de/articles/2013/2/yapc-europe-2013-week-minus-27-current-progress.html.

Finding files faster

A little while back I wrote a pair of applications that used Path::Class::Rule to do the file finding. I selected this module because I like the interface for building up rules. I started to run into speed issues as the source directory grew larger and larger. Along comes rjbs's the speed of Perl file finders article and his speed chart backs up my findings that more files equals a marked increase in time.

This is where I found out about Path::Iterator::Rule which was just released by David Golden. It works the same as Path::Class::Rule but returns strings instead of objects, which gives a massive performance boost. Path::Iterator::Rule is a drop in replacement for Path::Class::Rule so updating my programs required very minor changes.

With Path::Class::Rule my application took an average of 66 seconds per run. Now the Path::Iterator::Rule version only takes 5 seconds with the same input. A full minute saved on each run, it feels good.

I am reminded of a quote from Brad Frost's article Performance As Design in which he states "Good performance is good design" and while the article context is web development, I think it applies to any kind of application.

what to know about aligning

Hi
I am a biologist not a bioinformatician, I have two group of sequences (they are nucleotide and in fasta format), each group includes around 40,000 sequences ranging from 100 bp to 12 kb. I want to know how can I align the sequences from a group to the another and find the best pair for each fragment. Can I do it through Perl? if so how can I do that? is there any softwares that can I use?
second Q
how can I find secondary structures of the sequences in each groups? which program should I use?
Thanks
MS

Put a fancy CPU/RAM usage chart in tmux status bar

Prologue

So, once upon a time I had a crazy idea: to put an almost complete resource meter into the tmux status bar. You know, the clock is so boring. Let's add a battery indicator there. And the load numbers. And the memory usage...

Needless to say, this resulted in an unbearable user experience:

a:2.96G c:4.37G f:5.41G i:2.98G l:0.65/1.73/1.41 23:47

Actually, the data is OK, the "gauges" work fine on every Unix I tested them. If only it was a bit fancier...

Puke rainbows!

Then I discovered Battery. And then, Spark. I just couldn't resist myself, so I revamped my messy Perl usage data parser to output this gorgeous ANSI art scrolling chart:

Screenshot

It was tested on Mac OS X 10.8.2, Ubuntu 12.04, Ubuntu 11.10, Debian 6.0.6 and works fine with the default system Perl; there are no external dependencies at all.

Liked it? Go ahead, grab your copy and follow the installation instructions: https://github.com/creaktive/rainbarf

POE::Component::IRC::Plugin::Vim::Tips v0.02 released

Hello Perl bloggers,

I have released my first module: POE::Component::IRC::Plugin::Vim::Tips, a plugin for the IRC client module POE::Component::IRC.

When a user types !vimtip (or !vimtips) in a channel that your bot has joined, my plugin will scrape the first page of tweets from the Vim Tips Twitter feed and reply back with a "random" tip from that list.

Example:

curtis !vimtip
vimbot curtis: ggguG will lower case the entire file (also known as the Jerry Yang treatment). http://is.gd/4xZW

A lesson learned from v0.01: Don't forget to list dependencies in Makefile.PL!

Links:
CPAN
Github

Versioning Developer Releases

I finally stopped to think about how I’m numbering my developer releases for various modules I have floating around.

Two theories

Until recently I’ve always thought:

v0.0.5_1 is the first developer release leading up to v0.0.5

Something (sorry, I can’t remember what exactly) I read recently got me thinking about this and I started to think that maybe I’d got myself tied up into knots.

I started to wonder if the correct interpretation was actually:

v0.0.5_1 is the first developer release AFTER v0.0.5; working towards v0.0.6

I’m sure this is blindingly obvious to some people, but it was something I’d never stopped to properly thing about.

Investigation

After writing a quick script I came up with the following output:

Test::Class::Moose on the CPAN

I have previously written about Test::Class + Moose, but now it's on the CPAN. I've added a few things to the initial version:

  • Add class/method skipping.
  • Rename almost every overrideable method to /^test_/.
  • Add a time reporting class. You can now fetch real, user and system time for each class or test method.
  • Make sure we have hi-res time reporting
  • Move statistics gathering into its own classes
  • Add include/exclude test method filtering
  • Skip a test class if we don't find any test methods
  • Most attributes pushed into Test::Class::Moose::Config
  • Added "randomize" attribute per Udo Oji.

Let me know your thoughts or if there's anything else you think it needs.

YAPC::Europe 2013 in Kiev, week minus 28. Lightning talks

Dear YAPC::Europe attendees and those who is still considering attending it,

First of all, let me inform you that we are looking for volunteers who will lead the Partner programme. I hope that in a few weeks we will be able to announce the programme or its absence.

Then, a couple of days ago, R Geoffrey Avery, YAPC's permanent Lightning Talks organiser, opened submissions of lightning talks. There will be three lightning talk sessions, one at the end of each conference day. The three sessions of 60 minutes will include ten five-minute talks and short announces in-between.

To submit a lightning talk, please use our online submission form.

If you'd like to know more about what lightning talks are, please read the detailed description available on the site.

Just to list a few ideas for talks of that kind, here's a quote:

Pod::Perldoc at 3.19_01

One of the things that brian d foy worked pretty hard on for Perldoc inside of 5.16 was better UTF-8 support. We found that there are a huge number of variables for getting good Unicode support out of the "man" formatting pipeline. perldoc internally uses the "podulators" distribution to turn POD markup into man pages, HTML, XML, etc. But with the "man" formatting, the pipeline of operations looks something like this:

perldoc (a tiny little wrapper around the Pod::Perldoc module) finds the appropriate pod markup (either embedded in a .pm or a .pod), passes it to Pod::Man, takes the output from Pod::Man and then invokes the "nroff" implementation (which is usually groff) and sends it to your pager (less, more, etc) where it's displayed on your screen.

That's a lot of places where UTF-8 can go sideways. And it usually does.

Command history in the perl debugger

I’m always forgetting what pieces I need to make this happen, so I’m writing a note to my future self.

Ubuntu Packages

Install:

  • libncurses-dev
  • libreadline-dev

Perl Packages

Install:

  • Term::ReadLine::Gnu

Save a little time with puppet

Include these somewhere and run a puppet update

class libncurses-dev {
    package { libncurses-dev: ensure => latest }
}

class libreadline-dev {
    package { libreadline-dev: ensure => latest }
}

Save the history to a file

Add this to ~/.perldb

&parse_options("HistFile=$ENV{HOME}/.perldb.hist");

Alien::Base - progress and problems

After a busy Christmas season and being engrossed in my upcoming thesis defense I have found it hard to find too much time to focus on Perl projects. Still Alien::Base has been on my mind, and happily it has been on the minds of others too!

In this report I want to focus first on the high points. Far and away my high point has been that in my apparent absence others have taken up the mantle. I have gotten bug reports and pull requests from preaction, giatorta, amannb, mokko, tobyink and as always productive conversations with David Mertens. It helps in a tough project like this has been to see the excitement of other developers, waiting for me to finish this project.

Several bugs have been fixed, others have been identified. I hope to have another dev release out soon. Further I plan to release a version of Alien::GSL which depends on Alien::Base to CPAN not long after that.

FOSDEM 2013 call for papers

hi all, on behalf of wendy

https://nxadm.wordpress.com/2013/01/25/perlfosdem2013-a-very-late-call-for-papers/


------------------snip-------------------------------------------------------
Dear Perl Mongers,

I have to make this short and simple.
Therefore most of this email is copied from last year's
Call for Speakers.

What? Fosdem, Brussels, 2 & 3 february 2013
https://fosdem.org/2013/

Where? Free University Brussels, Campus Solbosh:
https://fosdem.org/2013/practical/transportation/

Why so late?
Because our dev-room request was denied at first.
They gave it to another programming language community.
Now another community could not fill their dev-room.
We are Perl, so we jumped in and we asked for this.
We got it. Now we have to fill it.

So be quick and send in your presentation proposal.

To:
Claudio Ramirez (nxadm, email: padre.claudio at apt-get.be)
and
Wendy van Dijk (email: nl.pm at wendy.org).

Thank you. Hope to meet you all in Brussels.

paging Andy Orr (PAUSEID:AORR)

Has anybody heard anything from Andy Orr (PAUSEID:AORR) in the last 18 months - He has a CPAN module (PDF::Report) with bugs untouched since 2009 and no cpan uploads since then.

Mailing his cpan mail has had no response, I'm hoping somebody who is still in touch with him could provide an up to date email address where I can reach him to talk about future development of this and the PDF::Report::Table module.

Cheers

YAPC::NA 2013 in Texas, June 3-5.

YAPC::NA 2013 will be held in the "Live Music Capital of the World", Austin, Texas, from June 3rd through June 5th. 

The conference theme is "25 Years of Perl". Come celebrate Perl's silver year with all your favorite members of the Perl community. 

http://www.yapcna.org 

Registration and talk submissions have been switched on. We'll be posting more about this very soon.

Talk to you soon,

YAPC::NA Team

Building Perl 5.16.2: Windows Madness!

I think it bears repeating -- on Windows with Cygwin, edit PATH to remove unfriendly characters like '(' (I'm looking at at you, C:\Windows\Program Files (x86)).

At least for me, this wasn't an obvious problem either...

Economics 101

Take a look at this graph of alternate browser adoption:

Firefox adoption dropped 20% in a year and a half on that chart. What does that tell you about Firefox? Nothing. That's the problem.

Profiling Dist::Zilla

Dist::Zilla is slooooowww!

This is in part because it uses Moose. In part because it has many features. In part because it uses App::Cmd that has a major design issue (it loads all command plugins on every run).

But this is also because most plugins are written without care for their compile time and run time cost especially when they are loaded but not used. For example the BeforeRelease plugins when you just run dzil test.

Despites this I'm using it every day at work (because it is powerful), but with much pain.

So here are some tips on how to contribute to improve that situation.

A funny thing happened on the way to the p5-mop...

So, I mentioned in my recent talk that the p5-mop project is currently stalled but did not really expand on that topic much. In this blog post, I'm going to explain what has happened over the past year or so with the project, discuss some issues we ran into while trying to implement the p5-mop, and lay out why I think we need to do some work in directions other than the p5-mop for a while in order to get back the p5-mop back on track.

First let me start out saying that p5-mop is not dead, and that I would very much still like to finish implementing the "on CPAN" version of it. I believe Jesse "doy" Luehrs, my co-conspirator, feels this way as well. My outlook on taking that "on CPAN" version and merging it into the p5 core is currently somewhat less optimistic for reasons I will explain.

The Current Problems

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.