[pm-h] January meeting proposal

Todd Rinaldo toddr at null.net
Sun Nov 18 13:03:20 PST 2007


In keeping with tradition, there will be no December Perl monger's meeting.
This means the next meeting will be January 8, 2008. We discussed in the
November meeting my doing a presentation of Net::Jabber::Bot.
(http://search.cpan.org/dist/Net-Jabber-Bot/)

In a addition to the intro to the bot. The group has decided they'd like to
take a stab at maintaining it together.
I've put together some thoughts below on the module as it stands right now.
I thought maybe we could discuss it before the meeting to help decide
direction and also what info will be useful to people to get us going
quickly.

Existing perl Jabber bots in the field:
Jpb (http://jpb.sphene.net/wiki/show/JPB) seemed like a good candidate to me
originally so I wouldn't have to write my own. The problem as I got into it
was that the code badly mixed with the config so that I would have to alter
the modules any time I wanted to change something. I decided to write my
own.

Net::Jabber::Bot Synopsis:
The module heavily leverages Net::Jabber, which is really just a thin shell
on top of Net::XMPP. I have developed this module over the last few months
to allow me to separate out the things one wants to do with a bot from the
things that can get you in a lot of trouble with a bot. The assumption I
started with is that most people simply want to create a bot that can do
something every once and while and that is able to react when new messages
it cares about are sent. This is what the module aims to do.


Needed code enhancements to the module.
1. Needs to be able to react to version requests. This requires being able
to generate customized messages. This trick is documented between Net::XMPP
and Net::Jabber, but I lack the object oriented experience to implement it.
2. Needs to be able to tell what messages are just history messages.
Currently the bot does this by ignoring everyone for a period on startup. I
consider this to be a hack at the moment that sometimes fails if the server
is slow.
3. Make test is a mess. Almost all of the tests require a jabber server to
be present. This is making the modules tests to look very red on the
automated CPAN testers site. Robert and Wade told me I should be programming
to the interface. This sounds like a grand plan but I have no idea what it
means :)
4. Some of my design decisions could use a closer look as to some of the
values being hard coded, etc. Originally I envisioned a Net::Jabber::Bot
being inherited from Net::Jabber::Bot::Safety, but I decided to just merge
the 2 ideas. I'd love to explore if the choice I made was a good one.
5. Currently the module is initialized and connections are made via a new
being fed a hash from hell. It feels like a kludgy approach to me at the
moment.
6. The re-connect algorithm seems to have issues
7. While it's perfectly safe to connect to a jabber server with the same
username, it's very dangerous to the server to connect with the same
user/resource. Unfortunately I haven't figured out a way to detect that I'm
doing this. As a result I've been "chastised" by server admins for not
noticing that I hadn't killed the old bot when I started the new one up. 
8. Ability to add/leave forums at times other than startup. Probably a good
candidate for removal from new. I don't know what to look for to detect if
the join succeeded. Right now I'm just assuming the room joins succeed.

Documentation need
1. POD documentation is a little loose on the existing subs. I'm not
documenting the private ones at all except for a few comments in the file.
Not sure what the etiquette is on this. I really don't think they should be
showing up on CPAN and if I pod them, they will. 
2. Need code examples on how to leverage the bot. This is pretty easy to
provide, but I haven't reverse engineered someone else's CPAN to figure out
how they do this to make it look right in CPAN.

Issues:
1. I need an SVN location if we're going to do group collaboration. Anyone
have ideas?







More information about the Houston mailing list