2008Q2 Grant Proposal - Improve POE::Component::IRC
Thu, 01-May-2008 by
Alberto Simões
edit post
* **Author:** Hinrik Örn Sigurðsson
* **Title:** Improve POE::Component::IRC
* **Synopsis:** I will improve POE::Component::IRC[1] by overhauling its test suite, adding more features, fixing bugs and writing more documentation.
**AUTHOR:**
Hinrik Örn Sigurðsson
**NAME:**
Improve POE::Component::IRC
**SYNOPSIS:**
I will improve POE::Component::IRC[1] by overhauling its test suite, adding more features, fixing bugs and writing more documentation.
**BENEFITS:**
PoCo::IRC is the most modern IRC client module for Perl out there. It is used for many applications, mostly IRC bots. Users will greatly benefit from better test coverage, added features, and bug fixes. New users will also benefit from better documentation.
**DELIVERABLES:**
* Make PoCo::IRC send periodic events reporting on the progress of DCC file transfers.
* Add an option to POE::Component::IRC's constructor to specify maximum upload/download speed of DCC file transfers.
* Get test coverage up to at least 65% (from ~39%).
* A rich(er) cookbook[2] of example programs showing off PoCo::IRC's features. I will write at least the recipes titled 'MegaHal', 'Reload' and 'Gtk2'.
**DETAILS:**
PoCo::IRC currently does not report any progress on DCC file transfers (except for success and failure). One way to implement that would be to send a POE event periodically, after every sent/received chunk of DCC data. Registering for this event will allow a GUI client to update a progress bar for example.
Bandwidth throttling of DCC transfers is missing as well. This might be done by subclassing POE::Wheel::ReadWrite to add rate limiting capabilities. If I manage to do that in a very general way, I will put that code into a separate module to make it easy to use with other POE-based code, or patch POE::Wheel::ReadWrite. I will have the rate limit be a configurable value passed to POE::Component::IRC's constructor, as with the DCC ports.
PoCo::IRC does not have sufficient test coverage in my opinion. Devel::Cover reports a total of ~39% coverage. I will add to and improve the test suite, to discover possible bugs to fix and further ensure code quality. I'm aiming for at least 65% coverage.
PoCo::IRC has been criticized for being a little hard to use at first due to unclear documentation. I recently started writing the PoCo::IRC Cookbook, which provides working example programs with documentation. It currently lists 11 recipes, of which 4 have been written. I will complete at least 3 of the unwritten recipes (or new ones).
In the event that I fail to accomplish some of my objectives, effort on any other objectives will not have been wasted as they do not depend on each other.
**SCHEDULE:**
Weeks 1 & 2
* Read up on how it would be best to throttle bandwidth of TCP connections in POE-based code. Study POE::Wheel::ReadWrite's source, etc.
* Get intimately familiar with the DCC spec and how other clients implement it.
* Work on the DCC-related stuff. Implement throttling and progress reports at the very least.
Weeks 3 & 4
* If needed, review the DCC code and add some final touches.
* Improve the DCC-related tests.
* Write at least the 3 Cookbook recipes mentioned in DELIVERABLES.
Weeks 5, 6 & 7
* Improve/add to existing documentation where needed.
* Read more about available tools and good practices in the area of testing.
* Clean up/comment/reorganize existing test files where needed.
* Write missing tests. Get coverage up to at least 65%. Test, test, test!
**BIO:**
I am a 22 year-old student from Iceland. I have been refactoring, fixing bugs and adding features to PoCo::IRC for the last couple of months[3], during the course of writing an IRC bouncer[4] based on it. I am now one of PoCo::IRC's co-maintainers. I have not been very involved with other open source projects aside from occasional patches and bug reports to various pieces of software that I use. I have a very good grasp of Perl and feel confident that I will be able to do everything I have listed in this proposal.
As for development tools, I usually go for vim or gedit for code writing, then the command line and perl(1) for the rest. Computing power is graciously provided by my trusty old Dell Inspiron 8600 laptop. Perl is my favorite programming language (so far), in large part due to its "postmodern" nature[5]. I've read quite a few books about Perl, my favorite being the Camel book, closely followed by MJD's Higher-Order Perl.
**AMOUNT REQUESTED:**
$2,000.
**REFERENCES:**
# http://search.cpan.org/dist/POE-Component-IRC
# http://search.cpan.org/dist/POE-Component-IRC/lib/POE/Component/IRC/Cookbook.pm
# http://search.cpan.org/src/BINGOS/POE-Component-IRC-5.72/Changes
# http://search.cpan.org/dist/App-Bondage
# http://www.wall.org/~larry/pm.html
Comments (2)
Seems like a strong proposal.
My biggest criticism is that the proposal puts the enhancement milestones first and the testing milestones last. That's the wrong order, IMO. Before you break stuff and refactor, you should figure out what already works. Otherwise debugging is much harder later because you don't know which bugs existed before and which you just created.