Move over PRS: Interactive classrooms with Perl

A. Sinan Unur will give a talk at YAPC::NA 2012 described as: 

Personal response systems (PRS) are small, dedicated pieces of hardware with a bunch of buttons on them. They transmit key presses to a dedicated receiver.

PRS are used in large classrooms to track and measure student attendance and participation, and to record responses to questions interspersed in a lecture. The software that comes with these systems is usually closed source, not-extensible, and generally lame.

Twilio provides a service that will contact a web application at a designated URL in response to text messages. Cell phones with messaging are almost ubiquitous on college campuses these days. Using mobile phones students already have along with open source software would alleviate a lot of the headaches teachers go through when implementing proprietary solutions.

I am putting together such a system using the Perl web application framework Dancer. The system will include a web interface for the lecturer to manage questions, visualize responses etc, and I hope it will demonstrate the superiority of such a system to a combination of clunky proprietary hardware and software.

[From the YAPC::NA Blog.]

GCL Plans

DISCLAIMER: this text is lengthy - if yor not interested in GUI programming or API design, you should stop reading now.

Miscellany


I was thinking about writing a blog post on TDD, but then I discovered that chromatic had beaten me to it.  Damn that chromatic for saying everything I wanted to say before I had a chance to say it!  But, seriously: go read that if you haven’t already.  Anything I might add to it would be mostly redundant.  Although I do have a post on the other blog where I discuss TDD in the context of techno-dogma and our fear of it.  You might find it interesting.

Also, big thanks to Gabor for including last week’s blog post in the Perl Weekly this past week.  If you haven’t yet signed up for PW, you should do so now!  It’s invaluable.

Parsing Graphviz's dot files with Perl and Marpa

Hi Folks

A few days ago I blogged about a module under development, GraphViz2::Marpa.

Although it's not ready for uploading to CPAN, I have generated a demo page.

Refactoring Perl code

Gabor Szabo will be giving a talk at YAPC::NA 2012 described as:

Code refactoring is “disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior”. It is needed to ensure your code remains readable while growing in size and scope.

It is needed if you have some old code base that needs improvement and after every period of intense development when you “did not have the time to properly design your code”.

There are several patterns in refactoring, some of them you might already practice without knowing the name.

The most obvious is when you use a variable $x and suddenly you realize it could have a more descriptive name.

If you change all the occurances of $x to this better name, without changing anything else in the code, that’s already refactoring.

We will see several patterns for refactoring Perl code. We see examples doing them manually and we’ll try to automate them as well.

[From the YAPC::NA Blog.]

London.pm technical meeting 26th January 2012

London Perl Mongers organises technical meetings every two months. The technical meetings are a chance to find out what has been going on in the Perl community, what techniques people are using and how Perl integrates with other software.

The next technical meeting will be on the 26th January 2012 from 7pm to 9pm (you may arrive earlier, please sign in at the reception). You have to sign up to attend, see below.

It will be hosted by NET-A-PORTER.COM and held at their offices in Westfield London Shopping Centre. Many thanks to Kristian Flint, NET-A-PORTER.COM and everyone involved for allowing us to use this wonderful venue.

Talks
Gianni Ceccarelli - "Dispatch tables" inside regexes and nasty tricks in the name of speed
Paul Makepeace - Ruby cuteness applied to testing & webserving
Zefram - Customising ops for semantic fun and performance profit
Tomas Doran - Using ZeroMQ and Elasticsearch for log aggregation

https://londonpmtech.appspot.com/

Thank you, CPAN Testers

Today I just want to thank you to all CPAN Testers. I do not know if there are such initiatives for other programming languages, but you are awesome. So many architectures, so many operating systems, so many Perl versions.

I hope to help someday. I just need to find some time for it.

Thank YOU all!

How to install into 5.6.2

Contrary to popular belief you can install almost all CPAN packages under 5.6.2.

First Step:

Set the urllist in your ./cpan/CPAN/MyConfig.pm to http://cp5.6.2an.barnyard.co.uk/ and rm ./cpan/Metadata and the 3 outdated sources/authors/01mailrc.txt.gz sources/modules/02packages.details.txt.gz sources/modules/03modlist.data.gz

Then start installing.

There are a couple of authors who agressively used to boycott 5.6 in their dependencies (schwern, dagolden, kenwilliams, rsignes), but it is quite easy to fix this. So after a couple of refused installations do this:

cd .cpan/build
grep 'use ExtUtils::MakeMaker' */Makefile.PL
sed -i 's/use ExtUtils::MakeMaker 6.3[0-9];/use ExtUtils::MakeMaker;/' \
   */Makefile.PL

Module::Build can also be installed (0.34), DBI (1.604), Moose (0.40), DateTime (0.66) and many more.

Introduction to writing Perl Documentation

Mark A. Stratman will give a talk at YAPC::NA 2012 described as:

This talk will help get you in the mindset necessary to write effective documentation.

We will briefly touch on POD (Plain Old Documentation) syntax, but due to its elegant simplicity we can quickly move on to examine the bigger picture, and explore the decisions we face when writing documentation.

Some key points will include:

- Conventions and expectations

- APIs, Tutorials, Manuals, and Cookbooks… and how and when to use them.

- Writing POD to take full advantage of formatters (e.g. Pod::LaTeX, Pod::HTML)

- Inviting community contributions

[From the YAPC::NA Blog.]

Paris.pm january technical meeting

Cross posted from my github blog post

Developing parsers incrementally with Marpa

Marpa::XS is a general context-free parser. What does that mean? For a grammar writer, it means that he doesn't need to worry that the next rule he adds to the grammar is the one that makes it hit the invisible wall that most other parser generators set up. If you can write it in BNF, Marpa will parse it. Which makes Marpa::XS good at incremental development.

As you develop your Marpa grammar, you can track the tradeoffs you are making between features and efficiency. Chances are, if your grammar is unambiguous or lightly ambiguous, there are no tradeoffs -- you're getting everything you want in linear time. Marpa is linear for every class of grammar currently in practical use.

Marpa is also linear with many ambiguous grammars and, in the worst case, Marpa's time complexity is what is accepted as optimal in practice. Whatever the time complexity that you're seeing with Marpa, it's probably as good or better than you're going to get from another parser generator.

One way to start the semantics

ASUS EPU-6 utility hacked with Win32::GuiTest

Some time ago I've bought a windows desktop with ASUS EPU6 because I wanted my desktop to be extra quiet. It is quiet indeed, but it's done by a special GUI utility, where one should compromise first between noise and CPU speed. That utility runs on startup, remembers its last setting, and hides itself, so theoretically there's nothing wrong with it. Except that often the setting are not remembered/recovered, and the desktop begins to makes noise until I run and setup that utility manually.

Here's the culprit, ASUS EPU-6 utility. By the looks of it I guessed that there'll be no commandline access to the motherboard setup, and indeed googling for API didn't help, and I'm not going to write to ASUS about it. Instead, I hacked a little script using Win32::GuiTest that simulates mouse clicks to the selected buttons.

Normally, I wouldn't even bother to publish such small piece of code, but if someone is (or will be) like me, royally annoyed by this gui dumbness crafted by ASUS, hopefully it helps.

HTML forms with FormHandler

Gerda Shank will give a talk at YAPC::NA 2012 described as:

Using FormHandler forms from basic to complex. Organizing your form library. Different rendering options; rendering themes; rendering for Twitter Boostrap and similar frameworks. Automatic database integration; handling your own database updates. Customizing form behavior. Testing forms.

[From the YAPC::NA Blog.]

Cpan Module not installing properly

Hi all i installed the strawberry Perl but when i am installing Cpan module it gives the error

Fetching with LWP:
http://cpan.strawberryperl.com/authors/01mailrc.txt.gz
LWP failed with code[500] message[Can't connect to cpan.strawberryperl.com:80 (t
imeout)]
Warning: no success downloading 'C:\Strawberry\cpan\sources\authors\01mailrc.txt
.gz.tmp1460'. Giving up on it.
Fetching with LWP:
http://www.cpan.org/authors/01mailrc.txt.gz
LWP failed with code[500] message[Can't connect to www.cpan.org:80 (timeout)]
Warning: no success downloading 'C:\Strawberry\cpan\sources\authors\01mailrc.txt
.gz.tmp1460'. Giving up on it.
Warning: no success downloading 'C:\Strawberry\cpan\sources\authors\01mailrc.txt
.gz.tmp1460'. Giving up on it.

s/ZeroMQ.pm/ZMQ.pm/g

So I've been doing this and that with ZeroMQ.pm, the Perl binding to http://zero.mq, and a little while ago there was a request from the zmq community to align all the language binding names as "*zmq".

Well, since libzmq 3.1.x has many API incompatibilities, I thought it's a good timing for a rename. So there: topic/libzmq3 branch is now libzmq 3.1.x compatible, and the module namespace is now ZMQ instead of ZeroMQ.

I must say I haven't tested this code much, so if you're interested, please take it for a test, and file issues and/or send me pullreqs on github!

Perl is more viable for web development than ever!

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/).

The Essential Perl Hacker's Toolkit

Stephen Scaffidi will give a talk at YAPC::NA 2012 described as:

MetaCPAN Logo

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):

wolfgang_kinkeldei_de-metacpan-16-120111.png

Improved version:

meta_cpan_kerned.png

I hope it is not too bad. Otherwise I will have to wait until I reach a reasonable age :-)

The Case of the Overloaded Curlys

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.

CPAN and undef versions (again)

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.gz
So, what are my versions for these modules?

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.