Java News from Wednesday, September 12, 2007

It's 8:30 A.M. Norway time at JavaZone. There's a "rocket ship" outside the front door blowing smoke through the hallways. Nobody seems to know where the speakers check in. Me and two other speakers from Britain got sent through the parking area into a hard hats only area where a guard rescued us. (My wife suspects the guards thought we were asking where to bring the amplifiers. That sounds probable, especially given what was about to happen on the show floor.)

The conference is opening with a very loud death metal band that started playing at the stroke of 8:00 (A.M., not P.M.) Hmm, looks like they breathe fire. Most people in Norway do speak English, but not everyone; and most especially not when you have to shout over the death metal to be heard. Update: I'm told it's actually "Neue Deutsche Härte" metal, not death metal. I confess the musical subtleties escaped me.

Sorry. No pictures. My wife has the camera this morning. I still don't have a badge, so I'm not sure if I'll be able to get into any sessions other than my own. I should be able to get into mine. Most of the guards seem to just wave you on through if you blabber at them long enough. I'm not sure any of them understand what I'm saying--I'm not sure if anyone understands anything anyone is saying over the death metal--but they probably figure that if they let you through you become someone else's problem. At least there's wireless.

Bjarne found me on the show floor and told me where the speaker's lounge was. Just int time too. I think the band was about to start juggling knives. (That or swallowing them, but I really didn't want to stick around and find out.) The speakers lounge is hiding upstairs in a restaurant that seems well-protected from stray flying knives. Up here he death metal is a relatively low background rumble, It's still not my choice for early morning easy listening, but at least the stomach-rumbling bass lines are muted sufficiently. Along the way I ran into Tobias who promised to find me my badge so I should be squared away soon.

I caught the tail end of a session on a Contributing to Open Source at whihc once again the myth that Java is somehow incompatible with the LGPL was repeated. It seems that no matter how many times the FSF and others deny this canard, it just keeps coming back. It's the Java equivalent of, "Iraq was responsible for 9/11", "Republicans are the party of fiscal responsibility", or a "A dying child in the hospital wants you to send him postcards." It is a dangerous meme that seems completely immune to the truth.

There is no validity to this claim whatsoever, and I wish people would stop propagating this myth. The whole idea is based on the mistaken belief that the LGPL treats static and dynamic linking differently, but it doesn't. A variant sometimes claims that it is inheritance that makes the LGPL incompatible with Java. That is also false. Of course, it is hardly just Java that supports inheritance or dynamic linking. If Java is incompatible with the LGPL, so is C++, Objective C, Smalltalk, Eiffel, Python, Perl, AppleScript, and pretty much every other language invented in the last 15 years. There is nothing unique about Java that in any way affects its compatibility with open source licenses, LGPL or others.

The second morning session has Markus Krüger talking about Performance Analysis with JMeter. We're a little cramped in here, and there's no wireless so I probably won't take notes on my laptop. Bottom line: seems like a good tool. I should explore it further when I get home.

My own session on Refactoring HTML went well. We had about 200 people in attendance and most of them stayed for the whole thing. I did have to go through so many points at lightning speed. It would have been nice to be able to give a few more details of exactly how to implement some of these refactorings and some more evidence that they are in fact good ideas; but in 60 minutes you can't do more than hit the high points. Maybe next year I can do a full day class on this somewhere. I'll post the notes here soon.

The next session I'm attending is Mike Aizatsky's JavaScript Puzzlers. I don't really know JavaScript well, but I feel like it may be time to learn more.

JavaScript returns undetermined from functions with no return value (like Python's None). Weird and very un-Java-like. Also, there are no ints. All numbers are floating point numbers. I remain convinced this language should never have been renamed JavaScript. Not that it's a bad language, just different.

On the other hand, JavaScript does share Java's (and C's) broken semantics for switch. It also contains octal literals. Does anyone ever use those any more? Did anyone ever use them? Why did the designers of JavaScript have to keep the broken parts of Java?

For the next session I'm torn. There are two I really want to see: one on Apache Wicket and a case study about replacing JMS with a simpler, homegrown solution that stores all the state in the database. I've been banging my head against JMS a lot for the last few months, so I'll probably go to that one if there's room. Then again I'm quite tired after a week in a foreign time zone, the Apache talk is in the same room, and the JMS talk is across the arena. Hmm, looks like the Apache folks are advertising "a refreshing lack of XML". That's a bug, not a feature. Web applications are one of the two cases where you need XML the most. Not only that: their very first Hello World example is namespace malformed! Finally, it all sits on top of the hideous servlet architecture, including web.xml. The place where XML arguably doesn't belong is the one place they keep it. I think I'll go listen to the JMS talk instead.

Lunch was cold sandwiches: skink og ost (ham and cheese) and similar. However, for the afternoon snack they seem to have roasted an entire cow and are now slicing it up on the exhibit floor. I wish I had my camera. Normally my carnivorous instincts would be intrigued, but I'm afraid the combination of jet lag, speaker stress, and the rich Norwegian food has disabled my digestive system for the time being. Still, a whole cow?

The speakers here are an unusually diverse group. I only know about three of them. Normally I see the same faces cycle through these conferences again and again. Most folks aren't giving more than one session, and several are delivering presentations in Norwegian. There's also a decent sized exhibit floor. Roughly half the companies exhibiting seem to be here to recruit Norwegian speakers for developer jobs. Definitely not a replay of the typical U.S. conference.

Eirik Maus's session on replacing JMS was very interesting. In brief, the speaker's company (BBS) had wasted a year trying to make an IBM JMS server work for banking applications. They replaced its 2GB of JAR files with twelve homegrown interfaces and an Oracle database, and now it works and is more reliable. The database server is now a single point of failure, but previously the NFS server where the single transaction log was stored was a single point of failure. He also noted that 90% of their failures were related to redundant systems designed to eliminate failures. The more redundant, fault-tolerant pieces they pulled out of the system, the fewer pieces there were to fail and the more reliable the whole system became. Some of the problems with JMS he attributed to IBM's specific implementation, but others he felt were a direct consequence of the architecture and not fixable by any vendor. One problem was undocumented serialized objects stored inside the database. When a message did get stuck, it was impossible to use SQL to unstick it because you didn't know what it said.

For what will probably be my final session of the day (I need some sleep and aspirin) I'm listening to Thomas Helberg and Per Hengshoel talk about Scripting in Java 6. I'm not sure if this will be anything new I didn't hear at JavaOne, but I'm hopeful.

Even I'm more tired than I thought or this session is in Norwegian. I think I may go home early. I think Kirk Pepperdine speaks English. I'll switch rooms.

OK, this talk is in English. I'm good. He's starting with a Google video by Plaxo's Joseph Smarr from OSCon. (Anyone have the link?)

Being methodical and getting good solid measurements is important for performance.

Three performance testing antipatterns:

Memory leaks never cure themselves. If a problem cures itself, the problem is load. The generational count of an object tells you what is leaking.