My Projects

I'm a little excited as the two projects I've been working on for the past few years are coming along nicely. I'm preparing the last few bits of code needed to upgrade this web site to use Contentment instead of Drupal. I also just made the first release to PAUSE this afternoon of FleetConf (which should be posted on my CPAN page sometime this evening).

Anyway, I thought I'd use this to summarize my current project interests.

FleetConf. My Master's Report started this project a couple years ago. Initially, this was a very simple agent system for creating accounts. It was extremely informal and basically integrated Best Practical RT: Request Tracker with some custom Perl scripts to do the tasks of creating accounts, creating home directories, adding users to mailing lists, and notifying the users of the status of this activity.

I have since expanded this into a full-fledged agent configuration system. My aim is to provide a system that is able to perform just about any task on a list of records. I call this list of records the workflow as an agent makes changes to the state of the records as part of the process. For example, with the account manager, the system waits for jobs to arrive in the form of RT tickets and then agents running on a number of different systems take actions based upon the content of the tickets. Future agents could iterate over the list of all users and check for anomolies or take action based upon the records—for example, an agent could iterate over all user accounts once per day to find temporary accounts that have expired and create account manager jobs to suggest their deletion. Another list might be to iterate over the list of IPs and check those IPs for OS type or other vulnerabilities. I have even considered a sort of controlled viral infection to install itself on any machine for which it knows the password or has an authorized SSH key.

Anyway, the system is now beginning to pay off as it provides a maintainable and testable framework for designing agents. I hope to start expanding it beyond account management tasks over the next few months.

Contentment. This is a project I've written from scratch over the last couple years. Originally, this system was written to cope with our need to build a database of documentation. We wanted something that could be stored in a simple and readable text format on disk so it would be easy to copy and paste from into emails. We also wanted an on disk format that we could use vim to edit with rather than some nasty web form such as a Wiki provides. I decided to use on-the-fly transformation into HTML and use CVS (originally, but now Subversion) for version control and content distribution.

I originally wrote the system in HTML::Mason and Perl because I had planned (and still do) to integrate it in some small fashion with RT. Mason also provides a pretty nice framework for generating indexes and theming that was easy to manipulate for the start. Somewhat ironically, the document language we liked the best was reStructured Text, which is a format used by Python. The system is now a bit slower than I'd prefer, but with a little more effort in caching, it should be plenty fast. (The latest version of Contentment is also much, much faster with a couple tricks I need to publish and need to start using on the CIS Support Site.)

At this point, the system has grown well-beyond these roots and now features on-the-fly transformation for a wide variety of formats with a plugin system for adding new filters and transformations. It can perform content generation on Mason templates, regular Perl scripts, and POD documentation (the reStructured Text generator is actually a plugged-in feature at work as I'm not sure that's really a good target to include). It has a functionally hooks system allowing any part of the API to insert clean plugin code in appropriate places. It uses a VFS system for providing interesting path handling.

The latest feature I'm working on is the final piece of the puzzle, the "Contentlet" system. That's my cheesy name for plugins that include the handling of storing data in the backend and providing some mechanism for viewing and updating that data on the front-end. I'm currently building an API for the back-end which somewhat resembles the "node" system of Everything or Drupal.

File::System. This was a fun module to write. I created it to provide the VFS system because the other VFS modules I found on CPAN were either intended for a very different purpose or provided documentation for a non-existant implementation.

Basically, the goal is to provide an interface for finding paths in a very standard way suitable for using as partial URIs. I think the API I've created is very well suited for this task.

ParrotJoos. This is something I hack around at every now and then. I find the Parrot project intriguing. I'd like to do something to contribute, but I want to understand it a bit better first, so I've been taking the JavaJoos idea from my ol' CIS 706 course and trying to adapt it to Parrot. So far, I'm stuck building a compiler since I'm not very skilled at translating the LL(1) specification intended for yacc into a recursive descent parser for Parse::RecDescent. Perhaps I should use one of the Perl parser generators that understands LL(1) grammars or just use yacc/bison.

Anyway, this is one of those things I hit when I start to feel overwhelmed or bored with one of my other projects and need a break. I suppose that one of these days I'll either get tired of messing with this or my interest will finally spark and I'll start contributing to Parrot.

PtrCalc. This is a tool I'm designing to help me with teaching CIS 450 (web site only accessible to my students) this fall. One of the things I teach in that course is "Masaaki's Rules." He didn't really invent the rules, since they're just the rules that C uses to perform pointer calculations, but they're infamous in the undergraduate program. I've taken these same rules and made them my own by formalizing the notation he used into a sort of proof calculus for pointers. I'm writing this program to basically give students the right answers so they can experiment with this a little more on their own and get a little more familiar with the topic. Of course, this means that I'm going to have to be a little more aggressive in my testing as well... Muahaha!

Anyway, that's all the projects I can think of that I'm currently digging around on a bit.

0 TrackBacks

Listed below are links to blogs that reference this entry: My Projects.

TrackBack URL for this entry: http://andrew.sterling.hanenkamp.com/mt/mt-tb.cgi/341

Leave a comment

About this Entry

This page contains a single entry by Andrew Sterling Hanenkamp published on July 14, 2005 8:50 PM.

The Matrix and the end of the world was the previous entry in this blog.

Battlestar Galactica isn't for me is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.