Project Quick List
Click any of the links below to view the details of the project. Scroll down to review the summary of this page.
Summary of this Section
During the years I was in college, I spent a fairly significant portion of my free time toying around with various projects for both entertainment and practical value. In some cases, I was exposed to a circumstance where I really needed some tool but the existing tools weren’t exactly good enough. Sure, it isn’t always necessary–or even a bright idea–to reinvent the wheel, but I’ve often found that if something doesn’t work exactly as I would like, it’s better to follow one of two approaches: attempt to implement your requirements within the scope of what is already written and, failing this, rewrite your own utility from the ground-up.
What follows is a brief list of my own personal projects. Many of these are still maintained, though I do not necessarily contribute frequently to them due to time constraints and other needs (my free time is limited after all!). Perhaps you might find something useful among them. At least one currently has a minor release or two hosted on SourceForge.
Chatly
Description
Chatly is the spiritual successor of Cited (below) and an educational tool that demonstrates what can be accomplished using nothing more than Python, Twisted, and PyQt. Chatly isn’t fully feature complete yet, but you can expect to see fairly consistent improvements in the coming weeks. You can download the latest version for Windows here. If you’re using other platforms, you’ll have to download the sources for now. I haven’t configured any Python .eggs yet or “freeze” distributions, so hang tight!
Cited
Description
Cited is a web-based, AJAX-powered chat server using a mix of Python and PHP. I haven’t continued much more development on this beyond what is listed on the Trac page. In the future, I do plan on releasing a version that relies exclusively on Python (either mod_python or mod_wsgi for the HTTP-facing side).
Problem Scope
I wanted to write a web-based chat server for a couple of reasons. First, I wanted to see if I could do it in a reasonable amount of time, and second, I wanted to learn the underpinnings of AJAX and how it interacts with the server, browser, and what issues of persistence one might encounter when there is a strong need for maintaining session awareness.
Cited was a very fascinating project and illustrated to me the limitations of integrating near real-time applications (like chat) into a request-response environment like HTTP. I recall that fine-tuning the service to mitigate the load imposed by HTTP’s inherent overhead was something of a delicate balance; frequently polling for new chat messages could create a heavy load on both the client and server, and infrequently polling would make the chat feel disjointed and unnatural. Furthermore, some of the early testers were on relatively poor network connections and they claimed that playing Internet-based games with the chat client open severely increased their latency. The solution was to simply increase the default polling interval to 2 seconds and throttle the client if the chat window no longer had focus such that polling would occur every 20 seconds.
Issues
Cited’s current design has two significant drawbacks. Firstly, it does not scale particularly well as the number of clients increases. Server load appears to be roughly five to ten times greater per chat connection than that of a single plain HTTP connection. (This estimate is based loosely on the performance of my development machine and appears to be less of an issue on newer hardware.) Secondly, the design of Cited requires both Python and PHP to be available on the host. I intend to remove the PHP requirement in the near future. The Twisted framework is also required, but being as a greater number of Python applications now have dependencies on Twisted, this requirement isn’t an important drawback. Cited presents a very basic, stark, and bare interface; it’s easy enough to clean up, of course.
iptables Management Script
Description
I wrote a small script back in 2006 to manage my iptables rule set. Not surprisingly, the script ballooned beyond its original scope and began to include more and more features as I required them. Many of the features like quality of service (QoS) were added mostly for the purposes of experimentation (I wanted to find out how QoS worked, after all). As a consequence, I don’t always use every feature this script provides. If you find it useful, feel free to grab a copy!
Read more or download the script.
Piki
Description
Piki is a wiki and BBCode markup processor written for PHP. I originally wrote it to augment the BBCode syntax used in phpBB but have since used it in other projects. Piki also supports a Mediawiki-like syntax and can be used to filter unwanted HTML and tag attributes from textual input.
Problem Scope
There are plenty of PHP projects that currently support Wiki and BBCode markup and transform this input into HTML. However, I wanted something that was much more easily isolated from other systems with few dependencies (Piki has none). Many of the processors available via PECL depend heavily on other PECL components, and while there certainly isn’t anything wrong with code reuse, my requirement for a text processor that served as a drop-in replacement or stand alone parser prevented me from using other projects. I also required that Piki be reasonably easy to configure.
Protengi
Description
Protengi is the PROxaeda Template ENGIne, also written in PHP. Although Proxaeda has evolved and will eventually transform into a Python-based web application server, the template language has lived on. It’s loosely based on the JSTL for Java, and I find the syntax more bearable than other template languages written for PHP. Protengi’s XML-like syntax makes it play nice with several WSIWYG editors.
Problem Scope
I’ve used a number of template engines in a variety of languages (the worst being in Perl and the best in Java). Smarty was my first encounter with a PHP-based template engine, but its unusual syntax created a perplexing dilemma for designers wishing to use WYSIWYG editors or preview their designs directly in a browser. In the interim between working with Smarty and writing the current version of Protengi, I had encountered the JSTL specification for Java servlet containers. JSTL’s syntax meshed very well with JSP and presented a fairly elegant framework for manipulating the source templates via both text editors and XML namespace-aware WYSIWYG editors (I don’t use the latter, however). I wanted to take with me the experience of JSTL and inject it into a PHP environment with some minor syntax changes and clean-ups. I also wanted to structure the template engine such that adding new control structures or specialized tags would require minimal effort. As a result, Protengi’s tag processor relies heavily on functional callbacks to perform its work, and adding a new tag or control structure is as a easy as injecting new callbacks into the tag processor. Since everything is parsed and saved as a raw PHP class, Protengi is comparably as fast as Smarty.
Issues
Protengi is fairly stable but nevertheless exhibits a few bugs and other issues. Performance is still fairly insufficient due to the manner in which Protengi processes variables. I will eventually change the template variable pre-processor and parser to improve variable handling, although this may create a small break in the API. Additionally, Protengi may allow raw PHP to be injected into a template if ASP-style tags are enabled; this is a bug and will be removed as I do not believe it is an appropriate feature to allow processing of PHP within the context of a template. I also do not believe that exceptions raised by Protengi are covered in a sufficiently obvious manner, and this is a clarification I need to apply to the documentation
Sandstorm
Description
Sandstorm was originally used to test the latest variation of Protengi. The project is currently stalled, and I doubt I will continue working on it due to some annoyances with PHP. I would be more likely to continue Sandstorm as a Java-based web application under Tomcat. However, I do have an example site set up that includes a working pastebin sub-app. The syntax highlighting is performed by Pygments, a Python syntax highlighter. If I were to re-implement the pastebin, I would probably opt for GeSHi instead.
Watcher
Description
Watcher is utility written in Python that is designed to monitor syslog’s messages for SSH probes and other potentially malicious or annoying activities. Watcher provides a highly configurable ruleset for adapting to new (and noisome) threats! Once loaded, Watcher will monitor the message log for specific activities and if the connection count for a specific rule reaches its defined threshold, Watcher will block the offending IP address by calling iptables. FreeBSD’s ipfw support will be forthcoming in future releases.
WordPress Plugins
Read More: the Patchset
If you’ve tried using the_content() to control your “read more” links and have been disappointed with its limitations, never fear! This plugin gives you greater control over what WordPress generates.

Leave a comment