why do I blog?

Originally I thought blogging would be an easy way to provide an up-to-date status (and log) of the various projects I've got going on. It becomes very easy for an outsider to look at my blog and click a few links and realize how often I work on a particular project and what other projects are taking all my valuable time by distracting me.

After a few blog-like applications, I finally settled on pyblosxom which didn't have everything I wanted, but it had the bonus of being written in Python and that makes it super easy for me to fix and add functionality.

Then I found myself working on the pyblosxom code-base and talking to Wari at length about various pyblosxom things.

Now I blog for two reasons. First to provide status on my projects and second, to provide more data with which to test pyblosxom functionality.

That's why I blog. On top of that, I'm fascinated by the decentralized collaborative forum that blogs provide. It's not unlike editorials in the newspaper.

new super-duper categorylist with kung-fu punch action grip!

So, I was looking around in the wide wide world of blogging and saw a bunch of sites that list the categories they have on the side along with their archives and calendars and all kinds of fancy things... And I wanted one too!

I took a gander at the pyarchives.py plugin and then cannabalized it into pycategories.py which returns that fancy list of category links you see on the far right under the calendar.

Then like a good boy, I added it to the CVS repository figuring it's probably going to be a must-have feature rather than an eclectic feature that only a few of us real blogging odd-balls would want.

when a sandwich isn't a sandwich

Back in the day I used to buy my lunch from one of the surrounding sub shops. That worked pretty well--it was \$5.00 a day or so and it guaranteed me a meal that sufficed to get me through the day.

Recently, I started to think about the economics involved:

    5      dollars a day
 *  5      days a week
 * 50      weeks a year (roughly factors in holidays and vacations)
-----
1,250

I figure that I can make my own sandwiches and cut that cost at least in half. Thus I started to bring my own lunch most of the time.

The other day I bought Pepperidge Farms Sweet Buttermilk bread since it looked pretty substantial. However, I discovered a sandwich made using this bread is not unlike eating two spoonfuls of peanut butter and two spoonfuls of jelly. A sandwich is not a sandwich when the bread part of the sandwich is rather insubstantial.

farewell to the sillycs

So on Friday (or Thursday--I forget) I bowed out of the SillyCS mailing list--a list I helped to start back in 1996 or so when we were all happy Computer Science majors at Boston College. People have approached me as to why I did such a thing. I just became less and less interested and it was less and less fun for me.

I think part of the problem was that the SillyCS went one way but I wanted it to go another. Case in point--it was SillyCS not SillySPORTS.

Anyhow, for nostalgic reasons, I post the following excerpts of the SillyCS mythos from way back in the day:

pyblosxom api

Yesterday I slam-dunked some code to form some infrastructure for plugin modules--I figured I've done this for Lyntin and Stringbean, might as well go for the hat trick! The code allows us to build a set of callback chains and such to let people extend the functionality of pyblosxom without having to re-write pyblosxom internals. Blah blah standard plugin stuff.

At some point, I'll write a tutorial to use it beyond the brief documentation I left in the api module. Until then, I leave the following excerpt for how it all ties together using the pycalendar module as an example.

"""
This is my fancy pyfortune module.  Basically what it's going to do
is call /usr/local/bin/fortune and populate the fortune variable
with the resulting string.
"""
import commands
from libs import api, tools

class PyFortune:
    def __init__(self):
        self._fortune = None

    def getFortune(self, args):
        entry_dict = args[0]
        text_string = args[1]
        if self._fortune == None:
            self._fortune = commands.getoutput("/usr/games/fortune")

        return (entry_dict, tools.parse({"fortune": self._fortune}, text_string))

def initialize():
    api.parseitem.register(PyFortune().getFortune)

Figure 1: libs/plugins/pyfortune.py

Mmm... It occurs to me that this doesn't use the api module at all. On the other hand, it's pretty neat looking, so I'll leave it for now. At some point someone is going to have to remind me to write an api usage example.

Have a dynamically generated fortune:

...

This fortune has been removed because it turns out that dynamically generated text causes RSS feeds to think this is a new entry every time. Thus, no fortune for you!

tkui is all cleaned up

I broke out my Programming Python (2nd Edition) book and doubled my Tk knowledge in the space of an hour or two. I went through the tkui and fixed up a lot of issues involving thread contention. The tkui should be more stable now, titlebar manipulation works again (through the settitle(...) method), NamedWindows work, I fixed the Autotyper, and I went through and cleaned up the code while I was at it. All in a good night's work.

This was the last big issue I needed to solve before releasing 3.1 which has some sweeping fixes in it.

Stringbean overhaul completed!

I finally finished the complete overhaul of the Stringbean driver. It's now separated into a driver and a mudlib. I have everything implemented as a series of hooks and managers. Some portions are a bit awkward, though and could probably be re-written. Some components are implemented simplistically for now until I (or someone else) design and implement a more sophisticated version. All in good time, though.

Currently implemented: commands, emotes, heartbeats, lookables, exits, simple NPCs, connect, disconnect, and some other stuff.

Tk is irksome

So for some reason (and I haven't done enough research to even describe the problem adequately) Tk in Python 2.2.2 will hang (the entire Python process) when you go futzing around with the members of whatever you get back from Tkinter.Tk(). It only seems to have this problem on Windows 2000 and Windows XP. No one has mentioned issues on other platforms.

Anyhow, so I was going to do a version release this last weekend (that would be January 5th), except now I have to go puzzle through why Tk is being so twitchy.

tutorial on writing basic Lyntin modules

I wrote a tutorial on writing basic Lyntin modules. Hopefully it helps to fill a void in coming up to speed on Lyntin module writing. I'll probably add more tutorials as time goes on... Oh. Now that I think about it, I should have the Lyntin site just grab my RSS feed for the status. Mmm... I'll have to toss that around.