January, 2005 Java News

Monday, January 31, 2005

Tivo's released an alpha of HME, an open source (Common Public License) software development kit written in Java for the Series2 TiVo DVR. It does not work with earlier models, or DirecTV Tivos. I haven't yet figured out exaclty what this does and doesn't allow you to do, but if it provides enough access to the core system, this could be really interesting; and be a key component of helping Tivo survive the coming onslaught of MythTv/Freevo on one front and the MPAA on the other. The major question is whether any part of the system is still effectively locked off from programmer access. According to the FAQ, "The HME Early Access release can be used to create great looking applications that display on TV and interact with the user through the TiVo remote control. You can also stream mp3s to the TiVo DVR for playback. Future releases will expose more of the TiVo platform, including the DVR features." What I want to know is whether the SDK will allow me to write and run essentially any Java application on a TiVo.


For all the hype about freedom of speech, this year the United States ranks only 22nd in freedom of the press, according to the Third Annual Reporters Without Borders Worldwide Press Freedom Index (and that's only if you don't count U.S. occupied Iraq. If you do count Iraq, thge U.S.'s score gets a lot worse.) The U.S. is still ahead of most of Asia and the Middle East, but behind most of Europe, including the former Soviet bloc nations of Latvia, Lithuania, Estonia, Slovakia, and the Czech Republic. "Violations of the privacy of sources, persistent problems in granting press visas and the arrest of several journalists during anti- Bush demonstrations kept the United States (22nd) away from the top of the list." Cuba, North Korea, Burma, Saudi Arabia, Iran, China, Eritrea, Turkmenistan, Nepal, and Vietnam make up the bottom of the list.


The Jakarta Apache Project has decided that Tomcat 5.5.7 is now stable and ready for production. Tomcat is an open source servlet container for the Apache web server and the official reference implementation of the Java Servlet API and Java Server Pages (JSP). "Tomcat 5.5 is designed to run on J2SE 5.0 and later, and requires configuration to run on J2SE 1.4....In addition, Tomcat 5.5 uses the Eclipse JDT Java compiler for compiling JSP pages. This means you no longer need to have the complete Java Development Kit (JDK) to run Tomcat, but a Java Runtime Environment (JRE) is sufficient. The Eclipse JDT Java compiler is bundled with the binary Tomcat distributions. Tomcat can also be configured to use the compiler from the JDK to compile JSPs, or any other Java compiler supported by Apache Ant." This implements version 2.4 of the Java Servlet API and version 2.0 of Java Server Pages.

Sunday, January 30, 2005

Werner Randelshofer has released the Quaqua Look and Feel 2.8, "an extension for Apple's implementation of the Aqua Look for Swing. Quaqua aims at fixing inconsistencies between user interface elements implemented in Swing and those of native Mac OS X applications. To achieve this, Quaqua selectively replaces UI elements of Apples Aqua Look And Feel with elements of its own." Quaqua is dual licensed under the BSD license model and the LGPL. Java 1.3 or later and Mac OS X 10.2 or later are required. This release improves the UI conformance of JFileChooser.

Saturday, January 29, 2005

Marc Ramsey has pushed the earliest date for filename extensions back to 1965, by finding a DEC PDP-6 brochure that shows a file extension on page 16 and a manual that shows file headers containing 1-6 character names and 1-3 character extensions on page 14. He writes, "Active development of Multics didn't really begin until 1965, and file extensions there were implemented only as a naming convention (as they are under Unix). The immediate predecessor of Multics, CTSS, had a notion of primary and secondary file names (up to 6 characters each), but not file extensions as such. My current guess is that DOS/Windows style file extensions originated on the original BBN/MIT PDP-1 timesharing system circa 1962 (from which the PDP-6 system was conceptually derived), but there is very little information available on that system." The PDP-1 dates to 1960. However, the ealriest models did not have disk drives or file systems. An October 63 PDP-1 handbook describes a tape drive for the PDP-1, but does not even use the word "file"; so it seems likely that the PDP-6 was indeed the first DEC computer to use filename extensions. But did any other manufacturers get there first?


The Jakarta Apache Project has released Cactus 1.7, a simple framework for unit testing server-side Java code such as servlets, Enterprise JavaBeans, tag libraries, etc. New features since 1.6 include

In addition, many bugs were fixed.

Friday, January 28, 2005

I remain amazed at the crap vendors expect us to pay for. I recently purchased some software to edit and burn DVDs. However, on my first attempt to use it refuses to work because I'm trying to combine video clips in both PAL and NTSC formats. The problem is:

  1. The software should convert between PAL and NTSC as necessary. This isn't rocket science, and software that advertises support for both formats should indeed support both formats.
  2. The error message doesn't actually tell me which clips are in which formats so I can't easily correct the problem.
  3. The manual and online help have nothing to say about this. The web site does, but its instructions do not reflect reality. They claim particular screens will show me content that is simply not present.

I've also found at least one significant bug in their product, user interface issues aside. I'd normally report it, but they can't be bothered to provide an e-mail address or a phone number (though they insist on getting both from me). I filled out the online form to ask them if there's a way around the PAL/NTSC problem, (the form itself has at least two major bugs) and perhaps they'll get back to me; but I tend to doubt it. I'm not going to mention the name of the company just yet, in case, miracle of miracles, tech support actually fixes the problem; but I kind of doubt that. It's fairly obvious the flaws are pretty deep in the product. I'm afraid this company fell off the clue train some years ago. (This isn't the only stupidity I've seen them committing lately.) Hiding support from your customers is a self-defeating strategy. If a company tries to reduce its support costs by making support hard to access (no e-mail, no phone number, insane registration requirements, web sites that require cookies, support links that end in 404s, extra charges for support, etc.) customers will reduce their cost by returning its products to the store. Somebody needs to pound it into these vendors' heads that the primary reason one pays money for software instead of just downloading the free stuff off the Net is for support. No support = no sales. Out of control support costs are a code smell that signals poor user-interface design and/or bugs. An intelligent company fixes the root problem rather than hiding from it.

Update: the company responded to my online form fairly quickly. However it appears to be an automated response that parrotted back the exact same factually incorrect misinformation I had already read on their web site. I guess I need to add using really stupid AI to respond to questions as yet another way companies try to avoid listening to customers. One more thing: the subject of the message was the not-so-helpful "RQST00003019439" that I came very close to deleting as spam without looking at it.

Update 2: A human finally responded. Though they weren't actually able to provide any useful assistance, they did confirm that the web site information is incorrect.

Thursday, January 27, 2005

Nokia has posted the proposed final draft specification of JSR 238, Mobile Internationalization API, to the Java Community Process (JCP). This includes one package, javax.microedition.global.Formatter, with five classes: Formatter, ResourceException, ResourceManager, StringComparator, and UnsupportedLocaleException. Basically, this seems to be a simplified version of some of java.text. The over the Connected, Limited Device Configuration (CLDC) 1.1 or later is required. Comments are due by December 6.


Sun has submitted JSR-268, Java Smart Card I/O API to the JCP. According to the JSR, "Smart Cards, also called integrated circuit cards, are small computing devices that usually come in a credit card sized form factor. Server and PC applications interact with Smart Cards by exchanging APDUs (Application Protocol Data Units) with them. This JSR will define a Java API for such APDU based communication. The API will be designed to be compact but sufficiently complete to satisfy the majority of applications. We envision an API roughly equivalent in features to the resource manager in the PC/SC Workgroup specifications." Comments are due by February 7.

Wednesday, January 26, 2005

Quick question for the old-timers: does anyone happen to know:

  1. Which operating system first used file name extensions to identify file types?
  2. Which operating system first standardized on three letter file name extensions to identify file types?

I think the answer to question #2 is CP/M, but possibly there was something earlier that did this. (Some references I found incorrectly claim this was invented in DOS, but I know that's not true.) As far as question #1, were Unix and VMS using file extensions in the early seventies? (Hmm, actually it looks like CP/M (1976) predates VMS (1978) by at least a year, so the question's really just about Unix.) Did anybody else do this earlier? What about early IBM mainframe operating systems? The first person to send me a conclusive, verifiable answer will get one free copy of their choice of my books the next time I go to the post office. Please e-mail any suggestions.

So far thanks to Norwood Sisson I've discovered that the DEC PDP-8 used two letter extensions. Possibly the PDP-11 introduced three-letter extensions. but so far that's just a guess. Nothing definitive yet. Hmm, OK, it looks like Kermit provides proof that the PDP-11 used three letter extensions. I'm still not sure if it was the first computer to do so. Hmm, Kermit seems to be a wealth of information about old operatins systems. It looks like TOPS-10 on a PDP-10 also used three-letter extensions. MIT's ITS: The Incompatible Time Sharing System on the PDP-10 used filename extensions, but these were not necessarily three letters long. Brent Whitmore provided proof that the Multics system used file extensions. That predates Unix and takes us back to the late 60s. Possibly some of the earlier DEC computers (like the PDP-1) precede this, though go much further back and you find systems shipping without any sort of file system at all. Robert Young found definitive evidence that TOPS-10 used filename extensions of between 0 and 3 characters. The manual is from the late 80s, but TOPS-10 goes back to thre late sixties as well, roughly the same time frame as Multics.


Sun's released a minor maintenance update to the Java 2 Software Development Kit 1.4.2, version 1.4.2_07. This version fixes several dozen assorted bugs. It's available for Windows, Linux, and Solaris.

Tuesday, January 25, 2005

The Jakarta Apache Project has posted Tomcat 5.5.7, an open source servlet container for the Apache web server and the official reference implementation of the Java Servlet API and Java Server Pages (JSP). "Tomcat 5.5 is designed to run on J2SE 5.0 and later, and requires configuration to run on J2SE 1.4....In addition, Tomcat 5.5 uses the Eclipse JDT Java compiler for compiling JSP pages. This means you no longer need to have the complete Java Development Kit (JDK) to run Tomcat, but a Java Runtime Environment (JRE) is sufficient. The Eclipse JDT Java compiler is bundled with the binary Tomcat distributions. Tomcat can also be configured to use the compiler from the JDK to compile JSPs, or any other Java compiler supported by Apache Ant." This implements version 2.4 of the Java Servlet API and version 2.0 of Java Server Pages. Changes since 5.5.6 include an installer for mod_jk on IIS, a new store config module for better server.xml saving support, and updates to varous components. The version numbering is funky. This is really more like an alpha release and is definitely not considered to be ready for production.


YourKit, LLC has posted the sixth public beta of YourKit Java Profiler 4.0, a 295€ payware tool for detecting memory leaks and memory consumption bottlenecks. It features Automation of memory leak detection, an object heap browser, JUnit integration, IntelliJ IDEA, Borland JBuilder integration. Version 4.0 adds support for Mac OS X and simplifies analysis of custom class loaders and the classes they load. This beta can now measure time spent and objects created in a method but not the descendant methods it invokes.

Monday, January 24, 2005

This Thursday, January 27th, I will be talking about Effective XML at the monthly meeting of the New York Linux User's Group in Manhattan. The meeting starts at 6:30, and takes place in midtown Manhattan. Admission is free, but preregistration is required to pass through the security in the IBM building. You must preregister by 2:30 P.M. EST Wednesday! There'll be a plentiful selection of giveaways, and an after-meeting adjournment to a local tavern. Hope to see you there!


Sun's posted a revised version of the Java Specification Particpation Agreement. Comments are due by March 28. The changes appear to be purely editorial in nature.

Sunday, January 23, 2005

Sun's posted the second alpha of the NetBeans Integrated Development Environment (IDE) 4.1. This early access release is available for Windows, Linux, and Solaris. New features in version 4.1 focus on Enterprise JavaBeans and Web Services. Alpha 2 "adds support for developing applications for the J2EE 1.4 Platform and their deployment to the Sun Java™ System Application Server Platform Edition 8 2005Q1." Final release is planned for April, 2005. Java 1.4.2 or later is required.


Etienne Gagnon has released version 1.1.9 of SableVM, a Java bytecode interpreter (that is, a virtual machine) written in C. "SableVM requires an ANSI/ISO C compiler (but preferably GCC) and a POSIX platform. It requires a strong memory model (sequential consistency) on multiprocessor systems." SableVM is available for GNU/Linux, Solaris, and FreeBSD. Version 1.1.9 improves JNI support and adds some missing system-dependant Java properties. It updates the bundled version of GNU Classpath to 0.13. It is now possible to run Eclipse without providing Xerces and Xalan. SableVM is published under the GNU Lesser General Public License (LGPL).

The developers claim it's written in portable C, and runs on Mac OS X, but I couldn't compile it there. Something about "libffi is missing". is written in portable C, and runs on Mac OS X, but I couldn't compile it there. Something about "libffi is missing". So I booted up my Linux desktop for first time in a few weeks (I've needed it less and less since moving to a new PowerMac desktop a few months back, and I may even nuke it and reinstall Windows depending on what my next book project since the Mac seems to do almost all the Unixy things I need to do though not, apparently, run SableVM.) and tried to compile it over there. Hmm, this one also dies with "libffi is missing" in configure. OK, let's search the Wiki. Hmm, various information, none of it precisely on point. After some hunting around, I find myself back on the download page where I notice, "IMPORTANT: If you do not already have it on your system, you can find the source code of the required libffi library at: http://sablevm.org/download/snapshot/2005-01-21/libffi-sable-3325.tar.gz". I probably should have paid attention to those big red letters.

Let's try this again. Download libffi. ./configure. make. make install. Oops. Forgot to sudo that last step. Try again. sudo make install. Back to the SableVM directory. ./configure. A new error message, "***ERROR: libpopt is missing". Hmm, what's that? Seems like fink can find this one though, so "fink install popt". ./configure again. Nope. Still getting "***ERROR: libpopt is missing". So much for the Mac. Let's try this on the Linux box again.

libffi compiles and installs. Good. Back to the SableVM directory. This time ./configure completes successfully for the first time. I guess Linux already has libpopt installed. Now let's make SableVM. That took a couple of minutes, but appears to have succeeded. sudo make install and we're done.

Now for the acid test: can SableVM pass XOM's unit test suite? Last time I tried this, it failed but that was over a year ago. OK, back to SableVM. It seems it can't even load my Hello World program:

*** Fatal error: Unable to load essential class java/lang/Object.
*** Most probably it was not found on boot classpath:
*** /usr/local/share/sablevm-classpath:/usr/local/share/sablevm-classpath/libclasspath.jar:/usr/local/share/sablevm-classpath/resources.jar
sablevm: cannot create vm

The message is right. It's not there. I wonder why? Hmm, looks like there's a separate distribution of the classpath I also have to download and install. I wonder why the install page didn't bother to mention that? Not that good documentation is a particular hallmark of open source projects. (I've tried to be much nicer about that in my own XOM, which I think has pretty good documentation relative to most class libraries.) One more time: ./configure. Nope. There's another problem:

checking for gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 libart-2.0... Package libart-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libart-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libart-2.0' found

configure: error: Library requirements (gtk+-2.0 >= 2.4 gthread-2.0 >= 2.2 libart-2.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.

I could probably resolve this one too, but I have this nagging feeling that fixing this problem would require upgrading my entire Linux distro, and I'm just not up for that today. I've been listening to the ridiculously loud fan on the Linux box for far too long now. I forgot how noisy the Linux box is. I can't believe I put up with that fan noise for two years. So I'm going to power it down, and try to get on with some real work.


Ben Litchfield has posted PDFBox 0.7.0, an open source (BSD license) Java library for manipulating PDF documents and extracting contents from existing PDF documents. This release adds support for PDF 1.5.

Saturday, January 22, 2005

Fujitsu's uncovered a a couple of security holes in Java that could allow untrusted applets to do pretty much anything they want, at least on Windows with Internet Explorer. Other platforms and browsers are affected, though perhaps not as badly. The exploit requires JavaScript to be enabled as well. In eight years of watching Java, this is the first really serious security hole I've seen. Java 1.5 is not affected. However, Java 1.4.2_05 and 1.3.1_12 and earlier are affected. If you haven't yet upgraded to 1.3.1_15, 1.4.2_06 or 1.5, do so today. Or if you can't immediately do so, disable either Java or JavaScript in your browser. If you aren't sure what version of Java you have open a shell or DOS prompt and type java -version like so:

$ java -version
java version "1.4.2_05"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-141.3)
Java HotSpot(TM) Client VM (build 1.4.2-38, mixed mode)

Hmm, looks like I need to upgrade. However, Apple has not yet released a fix for this. It's not clear if Macs are vulnerable, but to be one the safe side I think I'll be disabling Java. OK, done, though it does seem that Mozilla needs a much better interface for removing plugins.

Friday, January 21, 2005

The public review draft of Java Data Objects 2.0 was voted down in the Java Community Process (this almost never happens) by a 2-1 margin. Nay-sayers included Fujitsu, Hewlett-Packard, IONA, JBOSS, Intel, BEA, SAP, Oracle, and Nortel. Yes-voters were Sun, Apple, Doug Lea, Apache, and Borland. Google abstained. I haven't followed this spec closely myself, but I do wonder what it means that, with the single exception of IBM, I have a lot more respect for the members that voted yes than the ones that voted no. And IBM's a big company, and I'm not sure if it's the parts of IBM I like (Java group) or the parts I don't (WebSphere group) that were participating in this spec.


R. Rawson-Tetley has posted SwingWT 0.85, an open source, "100% pure Java library which very closely resembles the interface of Swing. The difference is that instead of using the Swing library, it drives native peer widgets from SWT" (the Eclipse GUI toolkit). With this library, Java/Swing applications can be compiled natively under Linux using gcj. It also allows Swing apps to use native widgets. This release improves JTable performance, adds polygon support for Graphics2D, supports StyledDocument and JTextPane, handles pixmaps better, and fixes many bugs. SwingWT is dual licensed under the Common Public License and the LGPL.


Websina has released BugZero 3.9.8, a $1299 payware (+$300 for maintenance) Web-based bug tracking system that supports multiple projects, group-based access, automatic bug assignment, file attachment, email notification, and metric reports. Bug Zero is written in Java and can run on top of various backend databases including MySQL. 3.9.8 fixes bugs and is a little more RESTful.

Thursday, January 20, 2005

Nathan Fiedler has released version 2.31 of JSwat, a graphical, stand-alone Java debugger built on top of the Java Platform Debugger Architecture. Features include breakpoints, source code viewing, single-stepping, watching variables, viewing stack frames, and printing variables. Version 2.31 fixes bugs. JSwat is published under the GPL.


Teodor Danciu's posted version 0.6.4 of JasperReports, an open source Java library for generating reports from XML templates and customizable data sources (including JDBC). The output can be displayed on the screen, printed, or written to XML or PDF files. Version 0.6.4 adds an Eclipse JDT-based report compiler and fixes bugs.


YourKit, LLC has posted the fifth public beta of YourKit Java Profiler 4.0, a 295€ payware tool for detecting memory leaks and memory consumption bottlenecks. It features Automation of memory leak detection, an object heap browser, JUnit integration, IntelliJ IDEA, Borland JBuilder integration. Version 4.0 adds support for Mac OS X and simplifies analysis of custom class loaders and the classes they load. This beta now works inside NetBeans, and has better font handling.

Wednesday, January 19, 2005

Jim Menard has posted version 0.83 of DataVision, an open source "database reporting tool similar to Crystal Reports". DataVision is written in Java and supports multiple databases including PostgreSQL, MySQL, and Oracle. This is a bug fix release. DataVision is published under an Apache license.

Tuesday, January 18, 2005

Cenqua has released Clover 1.3.4, a $250 payware unit test coverage tool. 1.3.4 fixes bugs and improves memory usage.

Clover modifies the source code to enable it to follow which statements are executed when, and keeps a running count of how many times each statement is executed during the test suite. Any statement that executes zero times is not being tested. Unlike Jester, Clover only tests whether the tests execute each statement and follow each branch. (It occasionally misses branches on the edges of >= or <=.) It does not test whether the tests correctly detect bugs. On the other hand, it runs orders of magnitude faster than a tool like Jester does. It's easy to use Clover several times a day. Indeed you can use it after each change to the test suite. By contrast, a full Jester run can take several days to complete. Ideally you'd want to use both a tool like Jester and a tool like Clover since they do different things.

Clover has been a major help in developing XOM. It has located numerous bugs in XOM over the last year, and is largely responsible for the completeness of XOM's test suite. Clover has also helped to optimize XOM for both speed and size by finding dead, unreachable code I could cut out. As usual, I tested the new release on the current XOM code base, and it didn't reveal anything too astonishing, but I've been keeping a fairly close eye on the test coverage as I develop so this isn't too surprising. About a week ago I did take a a closer look at what Clover was saying about the nu.xom.tests package where I keep my JUnit tests, and discovered that a few tests weren't actually running due to some stupid errors on my part. I also found some parts of the one published class in that package that was being tested and, wouldn't you know it, as soon as I wrote tests for those lines bugs popped up.

Clover integrates with Ant, NetBeans, Eclipse, IntelliJ IDEA, and Oracle JDeveloper 10g. Clover can generate test coverage reports in XML, HTML, PDF, or via a Swing Viewer. Java 1.2 or later is required.


The Legion of the Bouncy Castle has released version 1.26 of the Bouncy Castle Java Cryptography API, an open source, clean-room implementation of the Java Cryptography Extension (JCE). It supports X.509 certificates, PKCS12, S/MIME, CMS, PKCS7, and lots of other juicy acronyms. It also includes its own light-weight crypto API that works in Java 1.0 and later, and does not depend on the JCE. New features in 1.26 include:

Plus a few significant bugs were fixed and some optimizations made. Download it while it's still legal.


Gaundenz Alder has released JAutoCombo 1.3.2, a €14-39 payware auto-completing combo box for Swing.

Monday, January 17, 2005

It's been my experience that about half the techies and journalists commenting on the new Mac Mini "get it", and about half don't. This contrasts favorably with the track record for the iPod Mini, where almost nobody, including me, "got it" up front. A typical example of the commentators who don't get it is Michael Kanellos at c|net. First read his latest column and spot the elementary math error. Someone needs a refresher course in high school geometry. The continue on to The Cafes.


The Mozilla Project has released Bugzilla 2.18, an open source issue tracking system based on MySQL and Perl. Despite the apparently small version number change (the previous version was 2.16), this is a major release with many new features including:

In addition, many bugs have been fixed, including some security problems. If you're not ready to upgrade yet, there's also a new 2.16.8 version that integrates lots of the bug fixes. All users should upgrade to one or the other of these releases. However, using Mozilla's installation as an example, this release does not appear to have improved the user interface significantly, which is still rather poor compared to payware alternatives like Jira.

Sunday, January 16, 2005

ej-technologies GmbH has released version 3.3 of JProfiler, a $698 payware profiler based on the Java virtual machine profiling interface (JVMPI that can report on CPU usage, memory size, threads, and "VM telemetry" (whatever that is). New features in 3.3 include plug-ins for for Oracle JDeveloper and Netbeans 4.0 and an option to keep the profiled JVM alive. In addition, memory usage has been lowered, and the IDEA and Eclipse plug-ins have been rewritten. JProfiler is a useful tool, but so far I haven't seen anything compelling enough in the 3.x series to get me to pay the $199 to upgrade my old 2.x version. I do like that the license is per-developer rather than per-computer so I can legally keep a version on my PowerBook, Linux box, and G5 desktop.


Subversion 1.1.3, an open source version control system designed to replace CVS, has been released. 1.1.3 is a bug fix release.

Saturday, January 15, 2005

IBM's developerWorks has published my latest article, Zap bugs with PMD, a detailed introduction to the open source static analysis tool I've written about frequently here.


Thanks to repeated reader requests and a rainy Friday afternoon with not a lot better to do, I've added an RSS feed for the recommended reading. To answer one frequently asked question, no, I am not planning to add the quote of the day to the RSS feed. Too many of the quotes require formatting beyond what RSS can handle. Possibly at some point in the future I'll consider whipping up an Atom feed for these.

Friday, January 14, 2005

JCraft, Inc has posted JSch 0.1.19, an open source, pure Java implementation of SSH2 that supports port forwarding, X11 forwarding, file transfer, etc. This version adds some minor features including handling hostkeys included in known_hosts file and setting timeout values for opening sockets. Java 1.2 or later and the JCE are required. JSch is released under a BSD license. This release fixes bugs.


YourKit, LLC has posted the fourth public beta of YourKit Java Profiler 4.0, a 295€ payware tool for detecting memory leaks and memory consumption bottlenecks. It features Automation of memory leak detection, an object heap browser, JUnit integration, IntelliJ IDEA, Borland JBuilder integration. Version 4.0 adds support for Mac OS X and simplifies analysis of custom class loaders and the classes they load.

Thursday, January 13, 2005

Beta 9 of Groovy, a JVM hosted scripting language that combines the speed of GW-Basic with the clarity of Perl, has been posted. This beta makes Groovy compatible with Java 1.5, and fixes assorted bugs.


The Jakarta Apache Project has released Commons Transaction 1.0.1. "Commons Transaction aims at providing lightweight, standardized, well tested and efficient implementations of utility classes commonly used in transactional Java programming. Initially there are implementations for multi level locks, transactional collections and transactional file access. There may be additional implementations when the common need for them becomes obvious. However, the complete component shall remain compatible to JDK1.2 and should have minimal dependencies." 1.0.1 is a bug fix release.

Wednesday, January 12, 2005

Sun has submitted JSR 267, JSP Tag Library for Web Services, to the Java Community Process. Essentially this proposes developing Java Server Pages support for SOAP and WSDL.


Robert Oloffson has posted version 0.46 of Java Memory Profiler (JMP). JMP uses the Java Virtual Machine Profiling Interface (JVMPI) interface to track objects and method times in a JVM. It uses a GTK+ interface to display statistics. The current instance count and the total amount of memory for each class is shown as is the total time spent in each method. 0.46 allows objects to be traced all the way back to the root. JMP is written in C for Linux.


Julien Ponge has released IzPack 3.7, an open source tool for building cross-platform installers in Java. 3.7 adds custom actions that can be run at the various stages of installation, package dependencies, shortcuts support for FreeDesktop.org compliant environments, and a tutorial for new users. IzPack is published under the GPL.


Bare Bones Software has released TextWrangler 2.0, a now free-as-in-beer text editor for Mac OS X. New features in 2.0 include multiple documents per window, a documents drawer, a navigation bar, syntax coloring and function navigation for HTML, XHTML, PHP, XML, ActionScript, JavaScript, JSP, VectorScript, and VBScript; SFTP, a shell script menu, and more.

Tuesday, January 11, 2005

The Gnu Project has released version 0.13 of GNU Classpath, an incomplete free implementation of the core Java class libraries. This release fills in numerous holes in support across the core libraries including HTTP/1.1 and FTP URL handlers and much better XML support including JAXP 1.3 (see the related item on Cafe con Leche) and java.beans.XMLEncoder and java.beans.XMLDecoder classes. This release also improves AWT and Swing support, especially on gtk+. There's also an experimental Graphics2D implementation (not turned on by default). Since this is a clean room project, it doesn't always line up exactly with any particular Java version. This release is a complete implementation of the Java 1.0 API, aside from a few places where the 1.0 and 1.4 API conflict, and implements most classes and methods added from 1.1 through 1.4. GNU Classpath is published under the GPL with library exception.

Monday, January 10, 2005

jutils.com has released lint4j 0.7.1, a free-beer "static Java source code analyzer that detects locking and threading issues, performance and scalability problems, and checks complex contracts such as Java serialization by performing type, data flow, and lock graph analysis." Version 0.7.1 adds nine new warnings including:


Werner Randelshofer has released the Quaqua Look and Feel 2.7, "an extension for Apple's implementation of the Aqua Look for Swing. Quaqua aims at fixing inconsistencies between user interface elements implemented in Swing and those of native Mac OS X applications. To achieve this, Quaqua selectively replaces UI elements of Apples Aqua Look And Feel with elements of its own." Quaqua is dual licensed under the BSD license model and the LGPL. Java 1.3 or later and Mac OS X 10.2 or later are required. This release improves support for Java 1.3 and Panther.

Saturday, January 8, 2005

Siemens AG has submitted JSR 266, Unified Message Box Access API (UMBA-API), to the Java Community Process. According to the JSR,

Mobile devices collect input and output messages into so called "input- and output-boxes". The realization of these "boxes" is indeed implementation dependent, but they are found in all mobile devices. The word message here stands for short messages (SMS), multimedia messages (MMS), email, ring tones, bitmaps, Vcards, etc. These messages enter and leave the "boxes" via voice and data connections (GSM, GPSR, WLAN, BT, etc ).

Although some J2ME optional packages define APIs to send and transmit certain types of messages (SMS in JSR120) and (MMS via JSR205), there is no way to access and manage the message boxes, and their content from a Java application.

The JSR API will include methods for:

  • Management of message boxes. (query of info, rename, copy, delete?)
  • Read, write, copy, move and delete contents.
  • Access the attributes of a message. (read/unread status, sender/recipient address)
  • Registering listeners to be notified about modifications to the
  • message box. (message sent, message received, message attribute changed)

It is expected, that not all implementations will provide full access, to actively manipulate the message box contents via this API. Some applications will benefit only from a passive, read only access to the message box.

This API will be agnostic to the type of message box and the content of the message box; it will allow to access every kind of entry that is available in the device's message boxes. These are typically short messages (SMS), multimedia messages (MMS), email, ring tones, calendar entries, address book entries, bitmaps and also future message contents and formats.

This API focuses on the message box access only; transmission, content interpretation and processing are not in the scope of this JSR.


SAP AG has submitted JSR 265, API for Utilizing Web Services Policy, to the Java Community Process. According to the JSR,

This specification aims to standardize a basic framework in Java for utilizing the Web services constraints and capabilities. It enables other Java technologies for Web services to utilize policies in a uniform manner thereby strengthening Java as a competitive Web services platform.

Business Case for the proposed JSR

Today, users of Java platform are faced with the challenge of supporting Web Services that have specific behavior, constraints and capabilities (hereafter referred to as policies for brevity) whose description goes beyond the core WSDL functionality. In addition to the use of WSDL for the description of the abstract and technical interfaces of a Service, it is often times the case that additional policy metadata is associated with the several WSDL components, for example, particular QoS requirements of a Web Service. Client systems consuming such Web Services need to obtain the policies in effect for the service. In some cases, it may be useful for a service to be able to obtain its own policy set for a given interaction. Once obtained, the effective policy set is typically presented for ensuring compliant behavior of the interactions. Java specifications that target Web Service development, such as JAXRPC and JBI, currently do not address the needs of obtaining and presenting the Web Service policies, either at configuration or at runtime. This JSR aims to standardize certain basic support in the Java platform to satisfy the client and service provider system requirements for obtaining and presenting the Web Services policies.

Thursday, January 6, 2005

I'm very pleased to announce the release of XOM™ 1.0, a new XML object model. XOM is a free-as-in-speech (LGPL), library for processing XML with Java. XOM supports a number of XML technologies including Namespaces in XML, XSLT, XInclude, and Canonical XML. XOM documents can be converted to and from SAX and DOM. XOM strives for correctness, simplicity, and performance, in that order. XOM is very easy to learn and easy to use. It works very straight-forwardly, and has a very shallow learning curve. Assuming you're already familiar with XML, you should be able to get up and running with XOM very quickly.

XOM is the only XML API that makes no compromises on correctness. XOM only accepts namespace well-formed XML documents, and only allows you to create namespace well-formed XML documents. (In fact, it's a little stricter than that: it actually guarantees that all documents are round-trippable and have well-defined XML infosets.) XOM manages your XML so you don't have to. With XOM, you can focus on the unique value of your application, and trust XOM to get the XML right.

XOM is fairly unique in that it is a dual streaming/tree-based API. Individual nodes in the tree can be processed while the document is still being built. The enables XOM programs to operate almost as fast as the underlying parser can supply data. You don't need to wait for the document to be completely parsed before you can start working with it.

XOM is very memory efficient. If you read an entire document into memory, XOM uses as little memory as possible. More importantly, XOM allows you to filter documents as they're built so you don't have to build the parts of the tree you aren't interested in. For instance, you can skip building text nodes that only represent boundary white space, if such white space is not significant in your application. You can even process a document piece by piece and throw away each piece when you're done with it. XOM has successfully processed gigabyte sized documents without breaking a sweat.

It's at least a year past when I hoped to release XOM, but the extra time has resulted in a much cleaner, more robust, faster API. XOM is now considered to be ready for production use. Future, post-1.0 releases should be backwards compatible with the 1.0 API for the foreseeable future.

If you'd like to know more about XOM, I suggest starting with the tutorial. XOM also includes a large collection of small sample programs that demonstrate various parts of the library. If you're curious about why XOM is the way it is, or if you would like to suggest future directions for XOM, you should read the design principles on which XOM is based. if you have a question about XOM that is not answered in the API documentation or the FAQ, you can ask it on the xom-interest mailing list. You do not need to be subscribed to post, but non-subscriber questions are moderated.

Wednesday, January 5, 2005

I've written a short article on the Cafes about open source usability and its connection to practical freedom.


So far nobody's come up with a fool-proof way for a Jar file to know whether it's been launched by double clicking or by running "java -jar filename.jar," though there've been some inspired hacks. The suggestions so far involve various hacks with System.in or checking various system properties. So far these don't work across different platforms and VMs. The closest yet is a proposal to bring up a GUI regardless of how the VM was launched, and only fallback to the command line interface if that fails. However, that's not quite what I asked for. Any other ideas?


Gaudenz Alder has released JGraph 5.3, a free-as-in-speech (GPL/MPL) graph component for Swing that requires Java 1.4 or later. JGraph is accompanied by Graphpad, an open-source diagram editor for Swing that offers Automatic Layout, Printing, Zoom, and much more. It is available in English, German and French. Version 5.3 adds helper methods to the layout cache and graph model, fixes various bugs, and improves performance.


YourKit, LLC has posted the second public beta of YourKit Java Profiler 4.0, a 295€ payware tool for detecting memory leaks and memory consumption bottlenecks. It features Automation of memory leak detection, an object heap browser, JUnit integration, IntelliJ IDEA, Borland JBuilder integration. Version 4.0 adds support for Mac OS X and simplifies analysis of custom class loaders and the classes they load.

Tuesday, January 4, 2005

Andrew Thompson asked me an interesting question this morning. Is there any way for a Jar file to know whether it's been launched by double clicking or by running "java -jar filename.jar"? The goal would be to run a command line version of a program if it's been launched from a command line but a GUI version if it's been double clicked on. Any ideas?


Oracle has released version 10.1.2 of JDeveloper, an integrated development environment for Java. 10.1.2 is mostly a bug fix release.


No Magic has released MagicDraw UML 9.0, a $149 to $2549 payware "visual UML modeling and CASE tool with teamwork support." New features in version 9.0 include UML 2.0 notation, visual Model differencing, and Java 5 support.

Monday, January 3, 2005

One advantage of taking a week off, disconnected from your usual net sources, is that it helps you see things in new ways. I had a couple of minor revelations over the Christmas break. The first was that spam and worm droppings have become completely debilitating for dialup users (which I was temporarily for the week). The only practical solution is to filter on the server side rather than the client as I had been doing. The second revelation was that spam and Microsoft Outlook worms are really two separate problems and require two separate solutions.

Filtering the spam just required making some small changes in my spamassassin configuration here on IBiblio. However, spamassassin (and many other Bayesian filters) do a surprisingly bad job of handling worm droppings, especially content free e-mails that come with very small to non-existent message text accompanied by large attachments. You'd think this would be a red flag for spam filters, but it doesn't seem to be. Neither spamassassin, Mozilla, nor Eudora has ever reliably identified such e-mails as spam, despite extensive training.

For a long time I'd just been manually deleting these, but this past week that no longer proved feasible so I did a little research with Google and came up with vsnag, a procmail filter specifically tuned to weed out worm droppings and nothing else. This product is a god send! It almost completely eliminated the hundreds of direct Microsoft worm attacks and the bounce messages from worms that forged my e-mail address. This is a wonderful product! If your ISP isn't using it already, install it yourself. It's really, really worth it.


Besides struggling with dialup connections, each Christmas break I try to read at least one "important" book. Some years it's something technical like Bertrand Meyer's Object Oriented Software Construction (fabulous book, by the way, a classic of object oriented programming, and someday I'll get past chapter 7.) Some years it's a large novel like Cryptonomicon. This year I thought the book was going to be Douglas Hofstadter's Le Ton Beau de Marot, but it turned out to be How to Lie With Statistics.

This 142 page pamphlet is a brilliant exposition of just how warped most statistical "facts" really are. I knew all the math already, and I'd encountered all of these issues in the past, but I've never seen the issues put together in one place so concisely and entertainingly. The book is 50 years old, and some of the examples seem a little dated; but the basic points are as relevant today as they were a half-century ago. Almost every statistic you read is cherry picked to prove what the author wants to prove. To really understand what's going on in the world you must be conversant with the basic language of statistics, and must carefully evaluate each statistic to see what it really means. More often than not you'll find it doesn't come close to proving what the purporter claims it proves.

I doubt Cafe au Lait readers are afraid of a little math; but even if you are, don't worry. The math in this book is minimal, really nothing more than understanding the difference between mean, median, and mode; which are clearly explained, as well as why you should care about the difference. Just this morning I noticed a headline in the New York Times that's using the mean when it should be using the median. I wouldn't have caught this two weeks ago. You certainly don't need to know about Lebesgue measure, cumulative distribution functions, convolutions, or any of the other fancy stuff Prof. Bhattacharjee tried to stuff into my head in my one formal course in statistics. High school Algebra I is more than sufficient. This book should be required reading in every high school civics and freshman poli sci class in the country. If you haven't read it yet, read it, even if, like me, you think you know the math already. The math is easy, but the application of the math to gulling the public is astonishing. This is an exceptional book. If you haven't read it, don't wait. Read it before the next time you open a newspaper or listen to the nightly news. It will change the way you see the world.


David Hovemeyer and Bill Pugh have posted FindBugs 0.8.6, an automated open source tool for finding potential bugs in Java code. This release includes several new detectors including:

Other new features includes the abaility to filter warnings by bug category, Java 1.5 annotations that suppress FindBugs warnings, and cut, copy, and paste in the Swing GUI. As usual, I tested this release on the latest XOM code base. None of the new detectors found anything real, but the old detectors did find one local variable I could eliminate along with the method call that initialized it and one unused private method, both of which had snuck into the code since the last time I ran FindBugs. False positives were few, mostly involving places where I was deliberately catching and ignoring an exception. Java 1.4 or later is required. FindBugs is published under the LGPL.


I've posted a new release candidate of XOM that includes the fixes from my FindBugs run, as well as new README and LICENSE files, and an improved Ant build file that only compiles the servlet samples if the servlet classes are found somewhere in the classpath. The API and behavior is unchanged. If nobody spots any major problems in this release (what people have been finding lately have mostly been packaging issues) I'll probably release 1.0 in a few days.

Sunday, January 2, 2005

The Eclipse Project has posted the fourth milestone of Eclipse 3.1, an open source integrated development environment (IDE) for Java. It also doubles as a base platform for your own applications, an alternative to the AWT and Swing, and a powerful floor wax and dessert topping. The main new features in 3.1 are Ant 1.6.2, quick fixes for serial version IDs, and some (still incomplete) support for Java 1.5. New features in this milestone include:


Just in case anyone had any doubts about why the Sun Community Source License (SCSL, pronounced "Scuzzle") is a bad idea, and not even close to open source, it should suffice to note that Sun has unilaterally revoked the FreeBSD Foundation's Java license, and now can't seem to be bothered to negotiate a new license with them. Write once, run on any platform Sun likes this week.

Saturday, January 1, 2005

Happy New Year. This is normally the time when I make a lot of promises about cool new features for this site that don't come to pass. However, looking backwards my promises for last year were three third editions (done: XML in a Nutshell, XML 1.1 Bible, and Java Network Programming), at least one peer-reviewed paper (actually I published two: XOM Design Principles and SAX Conformance Testing), and 1.0 releases of XOM and XQuisitor. Oh well, two out of three ain't bad. XOM 1.0 is almost done. I'm just mucking with the build file and adding a README. It should be out in a day or two. Plus I did finally write the comments system I've been threatening for years, even if it did show up on a new site rather than this one. I also made some significant contributions to the W3C XInclude test suite. That's a pretty good year.

For 2005, I think I'll set the following goals:

Check back in a year to see how much of this I actually get done.


Slava Pestov has uploaded the first pre-release of jEdit 4.3, an open source programmer's editor written in Java with extensive plug-in support and my preferred text editor on Windows and Unix. New features in this release include multiple line fields in the search and replace dialog box, a "Repeat Last Macro" command, wrapping to the window width, Forth and Motorola 68000 assembler syntax highlighting, and improved rectangular selection. Java 1.4 or later is required. Java 1.3 is no longer supported.


Older news:

2004200320022001200019991998
January January, 2004 January, 2003 January, 2002 January, 2001 January, 2000 January, 1999 January, 1998
February February, 2004 February, 2003 February, 2002 February, 2001 February, 2000 February, 1999 February, 1998
March March, 2004 March, 2003 March, 2002 March, 2001 March, 2000 March, 1999 March, 1998
April April, 2004 April, 2003 April, 2002 April, 2001 April, 2000 April, 1999 April, 1998
May May, 2004 May, 2003 May, 2002 May, 2001 May, 2000 May, 1999 May, 1998
June June, 2004 June, 2003 June, 2002 June, 2001 June, 2000 June, 1999 June, 1998
July July, 2004 July, 2003 July, 2002 July, 2001 July, 2000 July, 1999 July, 1998
August August, 2004 August, 2003 August, 2002 August, 2001 August, 2000 August, 1999 August, 1998
September September, 2004 September, 2003 September, 2002 September, 2001 September, 2000 September, 1999 September, 1998
October October, 2004 October, 2003 October, 2002 October, 2001 October, 2000 October, 1999 October, 1998
November November, 2004 November, 2003 November, 2002 November, 2001 November, 2000 November, 1999 November, 1998
December December, 2004 December, 2003 December, 2002 December, 2001 December, 2000 December, 1999 December, 1998

[ Cafe au Lait | Books | Trade Shows | FAQ | Tutorial | User Groups ]

Copyright 2005 Elliotte Rusty Harold
elharo@metalab.unc.edu