Cecil's Software Projects

General Utilities (Linux/UNIX/etc)

bwmon

This is a small, stable, and simple daemon designed to monitor and log the network usage of any (or all) network interfaces on a linux system. This is especially useful when monitoring the internet-facing connection on a firewall or a hosted server as it allows you to monitor your monthly transfer amounts and ensure you are complying with any transfer limits imposed by your connection provider to prevent surprise bills or disconnections.

lognewlines (lnl)

This is a utility that tracks a log file and will output only the lines that were added to that file since the last time the command was run on that file. It is moderately intelligent about detecting files that have been truncated and restarted, but it does not go looking for files that might've been gzipped or renamed (by logrotated for example) to find any lines at the end it might've missed. So you might not be getting 100% of the data using this tool. Still, I find it comes in pretty handy both on the commandline and in cronjobs as it does a good enough job for most purposes.

fidosms

This tool allows you to send a Text Message (SMS) through Fido's website to any Fido phone. This is useful for Canadian users of Fido phones only, unfortunately, but I use it to notify me of emergency-level errors on my servers, for example a failed RAID drive. Maybe it will be useful to someone else too.

MythTV and IVTV monitoring scripts

This is a collection of scripts I use to maintain the health of my MythTV box and the "WinTV PVR-150" tuners it uses. Unfortunately, the IVTV drivers seem very buggy on my hardware, the tuners will semi-frequently die, stop recording, crash the backend, or do any number of annoying and bizzare things. These scripts attempt to watch for most of these problems and try their best to fix the problem as gently as they can, getting more forceful if they are unable to resolve the problems and ultimately rebooting the machine if necessary. All this happens automatically (although it can be a bit disconcerting if it happens while you're watching a recording). It's not perfect, and could probably be a lot smarter, but it does the job for me.

Munin Plugins

This is a collection of graphing plugins I've created for the wonderful Munin system monitoring and graphing application. The most notable one is a graph that integrates with the bwmon daemon (above) to display your monthly bandwidth usage graphically, optionally including a "maximum" which should not be exceeded, and an "average" which gives you an idea whether you are on track to exceed your bandwidth limit or not. There are a few other plugins to show things like the number of listening network ports open.

General Utilities (Windows)

DelayStarter

A pretty simple program that delays the start of another program for a specified number of seconds. Useful for automated starts of programs, in your startup folder or whatever. Personally, I use it to delay ATITool and prevent it from loading at the same time Fraps does, which often causes my computer to lock up.

LineThrough

This is a systray application designed to read from a recording device (say for example, "Line In") and play it directly to your speakers. Useful if you want to plug your iPod or laptop or something into your line in port so you can play it on your desktop's speakers.

Games

Major development

Disclaimer: Please note that games in this section are in development and anything, or even everything about them is subject to change at my whim and my whim alone. Games especially tend to be highly fluid throughout the development process, do not even begin to believe that anything in this section constitutes a commitment on my part.

The game in active development is an open-ended 3D spaceflight trading/combat/RPG with an epic, multi-faceted story and a rich, expansive world to explore. Imagine, if you will, a cross between Privateer, Freelancer, Deus Ex, and EV Nova, but it will be even a step above and beyond that. No further details will be made available at this time, but look forward to more updates as the features begin to stabilize. I plan on starting a development weblog whenever I get around to it, and when I do, it will be posted on here. Thanks for your patience, I promise to make it worth your while.

The only other game worth mentioning is currently unnamed and on hold for the forseeable future. It is a 2D turn-based tile-based strategy RPG with non-interactive battle sequences. It is intended to be a robust platform for modding. The feature set is planned to be extensive enough that one could use it as an engine to reimplement other games in the same genre like Warsong/Langrisser, Warlords, Ogre Battle, with varying degrees of exactness. But hopefully people will be creative enough to come up with their own scenarios instead. Imagine one of those games made moddable so you can very easily create your own stories within the simple framework provided by the Warsong engine, for example. That's approximately what this project is expected.

Orbital

Not a "game" in the strictest sense, this is a simple orbital simulator built using pygame. There's plenty of fun to be had if you find enjoyment in firing rogue suns at a peaceful inner solar system and watching it get torn apart (I do, for the record), or perhaps if you want to try and build an elegant orbital system. But there's no goal, no score, nothing beyond simple physics calculations and colorful little circles to represent your orbiting objects. Here's a more thorough description, with commands and commentary.

Bouncy

Again, not really a game. Bouncy is my "hello world" of games, I write it when I am learning to write games in a new language, operating system, or library. It's just a ball that bounces around the screen. You can make it change colors. You can slow it down. You can speed it up. You can make it draw trails. You can turn it in circles. That's about it. It might be useful as an example or template for how to use pygame. If anyone is interested in learning, it's pretty simple, feel free to take a look.

Game Utilities

py3dutil

This is a fairly miscellaneous collection of things useful for the creation of 3d games in Python and pygame. It is a python module written in C, for speed. Among other things it contains a vector object ("vect") to do fast vector arithmetic. There is also a very limited and inflexible (but very fast) array for containing, adding, removing, and sorting Python objects called the "obarr". It has vastly improved performance compared to a standard python list, and can hold huge numbers of objects with minimal performance degradation. I use obarrs for all my major object arrays, in the rendering engine for example, especially for things like particle effects where each particle needs to be sorted from back-to-front from the camera.

More will almost certainly be added to this library as time goes on, especially as the workload becomes greater on the Pure Python versions of each interface and performance enhancement starts to become required. Some pieces for a collision detection/physics resolution engine are partially implemented already.

mapgen

A strange little program to generate maps similar in style to Master Of Magic's random map generator. It has a tremendously simple model of the world. Each tile gets three parameters calculated for it: heat, humidity, and height. These are determined based on the values of the neighbors, on things like latitude, and on randomness in general. However it does a reasonably good job of creating continents, oceans, islands, with varied and appropriate terrain features like mountains, jungles, and deserts. Feel free to take a look if you are interested, and please ignore the abysmal, abysmal graphics. Please don't hold it against me. That's what happens when I try and create graphics on my own instead of using an artist. I promise I won't do it again.

plasma

A rudimentary python implementation of the venerable "plasma" generator. It's not a fractal, but everyone calls it the "plasma fractal", so if you want to call it that, go ahead. I just call it "plasma". I use this in a lot of places, and it probably deserves more effort and attention than I've given it, but it works well enough.