The Long Slow Death of Apache

Meh!

Two steps forward, four steps back. I’m still (day number 4, maybe, I’ve lost count) trying to get a Turbine/Torque web application up and running with the Maven build tool. Here’s a short list of some of the difficulties I’m facing….

Torque (an OM layer for the database) has the capability to generate Java classes based on an XML schema of your database. It can also generate the sql scripts to run to actually generate the tables defined in your schema file. NIfty, eh? Well, yesterday, I managed to convince Maven to actually generate the sql scripts, run them in the database, and generate the Java class files. Fantastic, I thought. I’m almost home. Now, let’s just do this:

# maven java:compile

and I’ll actually have a deployable web app. Right? Wrong! The compiler spit out about one hundred messages, ranging from syntax errors within the generated code to missing libraries. The missing libraries errors were especially nice because:

1. The plugin used by Maven is built around Torque 3.1
2. The current production release of Torque is 3.0.1 (released THIS MORNING)

Nice. Attempt #1 to fix this problem: get a copy of the latest Torque source from CVS, build it, and it should work right? Wrong!

Attempt #2: Get the earlier version of the Maven/Torque plugin (3.0). Wrong again!

Well, I walked away from that yesterday. Today, I thought I’d try again. So I typed:

# maven torque:main

And Maven says:

Goal "torque:main" does not exist in this project.

SWEET!!!!

I nuked the Maven installation, re-installed….same problem. Right now, I hate Maven. I wish it would curl up and die a slow, painful death.

So what is the problem here? Well, many of the Apache Jakarta projects share developers, especially the Turbine/Torque/Maven projects. These guys started to develop Maven (which is currently at version 1.0beta9) and began to use it to build the other projects. They liked Maven better than Ant (the standard Java build tool — also an Apache project) so they decided that the newer releases of the other projects would also require Maven to build instead of Ant. While it sounds nice as a concept, the implementation just doesn’t work. The problems start with the Torque version issue I outlined above. Since the developers, who are working on Torque 3.1, are using Maven, they thought the latest release version should include the plugin for Torque 3.1. Well, fellas, no one else is using Torque 3.1. So we’re sorta screwed.

Another problem…documentation. Now, most open source projects suffer from horrific documentation, but these projects suffer even more. To really get things working, you generally have to find kludges, and each person has their own set of kludges that work. Unfortunately, only one person writes a HOWTO, and it only includes their kludges. Some of these work for me, others don’t. At point, I received a response to a question I posted to the Maven mailing list that said sorry I can’t help you, but my system just works. It’s almost like it comes down to luck. That sounds like a great way to run a software project — maybe we’ll get lucky today and our build system will work as advertised.

Well….it’s a little later now. I’ve actually gotten a bit closer to resolving the issues, but I’m battling a classpath issue I thought I had solved yesterday concerning our database driver. What a mess. We’re giving this til the end of week, and if we can’t get it up and running, we’re moving back to Ant.

New Toys

I’ve always been a KDE man. I’ve never really used GNOME, unless I absolutely had to (as some apps don’t port easy across desktops, due to the different engines used by the desktops — QT for KDE, and the GTK for GNOME). But then I read this interview yesterday with one of the Ximian developers about the latest release of their desktop, built on top of GNOME. Very pretty stuff.

What’s been bugging me about KDE 3.1 ever since I started using OS X a bit at home is the lack of a coherent style. If I import a theme, _most_ applications will apply that theme, but others won’t. I know that’s sorta nit-picky for a guy who uses Slackware at home, but if I wanted a crappy looking desktop, I’d cut down my CPU overhead and just use a basic window manager and call it done. The reason I use a desktop environment is cos I want it to be pretty. And I want everything to look pretty. RedHat has tried to address this, with their BlueCurve theme, which does a decent job of applying the theme to all applications. But the new Ximian desktop could be a big step forward. It’ll be a slight pain to get everything tweaked the way I’d like, but it could be worth it…..

Odd News Bit

From local news…..
Rock singer guilty in naked walk around hotel

Learning Experiences

Quite a busy day at work. We went from pretty casually doing design work for the next iteration of the product, to madly rushing to ramp up to do development work. Yeesh. Just a bried overview of today’s fun:

* Finish design work on the application’s search engine.
* Setup a new instance of the application framework (Turbine).
* Set up CVS.
* Set up the build environment for the application. We’re trying to migrate away from Ant and toward Maven. Maven has some really nice features, and a very large plugin selection, but it’s still not even at version 1.0, so documentation is pretty sparse, and often incorrect.

More fun is expected for tomorrow, when I have to begin coding the search engine, while still continuing the above tasks…..

Everybody’s All Wet

Had a bit of poopy day yesterday…an old consulting project reared its ugly head, and I’ve had to say no, sorry, I can’t help you right now. There aren’t enough hours in my day. I was feeling pretty crummy, but something pretty amazing happened. We had dinner with the in-laws, then went home. I was tired, but it’s my job (though I don’t look at it that way) to give Seb his bath. We’ve been able to actually give him real baths now (instead of sponge baths) since his imbellical cord stump fell off, so I filled the tub, got his bath stuff, and Jen handed him to me. Just being able to spend 10 minutes with him, bathing him, made me forget about all the crap that had happened. It was quite nice. It also helps, by the way, that he sorta likes his bath…..

Rode my bike to work this morning too, in the driving rain. It was quite nice, actually. It was just cool enough that I wasn’t freezing, but I also wasn’t sweating buckets under my jacket. While it isn’t as pleasant as riding on a nice, sunny day, a nice wet ride is still enjoyable, in its own sick, twisted way.

Java This

So…here’s a lively discussion about the preview release of Java 1.5 (Tiger). There are many new features, some interesting and useful, and others that some may call syntaxtic sugar. I found the whole discussion interesting because Java is fast becoming M$ bastard brother. Many in the open source community are leary of the langauge, because it is still controlled by Sun, and therefore is a Bad ThingTM. Personally, I think it is a great language for server-side programming–powerful and safe (no icky pointers), and with the introduction of the SWT, it has the potential to move onto the desktop. But so many people think that we should all be programming in Schema, Smalltalk or Eiffel. I’d love to do that, but I’m not in academia, and employers looking specifically for those languages are few and far between. Java is a fine compromise…still very object-oriented, but with enough (some would say too many) libraries to make it attractive to business.

In other news…

I’ve been listening to more pop lately…a quick rundown of what’s been playing:

* Pedro the Lion, especially It’s Hard to Find a Friend. Not David Bazan’s most coherent album thematically, it’s still full of wonderful, truthful songs.
* Bedhead — Transaction De Novo. Lepidoptera is my favorite song, ever. Seb really digs it too.
* Death Cab for Cutie — Various. Really good pop music.
* The Promise Ring — Various.
* Versus — Various.

News

Lil Seb got to meet some of our climbing friends last night at the shop. It good to see a bunch of our friends again…..

Saw something really, really silly yesterday on a little lunchtime walk around Squirrel Hill. Some kid had an Audi A4 tricked out to look like an S4, including all the S4 badges and ground effects. It was nice and all, but if you’re going to do that, you should really remove the A4 badges so you can at least fool people who don’t know what an S4 really looks like. Duh….

In work news….I’ve successfully built a test application (a POS of some functionality we want) with Maven, and I’m getting ready to attempt a test with Cactus. If all goes well, that means I can move on to looking into better client side testing techniques (like HttpUnit.

Apache">Apache

The Apache Project is probably the biggest open source technology project besides the GNU/Linux kernel (and distributions). Best known for its web server, the Apache group also has a very lively and productive Java group known as Jakarta. The Jakarta group is best known for the Tomcat application server and the Struts framework, but there are many, many, many other projects under the Jakarta group.

Enter me….

Here at the new job, we use the Turbine and Torque frameworks for our web application. Turbine is basically Struts on steroids–on top of providing a high level interface for handling web requests, it also includes a number of services (not “web services”, just “services”) such as security (things like access control lists for the site, user management), XML/XSLT transformation, form validation, yadda yadda yadda. The Turbine project is fairly young, and that means one thing–the documentation sucks. What little documentation there exists is written by the guys the wrote the framework, so they understand how everything works, which leads them to leave out important bits and pieces that they often assume is common knowledge. Often the best source for information is the Turbine user mailing list, but unfortunately, the archives are often unaccessible…..fortunately, most other users are in the same boat, so simply posting to the list generally gets you a quick answer, regardless of how ignorant the question is.

So after a month or so of hacking, I’ve got a decent handle on Turbine. Great. Now, we’re in the middle of a redesign of the entire app, and I’ve been chosen to head up the testing/QA department, so I’ve been looking at various testing frameworks. The tried and true framework is JUnit, a Java-based unit testing framework. While JUnit is very powerful, it is better suited to standalone applications, as you don’t have to worry about instantiating the application server container objects (like HttpRequest, HttpSession, etc) to run your tests. So, being the clever folks they are, the Jakarta group has written a framework on top of JUnit called Cactus. Cactus allows you to instantiate all your container objects within your tests, allowing to write the tests on a client machine, move the tests to the server, and test either via the command, a tool like Ant, or via web interface. Fantastic, I say….sign me up….

But….

Cactus is build for straightforward web applications–that is, an app that doesn’t use a framework like Struts or Turbine. These framework generally hide things like HttpRequest from the framework, wrapping them in other objects for easier state management. So is Cactus is unusable? Not according to the Turbine users list. Several Turbine developers were nice enough to post code fragments for using Cactus to test Turbine classes. Great! But then, no one was nice enough to post information about how to configure Cactus to properly use Turbine (which is where I am right now). But Brian, why don’t you just read the documentation on the Cactus site? you ask? Well, follow the Cactus link above and you’ll find the site is about the 1.5 dev release, which means it isn’t technically a release. To download Cactus 1.5, you’ll have to find the latest nightly build, and hope it works. Nice eh? Again, it’s like the developers are doing this project for themselves, and if you can catch on, you can use it too.

So I’ve running around in circles today. I’ve come dangerously close to getting a real, live unit test for Turbine working with EasyMock, but Ant is being kinda dumb about a classpath issue at the moment. Currently, I’m printing the manual for Maven, yet another poorly documented build tool from Apache….this one, however includes automagic Cactus testing, so it’s at least worth a try.

Interesting

I don’t know if anyone has been following the SCO/IBM lawsuit, but it took a very interesting twist today. First, a little update if you haven’t been following it…..SCO has claimed that they own the copyrights and patents for Unix System V, and that IBM (who has licensed that code base) has donated parts of the Unix code to the Linux community, and this has violated the patents and copyrights held by SCO. Basically, according to SCO, if you’re running some flavor of GNU/Linux, you’re violating their copyrights. Now, many folks in the Linux community have asked SCO to show the community what parts of their code are currently included in the GNU/Linux kernel, but SCO has not complied.

Today, in an interesting twist, Novell has claimed that they own the copyrights to Unix System V, and SCO is just a license holder. But, the twist gets even twistier–Novell also says they are happy to be a contributing member of the Open Source community, and that if code from System V has found it’s way into the GNU/Linux kernel via IBM, that’s just fine with them.

SCO has issued a response, but it really makes no sense whatsoever.

Currently, SCO looks like a idiot at best, since Novell has backed up its claims with information from the US Patent Office. Time will tell how this all plays out.

Too Cool

Seb has now decided that sleep is optional. He’s been eating more often (more and likely a *growth spurt*), and sleeping less at night. This equates to less sleep for me, and even less sleep for Jen. We’ve decided to no longer try and *put him to bed* and just let him fall asleep in our bed. We were one big happy family last night on the bed….seb, jen, betty, wolfgang, and me…..

In other news….

The Gentoo install continues. By the time we got home last night, the basic compilation of the various packages and applications was finished, and this morning before I left for work, I configured the kernel and started that compilation. That might be done before I get home, and I might be able to actually boot the system tonight. That is, if I don’t pass out between then and now.

Longest………Install………Ever

I finally got around to installing Gentoo on the second hard drive in my PC today. Note the verb tense — installing — rather than installed — because two and half hours later it is still installing. There are two selling points for Gentoo. One, the initial download is small. Even if you download the whole LiveCD installer, it’s still only 400MB. Two, the newly installed system will be completely customized for your machine.

It is this second feature that makes the install so lengthy. Once you’ve put the basic system on your machine, you tweak a make.conf file to indicate things like your CPU architecture, speed, RAM, etc. Gentoo uses a system (“portage”) that is similiar to the BSD Ports system, which allows you to download the latest and greatest versions of various applications. The difference is that the Gentoo package management, unlike RedHat or Debian doesn’t just download a package and install it. The Portage system will check out your make.conf file, and compile every package with tweaks for you system. So…unlike when you install Redhat and it just dumps a bunch of precompiled binaries on your machine, Gentoo compiles each and every package (including your basic GNU tools–things like ‘ls’ and whatnot) to be customized for your system. Crazy.

In Seb news, he had a big yesterday….first church, then a trip to the Posted on