Here are some of the current tasks on the project's plate. If you have expertise in any of these areas and would like to see faster progress, please consider joining us.

Work on the Web Site

You may have noticed this web site is lacking. It's a wiki, and you can make incremental improvements as you see the need. See the footer of any page for instructions on logging in and updating content. Thank you!

Edit Documentation

POE's documentation is a relatively complete second draft. We need someone who isn't too familiar with POE to point out inconsistencies and tighten and clarify the prose. Ideally, we need several somebodies to do this.

You can help by submitting feedback or bug reports for the documentation during the normal course of using it. The documentation can always use more examples.

Optimize POE

POE could be faster. First, it's written entirely in perl so that it's more reliable on older versions of Perl and esoteric operating system. Secondly, it's coded very defensivey---perhaps overly so.

Daring developers are wanted to review POE and formulate and implement performance improvements. We're willing to make minor compatibility compromises if the benefits are worth them.

Some potentially widespread improvements include replacing POE's instantaneous garbage collection with a mark-and-sweep collector, reducing the amount of bookkeeping data POE must manage, and detecting and removing unneeded reference counting. Feel free to suggest other ideas.

C wizards are invited to consier writing XS versions of POE's most time consuming code. We already have a few in [the POE::XS namespace]. We can certainly use more.

Someone with installer and platform configuration experience could help make POE self-tuning. Currently POE uses a rather slow but highly portable event loop unless instructed to do otherwise. Most people don't bother. An installer could pull in the best event loop for the current operating system. POE's event loop loader could default to the best loop available rather than POE::Loop::Select.

POE is an important part of Perl's repertoire. An optimization project may be a good candidate for a Google Summer of Code project or a Perl Foundation grant.

Deprecate POE's Example Programs

POE's distribution includes an examples directory containing some old sample programs. Modernize them and put them in POE's cookbook. Leave a note in the examples directory explaining where the sample programs have gone.

Bundle the Cookbook as Documentation

The cookbook and tutorials should be bundled into the CPAN distribution. The code should go into the examples directory, and the entire articles should become part of the documentation. Maintaining both from a single set of sources is an interesting exercise in [literate programming].

Refactor POE

Convert POE::Resource Modules to Objects

The POE::Resource modules act as mix-ins to POE::Kernel. They would be cleaner and easier to optimize if they were proper objects instead. Ideally, circular dependencies should be broken so that the divisions of responsibility are clear and acyclic.

XS versions of these modules should automatically be preferred, possibly by using an XS-or-Perl loader.

Idiomatic Cleanup

POE uses this idiom:

if (exists $foo{bar}) {
  push @{$foo{bar}}, "thing";
else {
  $foo{bar} = ["thing"];

Meng Wong pointed out that push @{$foo{bar}},"thing" has always autovivified $foo{bar} as a list reference.

This can be an easy way to shave some CPU cycles off some of POE's hot code.

POE may have other opportunities for idiomatic improvement. This could be an easy, low-impact task for someone who wants to get familiar with the code.

Suggestions Welcome

Your ideas are welcome. Stop by IRC or the mailing list. Thank you.