Quick jump:  What's new

 
Go to:
 
Weblog: project 
in Hackathon Chicago, Nov 10-12, 2006
Perl::Critic

Leader: Chris Dolan (Attending Saturday only)
Interested: Andy Lester
Interested: Elliot Shank
Interested: Michael R. Wolf

Perl::Critic is an extensible framework for creating and applying coding standards to Perl source code. Essentially, it is a static source code analysis engine, like lint for C. New policies are getting added to Perl::Critic all the time, and you can help your fellow Perl programmers write cleaner, safer code.

http://perlcritic.tigris.org/

Getting Started

Before the hackathon, you should download the latest Perl::Critic from our SVN repository, and install all of its prerequisites:

% cpan install Perl::Critic
% svn checkout http://perlcritic.tigris.org/svn/perlcritic/trunk perlcritic

Username: "guest"
Password: "" (blank)

How to help

You don't have to actually know Perl::Critic or PPI's internals to help out. Most of the work is writing test cases and thinking through the logic of matching Perl code.

You can (in order from easiest to hardest):

  • Choose good policies to implement
  • Write some positive and negative tests
  • Come up the corner cases.
  • Write pseudo-code and docs
  • Write the PPI implementation of pseudo-code
  • Hack PPI

Items to-do

Here are a few Policy ideas from our TODO list that would greatly benefit the project. Policies typically live in the Perl::Critic::Policy:: namespace.

InputOutput::ProhibitJoinedReadline - recommend "local $/ = undef" instead

RegularExpressions::ProhibitComplexRegexps - If regexp is longer than N characters/lines, recommend it be split into "qr//" pieces

TestingAndDebugging::ProhibitProlongedStrictureOverride - Make sure that the lexical scope of a "no strict" is less than N lines

  • Done!

Variables::ProhibitTopicChangeInListFunction - avoid things like "map {s/ /+/g} @urls". Recommend for loops instead. Oh, and try to think up a better name.

  • How about ProhibitVoidMap
    • That's not the same, and it's already implemented!

ValuesAndExpressions::ProhibitComplexVersion - http://rt.cpan.org/Ticket/Display.html?id=20439

Profiling

Perl::Critic can be a resource pig. Profile it and help find the hot spots.

% perl Build.PL
% ./Build
% perl -Mbib -d:DProf t/40_criticize.t
% dprofpp

Incorporate Perl::Critic rules into your projects

This is a great way to get your feet wet and understand the power, and limitations, of Perl::Critic.

You can:

  • Install Perl::Critic
  • Run "perlcritic -top MyModule.pm"
  • Create a custom config file
  • Install Test::Perl::Critic
  • Add a t/perlcritic.t to your dist

Perl::Critic::Bangs

Andy Lester's set of extensions. One of them checks for variable names ending with digits, but $md5 should be OK.

Random

Andy Lester is having a problem where he runs P::C against Socialtext Open and it complains about "Capture variable used outside conditional", but that's apparently not true.

permalink
Perl 6 & Parrot

Leader: Chip Salzenberg
Interested: Rick Scott, Andrew Johnson

Perl 6 is the next release of Perl 5, and is quite an undertaking. Parrot is the virtual machine that underlies Perl 6, and will allow other languages to run on top of it.

Chip Salzenberg, the pumpking for Parrot, and Jerry Gay, bon vivant and man about town, will be at the hackathon to organize this effort.

One of Chip's first tasks is preparing a new Parrot release.

Jerry will be finalizing the design of the SmartLink implementation, collecting a list of problems and solutions for both pmc and object, and writing a spec for IPC::Run-like control of a parrot interpreter.

We've got a laundry list of other tasks, including:

  • Working as a group on one subsystem to be named later, e.g. I/O or exceptions
  • C code cleanups
  • Name standardization
  • Function call overhauling
  • Fix C namespace pollution to make Parrot clean for embedding
  • Adding tests
  • Automatic code generation
  • Static code analysis with lint and splint
  • Dynamic code analysis with valgrind and other testing tools
  • Improve test coverage
  • Other Parrot Cage Cleaners work

Some RT tickets that would be really useful for hackathoners to address:

permalink
ATestForEveryBug

Leader: Steve Peters
Interested: Michael Schwern
Interested: Jim Keenan
Curious: Michael R. Wolf

A problem over the years in Perl 5 has been that bugs mysteriously get fixed. This is a big problem for two reasons. First, we don't know when a bug is fixed and we are able to close the bug from the RT queue. Second, we don't know if the bug is fixed and then broken again.

I'll be working on getting tests TODO tests created for as many of the existing bugs in the Perl 5 bug queue as possible over the weekend. This is fortunately an easy place for nearly anyone to contribute.

Resources

  • [perlhack] - please skim before getting started, especially on how to get Perl 5 sources via rsync.

Infrastructure

  • need to set up some sort of SVN prior to the arrival
permalink
HTML::Tidy

Leaders: Andy Lester and Jonathan Rockway

HTML::Tidy is a wrapper around the libtidy validation and cleanup library. It needs some serious attention to increase the access to the inherent capabilities of libtidy. If you know C and XS, this could be the one for you.

libtidy: http://tidy.sourceforge.net/

HTML::Tidy repository: http://code.google.com/p/html-tidy/

permalink
KillTrac

Leader: Jonathan Rockway
Interested: You!

KillTrac is a perl (and Catalyst) replacement for Trac. It's designed to be a minimal piece of glue that makes interfacing problem tracking, revision control, and a wiki easy. We plan on "standardizing" on RT for the problem tracking, MojoMojo for the Wiki, and some clever hacking for the SVN view.

This will give us the best of all worlds -- developers can use RT's interface, but end users can look at problem tickets in the wiki or in a simple (trac-like) problem ticket viewer.

Right now KillTrac is in the planning stages (come disuss it with us on #killtrac on irc.perl.org), but here's what needs to be written (and probably will be before Christmas):

  • Catalyst::Model::RT::REST to talk to RT remotely (including CPAN's RT)
  • Minimal Catalyst "view" on top of RT::REST
  • SVN browsers (diffs / changesets / past revisions, etc.)
  • "Roadmap" and "Timeline" views of the Wiki, RT, and SVN commits
  • svn commit hook editor
    • so we can import POD to the wiki on svn commit
    • and autoamtically make test, and have a web page detailing the failures
  • ...

Come help us!

permalink
Weblog Navigation
Loading...
Weblog Archives
  • Loading...

Upload Files

Click "Browse" to find the file you want to upload. When you click "Upload file" your file will be uploaded and added to the list of attachments for this page.

Maximum file size: 50MB

 
 
 
File Name Author Date Uploaded Size

Save Page As

Enter a meaningful and distinctive title for your page.

Page Title:

Tip: You'll be able to find this page later by using the title you choose.

Page Already Exists

There is already a page named XXX. Would you like to:

Save with a different name:

Save the page with the name "XXX"

Append your text to the bottom of the existing page named: "XXX"

Upload Files

Click "Browse" to find the file you want to upload. When you click "Add file" this file will be added to the list of attachments for this page, and uploaded when you save the page.

 
 
 
Add Tags

Enter a tag and click "Add tag". The tag will be saved when you save the page.

Tag: 

Suggestions: