Wednesday, February 20, 2008

Cowtown Classic Project I: Codebounce Applet

The first "Forgotten Project" (see Forgotten CTC Projects) to be refurbished is a simple applet called CodeBounce. It's one from class of things ("those goddamn useless applets") that many web surfers in late 90s considered a major annoyance. Had it been deployed by hordes of home page designers, it might have been infamous. It was not, for better or worse. :-)

Applet (which can also be run as a command-line application, via "java Bounce") is simple eye candy, displaying hard-coded number of elastic bouncing balls, bumping into each other and so forth.

Now, there is nothing spectacular here, just 600 lines of trivially simple position and velocity calculation code sprinkled with AWT code. But it is kind of amazing that it still works as well (or poorly) as the day it was written, come to think of that. At the time JDK 1.1 was already mature, and that was the platform on which it was tested, although browsers still only or mostly supported 1.0.2. And runs just as expected on JDK 1.6, including adapting to resized main window (well, as I said, as well as it ever did). It was also cool that even when Java still did run slowly back then, as interpreted language, applet was plenty fast on an antiquated Pentium 66 mhz PC and Netscape browser.

At the time I had done at least 3 other apps in Java (NetReaper, Fractalizer/Fractlet and JiveTerm a.k.a SafeTerm, and this is by far the simplest. But I kind of like that -- writing Java apps and applets was refreshing: after having to write thousands of lines of C code to get anything to show on a window, 600 lines of code for this puppy seemed very compact indeed (although not nearly as compact as those 100 line basic programs in C-64, but close enough, and much prettier).

So that's the part explaining "what". But more importantly, why? Why was it written? CodeBounce project page talks a bit about this. Basically, I wrote it as a proof-of-concept, trying to figure out some simple animation, to be used as an Easter Egg for a well-known and widely used commercial application. In the end, things worked bit differently: easter egg(s) were added (go Phoenix team!), but this particular idea wasn't used. It was simpler to use static graphics and straight-forward linear shuffling. But writing the thing did help in many other ways -- I hadn't used Java for almost a year at that point (having had to work on C, C++); but going back felt like home. So I was even more motivated to find a company that did use Java. I did, and got hired there (company's name nowadays even reflects their use of Java; that's the only hint I'll give). But that's another story for another day.

Oh, and as to the Easter Eggs: sad thing is I don't even know how many (or any?!) users know about these particular ones. Many people are familiar with the "martian guy with laser gun". But I doubt many have seen the "shuffling web form components". It was still cool to have added my own "footprint on concrete", so to speak. Besides, there's at least one other cool Easter Egg in there, which adds "eyes that follow mouse pointer" in there, that I didn't write but knew about, and which probably is as little known as ones I worked on.

Forgotten CowtownCoder Projects

While taking a walk down the memory lane last week (see Woodstox Pre-History), I remembered something that had slipped my mind for a while: there are projects that used to have home pages at CowtownCoder, but that basically got orphaned during ISP migration. The idea at the time must have been to focus mostly on active and relevant projects, like boring old xml parsers and such. Fortunately the old project home pages were obviously archived and well preserved, so I figured it would be nice to refurbish ones that have some significance to me: either by maybe being useful, or if not, providing some entertainment value.

Ok, so I will just copy over old home pages, source code packages and such? Well, more important than this, I will not only slightly clean up the pages (and, heh, add some useful decorations that you may notice on the right-hand side of the page -- keep in mind that they are interactive, too, you can like, click on them too, to see even more pertinent information!), but I will also produce a blog entry discussing each and every project. Think of it as preservaction of Geek History by documenting obscure projects that Tatu once worked on for whatever reason it was at the time. Damn I feel good to be such a dedicated preservationist! (is there such a word? now there is!)

So: you may see new links starting to pop up at the Hatchery page. And you should also start seeing short descriptions of the same projects, with some choice "Author's Commentary" entries on this very blog (you will have to wait a bit longer for your picture DVD containing the same: and please, do not hold your breath). Stay tuned!

Monday, February 18, 2008

Release Early, Release Often: Jackson 0.9

After fixing couple of bugs in mapper, I decided to release the next pre-1.0 release of Jackson Json Processor, version 0.9.0. There are no drastic changes, just couple of bug fixes.

As usual, release notes lists changes, and CREDITS file lists kind developers who have helped weed out the bugs fixed.

Friday, February 08, 2008

Woodstox pre-history

"So How Did It All Start?"

As an author of a highly publicized software package, one often has to answer questions like above. That -- in addition to the fame, money and chicks -- is one of fringe benefits of being an uber-geek programmer doG.

But, ask you: how does that relate to me? Sadly, not in any way, shape or form. But I just thought I'll start with such a claim to grab your attention.

Anyway: the other day I started thinking about how I would answer such a question if anyone ever asked it. Interestingly, I am already having hard time remembering exactly when did Woodstox project start, as well as important milestones there have been. This despite the fact that it hasn't been a life-long hobby (although countless hours have been spent on it). What is curious here is just the difference between new projects, where you can usually remember details well ("see, I added that feature on tuesday, this other one on thursday, and that thing will be done... say, tomorrow"). But it doesn't take all that long to start losing track of history.

In Woodstox' case, I am lucky enough to have left a trail of mini update notes via crude Woodstox news section at Codehaus. That log points to mid-2005 being one of highlights, release of version 2.0 with its full DTD-validation (full albeit not fully compliant, as I learn during 3.0 development...). That is a starting point, at least, outlining more recent, and somewhat less active, development history (although, granted, 2.0 -> 3.0 development cycle may have burnt more time than either getting 1.0 or getting 2.0 out the door).

But there was obviously some history before 2.0 release. I am no Microsoft, and my versioning scheme does not skip Important Release Numbers like 1.0!

Ok, but what REALLY happened?

Now, while I do not keep diary, I happen to have something similar at my disposal. My old linux desktop file system still has a copy of the earliest Woodstox home page (which, back in the day, was hosted here at -- heck, I suspect I ordered the domain just to have a kewl domain for Woodstox, if my memory serves me), along with matching timestamps for downloadable files. So sequence of events, assuming timestamps are correct, is as follows:

  drwxr-xr-x  3 tatu tnt  4096 May 30  2004 0.7
  drwxr-xr-x  4 tatu tnt  4096 Jun 21  2004 0.8
  drwxr-xr-x  4 tatu tnt  4096 Aug 13  2004 0.8.8
  drwxr-xr-x  4 tatu tnt  4096 Aug 13  2004 0.9.0
  drwxr-xr-x  4 tatu tnt  4096 Aug 25  2004 0.9.1
  drwxr-xr-x  4 tatu tnt  4096 Oct 11  2004 1.0-final
  drwxr-xr-x  4 tatu tnt  4096 Oct 23  2004 1.0.1
  drwxr-xr-x  4 tatu tnt  4096 Nov 14  2004 1.0.2
  drwxrwxr-x  4 tatu tnt  4096 Mar  2  2005 1.0.3
  drwxrwxr-x  4 tatu tnt  4096 Mar 10  2005 1.0.4
  drwxrwxr-x  4 tatu tnt  4096 Mar 23  2005 1.0.5

So, given that I think version 0.5 must have been the first official release (ok ok, so my versioning scheme does have its quirks starting with "half versions"), which probably was cut somewhere in March 2004, Woodstox project could soon celebrate its 4th birthday. As such it has probably outlived commercial systems I have ever implemented...

Now, looking back in time is enlightening in many ways. Although exact release dates in this case are of historical curiosity value, if any, they can have surprisingly high indirect value: they can help one remember more important things that happened at around same time. For example, the thing that triggered my starting the project must have been the death of my-then-coolest project at Sun Microsystems (the [in]famous Voyager content management system!). Seeing it get killed due to politics, to be replaced by something more absurdly stupid than the Bad-News-powered rocket ship from the Hitchhiker's guide was just the kick in the balls I needed to spend less time at work, and focus on something cool outside working hours. That, and a very session by the Great Pragmatic Programmer mr. Dave Thomas, that I also listened to at about same time, explaining why one must have The Plan for skill development. Developing an xml parser may not seem like the optimal choice, but it "just seemed like a good idea at the time".

Woodstox project also was one of things that made it easier to stay at that job (although switching to a different team to avoid having to implement that idiotic replacement system) for almost a year, before I could move on to better things (despite having basically lost all my respect for my managers and company, not to mention motivation). And interviews to this Better Thing (which is still my job after this time) must have occured at almost exact day I released version 1.0! (or, rather, night after I flew back from Seattle). And, very very close to 9 months before birth of my younger daughter... :-)

Scary but true -- when it's raining, it's pouring. I better check timeline of Jackson and Aalto Xml Processor in a year or two. Or perhaps even my First Open Source project, JUG (Java Uuid Generator).

Wednesday, February 06, 2008

Maintenance releases: Woodstox 3.2.4, Jackson 0.8.2

Public service announcements for 2008

Quick update on state of projects: both Woodstox and Jackson projects released minor bug-patch versions to kick off the new year.

Releases are available from respective home pages, and here are quick links for change lists:

Related Blogs

(by Author (topics))

Powered By

About me

  • I am known as Cowtowncoder
  • Contact me
Check my profile to learn more.