The Essential Perl Hacker's Toolkit
Stephen Scaffidi will give a talk at YAPC::NA 2012 described as:
Stephen Scaffidi will give a talk at YAPC::NA 2012 described as:
Today on StackOverflow, an old thread popped up that prompted me to answer. That answer became a slightly longer compendium of recent developments in Perl and Perl-for-web.
I will copy the text here, but I am asking you to vote it up so that it will show for future viewers. So that I will not be getting undue points, I have made it community wiki (also means you can amend if you want).
Vote here: http://stackoverflow.com/a/8828209/468327
== Post Content ==
This is an old question, but I thought I should update the readers. I am happy to report that in my opinion Perl is more viable for web development than ever! Along with old friends Catalyst and (recently revamped) Mason, there are some great new entries Mojolicious (or visit mojolicio.us) and Dancer. I’m sure there are others too.
Perhaps the biggest improvement is PSGI/Plack (or visit http://plackperl.org/).
very often, when I see a logo drawn by somebody else, I highly appreciate his or her work. Many logos are simple but very easy to remember and recognize. Graphics is not my business. Maybe I just made more than 1000 graphical mistakes. However, my father-in-law when he was some 80 years old always used to say 'I am young and still can learn'. Here is my first graphical try (click to enlarge):
Improved version:
I hope it is not too bad. Otherwise I will have to wait until I reach a reasonable age :-)
When I entered our rooms in Paris after a day on the boulevards, I found C. Auguste Dupin at his desk contemplating a scrap of paper. "A problem?" I asked.
"A death. And a rather gruesome one, n'est-ce pas?" he replied, handing me the paper. On it I saw:
$ perl -e '%h = map { "-$_" => 1 } qw{ foo bar };'
Not enough arguments for map at -e line 1, near "} qw{ foo bar }"
syntax error at -e line 1, near "} qw{ foo bar }"
Execution of -e aborted due to compilation errors.
Well, a map takes either a block or an expression followed by a comma, and either must be followed by a list. The block was there, and so was the list. Clearly a neophite had been playing with bleadperl, and paid the price. With a rueful shake of my head, I silently passed the paper back to the detective.
"No, this was a production release of Perl, mon ami."
"But how --" I expostulated.
Booking is now a YAPC::NA 2012 sponsor!
Booking.com is part of Priceline.com and is World’s #1 Online Hotel Reservations Company, offering over 200,000 hotels worldwide.
Due to the growth of our IT department we are now hiring Perl devs!
We use Perl, Apache, mod_perl, MySQL, Memcache, Mason, JavaScript, Git, Linux & more!
Our software development basis is SCRUM.
If you want to work in an international, result driven, fun & dynamic environment, join our team in Amsterdam, the Netherlands!
[From the YAPC::NA Blog.]
Some time ago I complained that some modules that had a version ended doing it. The problem? I use a lot the 'r' command in the CPAN client to check for outdated modules. Now, I get a lot of failures that are not really failures:
Package namespace installed latest in CPAN file HTML::Mason::Apache::Request undef 0 DROLSKY/HTML-Mason-1.47.tar.gz JSON::PP::Boolean undef 2.27200 MAKAMAKA/JSON-PP-2.27200.tar.gz JSON::XS::Boolean undef 2.32 MLEHMANN/JSON-XS-2.32.tar.gz JSON::backportPP::Boolean undef 2.27200 MAKAMAKA/JSON-2.53.tar.gz Net::Stomp::Frame undef 0 JTANG/Net-Stomp-0.44.tar.gz SVN::Core .. 1.6.12 MSCHWERN/Alien-SVN-v1.6.12.1.tar. Text::MicroTemplate::EncodedString undef 0.18 KAZUHO/Text-MicroTemplate-0.18.tar.gzSo, what are my versions for these modules?
Read more about App::TimeTracker 2.016 and how Test::MockTime can help you testing stuff that depends on time (an inherent fluid "thing" that's rather annoying test) in the latest App::TimeTracker blog post
If you put your Perl code on Git Hub, I'd like to encourage you to use a a feature that isn't (at all) intuitive: tags.
Basic tags in git are a human friendly label that point to a certain commit. Basic tags don't have a git object associated with them so they're mostly for use on your local repository.
It is also possible to create "annotated tags" which are first class git objects and point to a specific commit (as the top of a tree of commits.) Because annotated git tags are first class objects, it is possible to share them across repositories. It is these tags that I would encourage you to make if you use Git Hub.
Michael Peters will be giving a talk at YAPC::NA 2012 described as:
Security is important in any programming environment but programming for the web has some unique possibilities and hazards. Most web programmers have little to no training in security and lots of web development is done by people who don’t wear a full-time developer hat. Add to this the fact that bad security on a web project can have very public, very embarassing, and sometimes legal consequences.
This talk will walk through the basics of web security without focussing too much on the particular tools that you choose. The concepts are universal, although most examples will be in Perl. We’ll also look at various attack vectors (SQL Injection, XSS, CSRF, and more) and see how you can avoid them. Whether you’re an experienced web developer (we all need reminding) or just starting out, this talk can help avoid being the next easy harvest of The Bad Guys.
[From the YAPC::NA Blog.]
Hi Folks
I've started work on GraphViz2::Marpa, which will use Marpa::XS to parse GraphViz-style 'dot' files.
This is mainly to exercise my Marpa skills. However, I'm hopeful the result might/will lead to an on-line editor for dot files, with 2 panels, a dot editor in one and a result of the server rendering the output from dot (or whatever) in the other, all in Perl. We'll see.
For the past year or so, I've been following the posts on Marpa with interest, but I never got around to writing anything with it, because honestly, the docs seemed a little bit opaque and incomplete to me.
Then, the other day, I saw Jeffrey's post about lexing with Marpa and I took it as a challenge. You see, I've never written a lexer. I've written grammars using "lexer-free" parser builders like Parse::RecDescent and [Regexp::Grammars](https://metacpan.org/module/Regexp::Grammars], and hand-written recursive-descent parsers with the help of Parser::MGC, but when it came to writing anything that required a lexer, I was paralyzed. It seemed to me that lexing was frequently ambiguous, and dealing with that ambiguity was a black art that I couldn't understand.
Happy New Year to all. Last year had its ups and downs, so here's hoping that 2012 sees a much more settled year :)
2011 ended on a rather sour note, with our previous hosting company, Hetzner, causing us no small amount of stress and infuriation last year. I could recount all the problems, but suffice to say I would never recommend them to anyone ever again.
John Napiorkowski will be giving a talk at YAPC::NA 2012 described as:
In Q4 2011 I taught an eight session class about Modern Perl, which was primarily aimed at people that are new to Perl but wanted to learn.
This is a presentation about what I learned from my students during that class. I will review what they loved as well as what they found difficult. The goal of my presentation will be to help those who want to teach Perl for fun and advocacy learn from my experience. Additionally I think that the community can really benefit from understanding what is on the minds of people new to Perl.
[From the YAPC::NA Blog.]
This week I became co-maintainer of a second module: Test::File. I now have the privelege of being co-maintainer on modules by two of our most prolific Perl authors (i.e. schwern and brian d foy). And, as you may have gathered from my blogs thus far, I’m certainly no one special. What did I do to receive such honors?
Nothing, really.
The Hamburg perlmongers will be doing a Mojolicious workshop in Hamburg on Sathurday, 28th of January, 10:00 am.
No prior knowledge is necessary, Marcos Rebelo will give an introduction. And later we will hack in small groups on concrete projects.
What other language comes with a service like CPAN Testers?
I recently uploaded version 0.02 of Module::UseFrom and little did I know, but it had an odd bug. As hopefully you all know by now, since Perl 5.14 many functions that take hashes or arrays as arguments can now take references as well. This often makes for cleaner code, but I don’t use it (intentionally) on CPAN modules so that they are backwards compatible. However when you write keys $export but meant to write keys %$export and it works you never notice, the tests all pass for me. Release.
On most languages many users would attempt to install and would fail before a few would file bug reports. With CPAN testers however, an army of dedicated volunteers are out there keeping my back. So thanks guys! Bug caught, face saved, everyone wins.
Thank you CPAN Testers!!
Joel Berger will give a talk at YAPC::NA 2012 described as:
I am no expert in XS, nor am I am expert in C, but events conspired to force me to learn. What I found is that while XS can be used as a language all its own, it can also look and feel very much like C.
In this talk I will present a minimal subset of XS needed to get started. I will present some “easy” idioms and rules-of-thumb to keep XS from becoming overwhelming. Best of all, its still real XS, so you can add all the full-power XS you want later!
If you would like to learn enough to start a small XS project, come see this talk.
[From the YAPC::NA Blog.]
Physical Computing, Internet of Things it does not really matter what you call it. We are talking about controlling things. Maybe you just want a text message when your doorbell rings or maybe you want to print in 3D straight from Perl using a Makerbot. Maybe you just want more control over your Christmas lights, CheerLights. Maybe there are dirty words you want your TV to just mute.
Arduino, PWM, servo motors, stepper motors, wii controllers, the list goes on and on. Have you ever wondered what it all means and how to connect them all?
Many of you know I am working on getting the Perl community interested in the Internet of Things and in getting CPAN stuffed full of Internet of Things code. To do that I need more people interested and enable to hack in the Internet of Things space.
I know we can make Perl a choice language for scripting the physical world together.
With the latest release of Test::Class::Most, I added the is_abstract feature. With this, you can declare a test class like this:
package TestsFor::TV::Episode::Broadcast;
use Test::Class::Most
parent => 'TestsFor::TV::Episode',
is_abstract => 1;
is_abstract is a non-inherited property of a test class which says "I'm abstract" (no surprise there) and you can check it with:
Test::Class::Most->is_abstract($some_test_class);
The reason for that is simple. Imagine you have a TV::Episode class, but it's an abstract base class which should never be instantiated. You actually have a TV::Episode::Broadcast and TV::Episode::OnDemand classes which are the concrete implementations. You can make tests work in your test classes very cleanly with this.
To those who have noted that Marpa::XS does not come with a lexer, I'd respond that, in a very real sense it does -- Perl. Perl5 is a powerful lexical analyzer.
If you're trying to figure out how to write your first Marpa parser, I'd recommend a close look at Wolfgang Kinkeldei's recent posting about his Marpa-powered CSS parser. Wolfgang lays his parser out in a very elegant fashion, and I find his code makes an excellent template.
Especially nice-looking is Wolfgang's lexer. Wolfgang follows one of the two main strategies for lexical analysis in Perl: he consumes the input using substitution (s/ ... / ... /
) commands.
The other strategy is to use the Perl regex search position to track the progress of the lexical analysis. In the search-position strategy, your cases consist of a lot of match commands using the
\G
anchor
and the
gc
modifier:
m/\G ... /gc
.
An excellent tutorial on this
kind of lexing,
albeit in a non-Marpa context,
can be found in
Mark Jason Dominus's book,
Higher Order Perlblogs.perl.org is a common blogging platform for the Perl community. Written in Perl with a graphic design donated by Six Apart, Ltd.