News Archive


The home page was a tad boring, so I decided to create a site map (a real one, in SVG) for it. Being the type that prefers to edit code than learn yet another drawing program, I wrote it in GraphViz DOT format, and now just convert it to SVG on the fly during the site build. It took a bit to learn how to tune the GraphViz layout parameters, but I think the result looks pretty decent. It won't work on Internet Explorer older than IE 9 Platform Preview, but for those folks (and text browsers), I left the old navigation menu as well.
I've been contracting for the last few months. I'm in the lull between the end of one and start of another, so I've updated my resume with the latest info. You may now commence rejoicing. :-)
It looks like I'm managing slow and steady improvement. There are a few visible changes, but most of the change is behind the scenes. In particular, a lot of stuff that was hardcoded before is now data-driven. There's a fair opportunity for more of that, but it's already making a few things much easier to implement, like the combo breadcrumbs / menu I'm playing with at the moment.
With the basic cleanups (plus holiday weekend, jury duty, etc.) out of the way, I can begin the iterative redesign. Working through the source tree, it looks like there's a lot to do and no obvious starting point. I think I'll start with the download info — that seems to be an easy place to ease back into things.
It's been almost four and a half years — pretty much the lifetime of my recent full-time job — since I've updated this site. Now that the job has gone away ("reduction in force", leaving only founders), it's time to bring the site back up to date. The first job is to clean up broken links, fix copyrights, and all that jazz. Once that's done, I'll start on a (decade overdue) redesign.
With the CamelForth articles under my belt, I'm completely redesigning (and then rewriting) gjbforth; hopefully this version will be sufficiently clean and working to be able to actually pass a few non-trivial tests. On the plus side, I've got an implementation of NEXT that seems pretty fast, given that it's written in Perl instead of machine code. If more changes go this way, the new version will be a good deal faster than the old one (which, frankly, dragged).
I've posted the second entry in the code optimization miniseries. This one talks about why the application may be solving the wrong problem, and slowdowns related to poor choice of algorithm (or poor use of same).
Well, the -Ofun blog has broken 750 in the O'Reilly blog rankings; it's rising much more slowly now, but I'm still pretty jazzed.
A kind soul pointed me to a great set of articles about writing a Forth from scratch on embedded processors. Even if you're not planning to write for one of the ancient CPUs he covers, the articles are still wonderful. The author's stated approach is to discuss in great detail all the low-level workings that other authors gloss over, and I certainly understood a lot more about the Forth kernel after reading them. Anyway, I can highly recommend the CamelForth articles by Brad Rodriguez.
I've started a miniseries on code optimization in the O'Reilly blog. I'm not sure exactly how many entries will be in it, but the first one is now up, covering how to determine how your application performs in various circumstances, and generally where the bottlenecks lie.
A helpful person on #sdlperl let me know that the downloads area of this site, including the PPM repository, contained corrupted tarballs and ZIP files. I managed to track this down to a problem created when I converted my CVS repository to Subversion. The moral of the story: Before you run cvs2svn, make sure your cvswrappers file has entries for all of your binary file types! Mine had entries for images, but not for archives. I was able to fix this by booting up the old CVS box, copying the correct files over to my Subversion checkout, fixing the properties on all of the archives, and commiting back to Subversion. Sheesh. In any case, the downloads area and the PPM repo should be good to go again. As a side benefit during this process, I have gotten a logbot to join #sdlperl, so we have browseable logs now.
Thanks to the weekend slashdotting and links from some other blogs, last week's blog broke 1000 in the O'Reilly blog rankings. That's pretty decent, considering my previous best only managed to crack 4000 . . . .
This week's blog entry got slashdotted, thanks to chromatic (my editor at O'Reilly). This is pretty cool, though the quality of the comments (as usual with /.) varies A LOT.
The second entry in the O'Reilly blog series is up. Have at it. :-)
Today I posted the first entry in my new weekly "Perl etc." blog for O'Reilly. You should be able to follow the weekly posts either on the front page at or on my blog entry list page. Both seem to lag my actual posting a bit, unfortunately — I assume they are updated nightly.
I've been spending a decent chunk of time teaching myself Forth, and even implementing a simple Forth interpreter in Perl. It's a fun language to play with, to say the least. Anyway, thought I'd post links to online versions of Leo Brodie's two big Forth books, Starting Forth and Thinking Forth.
I updated some of the PIGGE docs. In particular, I added and updated some entries in the troubleshooting doc (and a matching entry for installation), and updated several entries (including the data gathered from the Valve gaming PC survey) in the trends.
I'm starting on a new Autodesk contract, which has been specced at 2-3 months of about half time. Looks to be some fun stuff. I've also been given the approval to open the codebase after I excise all Autodesk references. When I've done so, I'll post it here.

Also, since this is only a half-time gig, I'm available for other contracts as well; don't hesitate to drop me a line if you need a good Perl programmer.
All of the OSCON blogs have now been posted, over 20 in all! That was . . . exhausting, but I hope everyone enjoyed them.
Number three in the Perl 3D engine series is up! This one covers profiling, optimization with display lists, and rendering simple text to make a frame rate display.
I'm heading off to OSCON for the first week of August, and I'll be blogging all of the sessions and tutorials that I'm in on O'ReillyNet.
I've been spending a lot of time playing with Pugs, a Perl 6 environment that (mostly) works today. Pugs is run in a very anarchic manner, with commit access to the Pugs repository given out freely. This is working amazingly well. In keeping with this, I have uploaded the SDL_perl 1.x tree to OpenFoundry (the same project hosting service Pugs uses). The repository can be browsed at If you'd like to join in, just drop me an email, and I'll be happy to invite you to the project. In the mean time, please come visit on #sdlperl.
Wayne Keenan has done it again — SDL_perl is now up to 1.20.5 and has its own homepage here. It's also available once again as a PPM package for the Win32 crowd. Wayne's releases now have significant bug fixes and new functionality beyond that supported by SDL_perl 1.20.3 (Wayne's tree started with Debian's 1.20.3-1 package); once we've fixed a few minor issues, we're hoping the *nix distro packagers start to pick up these improvements as well.
In a continuing effort to make life a little less sucky for Win32 users, I have added a PPM repository to the downloads tree. It currently contains SDL_perl and a couple of my modules packaged for ActivePerl 5.8 on Win32. Over time, I will be packaging more of my stuff (including PIGGE) for Win32 and throwing it into the PPM repository. Source tarballs will of course always be available, since *nix is my primary development environment.
Wayne Keenan has sent me an updated SDL_perl for Win32 package. This 1.20.3 release should now fully support the code in my Building a 3D Engine in Perl articles. Partial PIGGE support is also in place and Wayne's tree contains additional fixes for PIGGE-required functionality, to be released soon.
Coded up a few changes and released PIGGE 0.1.2 today. New releases now come with a changelog, which is linked from the main PIGGE page.
Last week I finally got around to creating an account on use Perl. This week I put up my first journal entry there, hopefully to be followed by many more in the future. Also, I had forgotten to link the PIGGE source tree from the main graphics downloads area. That's fixed now.
Finally uploaded the PIGGE source tree, along with some prerequisites. W00t.
Managed to find some time today to fix the code that autoconverts the PIGGE docs from the source tree to HTML and uploads them here. Time to package the code and upload it as well. But first, some sleep.
The Autodesk contract has picked back up again, so the PIGGE uploads will be delayed. I have managed to update all of the code and docs to use the new project name, but now the automatic conversion of the docs to HTML is not working.
Version 0.1.17 of my TRISLAM Perl/OpenGL benchmark has been uploaded. Speaking of versions, downloadable scripts now generally have a $VERSION so that readers can tell at a glance if they have the latest revision (granted, things in urandom won't be updated that often, but still).

Also, I have updated all site references to use PIGGE instead of the old working name, which had been claimed by other graphics projects. Until I can finish converting the code and docs to use the new name, the documentation and downloads links for PIGGE are offline, but the screenshots are available.
At this point, I think I've got most of the old trash reorganized, updated, and generally beaten into submission. It's far from perfect, but at least it's generally consistent, and my online resume now includes the last three years of my career. Shocking, I know. Now to start adding new stuff.
It's been almost 3 years since this site was redesigned; I guess it's about time, eh? OK, off to trash (recycle?) the old junk.
The Autodesk contract has morphed from just fixing existing breakage and documenting everything in a more non-programmer friendly fashion to adding a number of new features to the system. To get even the highest priority remaining features developed, tested, and pushed would take more time than remains in the original contract I took over. So while I wait for a signature on the new PO I'm back doing my own thing for now. Ahhh . . . .
Number three in the Perl 3D engine series is up! Three more to go, once the Autodesk contract is finished.
Feedback on the first couple of articles has been light, but positive, so the editor at has agreed to extend the contract out to six. <quake>W00t!</quake> There will be a break after the third article, because I just took over a contract at Autodesk to continue development of the change management system I'd built for Autodesk IT in the spring of last year.
The second article in the Perl 3D engine series went live today. It includes a correction for the fully expected braino in the first article. Sometimes it sucks to be right. :-/ Ah well. Onward and upward! (And always twirling, twirling, twirling towards freedom.)
The first article in my series describing the creation of 3D engines in Perl was published today. I've got a contract for 3 articles, with an option to extend it if my readership and feedback are good. Giddy doesn't describe the feeling; there's too much abject terror mixed in. Someone once told me that the probability of saying something stupid rises with the size of your audience. This is a bigger audience than I've ever addressed before . . . .
Today is my last day as a full time employee of Autodesk (by choice, thankyouverymuch). I'm going to spend some time writing articles for and working on a from-scratch 3D game engine written entirely in Perl (of course). Wish me luck!
In preparation for tomorrow's news, I've been working with the editor at to get a contract for a series of 3D in Perl articles. Today, they published my writing sample, FMTYEWTK About Mass Edits in Perl.
2002-07-02 late
Well, I have taken all of the tests needed to enter the teaching credential program, and the subsequent family visits and trips are taking a break (for now, at least). So far I've gotten only the test results for the CBEST (I passed) — the rest will be coming at the end of July or beginning of August. In any case, I am now available for immediate work opportunities — contract or permanent. I've got at least half a year before starting my teacher credential program (and I may do it as night school when I do start, if I'm in a good permanent position at the time). Check out my online resume or send me an email.

Over the last couple of months, I've spent huge amounts of time preparing for the tests that I needed to apply to a teacher credential program, and then taking them. Right after that, I spent a couple of weeks visiting with family (some of which came to me, and some I went to), and finally, going to my cousin's wedding (CONGRATULATIONS!).

So now it's time to start working! I'm immediately available, and darnit, I want to do some coding!

For those wondering why the site stopped updating a month ago, it's because I've spent the last month studying for the PRAXIS math tests for prospective math teachers. The tests are this weekend. Wish me luck!
2002-05-11 late

Spent several hours at the computer today reworking my section of this site. Mostly this was a matter of copying things over from the v1 tree to the v2 tree, and converting to the new dynamic structure. I also moved a few things around, and finally archived the old .plan entries from June of 1998. Sheesh. We'll see if this time I manage to keep this up for more than a month. :-)

Anyway, there's still a lot of stuff to move over (including all of the T3D and Perl stuff), so more weekends will be sucked into this project, I'm sure. In any case, it's time for my nightly stretches and suchlike. G'night!

I updated some of the pages in my (Geoff's) section of the site to the new internal structure. There are a couple of visible changes, but perhaps the largest one is that I finally archived the *really* old .plan file and started a new one. :-)
I think I caught most of the old pages that link back to the old home page. Let me know if I missed any.
Yes, I know, if you go to one of the old pages, and try to navigate back to here using the navbar, you get the *old* home page, not this one. Until I fix this, please just use your back button or equivalent to get back here from old pages.
No, you are not hallucinating, this site is being updated! Hang tight, I'm typing as fast as I can. :-)

Well, it's been a couple of weeks since I last put fingers to keyboard here. The conditions are the same as those last time I wrote; it's been a beautiful day, and I've stayed inside and typed. Mostly I just worked on the web site and dealt with old emails (I was almost 3 months behind in required responses). On the good side, yesterday I went to my sister's baby shower, and our gifts (a midsized Pooh bear and a onesie [sp?] with a Pooh scene on it) seemed to match the general theme, as by coincidence at least half of the gifts were Pooh or generically teddy-bear oriented. All the little kids wanted to play with the Pooh doll, which I suppose bodes well for the baby.

Well, I'm happy to report that the ESS 2.0A master actually worked, and we've been shipping to customers for a couple weeks. That's a load off my mind. Since the ship, a couple of my old tasks have been shelved, and I've gotten a chance to upgrade my desk to 100Mbps Ethernet (finally), as well as actually install the Linux I bought and start using it. It's already proving its worth, because one of my new jobs is to learn to build the various parts of R/3, SAP's flagship product. This is harder than it sounds, because there's somewhere around 25000 source files (adding up to 300-600 MB, depending on the version), about 500 of which are makefiles alone. There is no standard build documentation, and what source code documentation exists is unfortunately both sparse and half in German. I could not find a reasonable tool to help me figure out what makefiles do what, especially because there is a lot of conditional and macroized crap that makes everything harder to read. They even have a make wrapper called mapro (MAke PROgram) that does nothing but set up some 150 environment variables needed by the makefiles.

Eventually, I settled upon a bit of a hack. I created a dummy makefile on the NT box (where I need to do the compiles, so that my NT-using workmates can make use of the result) that did nothing but capture the environment variables into a bash script that would recreate them on the Linux box. I used smbmount (basically the converse of Samba) to view the NT source tree from the Linux box, and next week I get to test whether this arrangement allows me to convince various Linux code-management tools, such as makedepend, that they are, in fact, compiling an NT version of the product. Of course, if anyone knows an easy way to work around this and just see what makefiles produce what, and in what order they must be run to produce some needed target and its various parts, I'd love to hear it. I tried Cygnus Source Navigator (well, actually, I read the docs), and not only can it not handle a project as big as R/3 without a license fee, but it doesn't seem to handle inter-makefile dependencies well. And don't even get me started on how evil it is to require a network license manager . . . .


Nothing like spending an absolutely stark raving beautiful day inside typing. What a maroon!


Well, I suppose I should know better than to say we shipped before the product actually goes out the door; the number of times that we got oh SO close and then failed to actually ship because somebody found something else is utterly ridiculous. On Friday we actually managed to send it out to be copied, but we'll see whether we manage to cancel it before we get the distribution copies back from the manufacturer (Imation). The whole group is getting seriously stircrazy, and whenever there's a delay, the accusations are flying fast and furious about whose fault it is this time. I figure if we don't ship to the customers within another week or two, people will start buying assault rifles.

Meanwhile, Marcy's server has been down for several days, and her group (she has a day job at the same company as me, but in a different department) has a beta due next Friday I think. This means the chances are good that we will have to get off our duffs and go in to the day job office to make up lost time; the server just came back up a little while ago.

1998-06-10 late

We went gold today on ESS 2.0A, the product that I work on at my day job (SAP Labs Palo Alto). Hopefully it will not be found buggy before we manage to get it back from the manufacturer and ship it to people; it's been a long road of bugfix after bugfix for us, but it seems to be one of the cleaner releases we have done. At least, we know of fewer things broken at release time . . . .

I ordered Red Hat Linux 5.1 today, along with a whole passel of manuals. I'm going to finally jump on the Linux bandwagon, I think, after many years in the Wintel world. The last time I used any Unix-like OS was back in college, nearly a decade ago; it will take a little while to get back into the swing of things, I'm sure, but friends tell me Red Hat is the easiest one to transition to from the NT camp. Wish me luck.


God I hate mornings. I am so not a morning person, it's just plain silly. I have the annoying habit (well, to my bosses, at least) of getting up two hours plus after my alarm started going off. My only consolation is that Marcy is no morning person either, though that certainly doesn't help us get to morning meetings any more frequently. Of course, if she were a morning person, we sure as hell wouldn't see much of each other!

Time was that you could count on PC Magazine being about the best Wintel-focused, English language consumer mag out there, and ZD Labs kicked ass themselves. Nowadays, the online portion of Ziff-Davis ( here in the US) seems to be a poor child of the glory years; they somehow feel the need to link words as common as PC to their glossary, use that annoying Click here for phrasing, and come up with comments like today's Compaq builds first all-digital PC. Sheesh.


Here it is, the first entry. Happy Zeroth Birthday, .plan! Alright, that's all folks. Nothing to see here. Go about your business. Stay away from the yellow tape, please.