November, 2004 Java News

Tuesday, November 30, 2004

The Cafes seems to be off and running. There were a few initial glitches that I have now cleaned up. There's some interesting discussion in the comments fora for On Iterators and Indexes and Overloading Int Considered Harmful. Today's project is to make the staging server work enough like the production server that I can use it for testing and debugging without affecting the production server. Yesterday I got stymied by a slight difference in how the PHP engines were configured. (The staging server didn't have libtidy support that the site relies on heavily.) I had planned to post a backlist article today, but instead I found myself forced to think about spam.

Sleepycat Software has released Berkeley DB Java edition 1.7.0. Berkeley DB JE is an open source, non-relational embedded database written in Java. The data is exposed through "a Java Collections-style interface, as well as a programmatic interface similar to the Berkeley DB API." This release fixes bugs and improves performance. Java 1.4.2 or later is required.

Gaudenz Alder has released JGraph 5.2, a free-as-in-speech (GPL) 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.2 fixes some bugs and dual licenses under the Mozilla Public License.

Monday, November 29, 2004

Lately I've noticed that outlets for article sized content are becoming fewer and farther between. I've got lots of things I'd like to write about at a length somewhat longer than a typical Cafe au Lait news item, but much shorter than a full book; so I decided to do something about it. Hence I am announcing The Cafes, a new site for content that falls somewhere in the large territory between a blog post and a book. The initial articles include:

The Cafes will not be updated as regularly as Cafe au Lait; just when I've got something I want to write about. It's going to focus more on How-Tos and technical material, and less on product announcements. The goal is to write more substantive material that will be valuable for a longer period of time. I do have an RSS feed for the site to announce the most recent articles, but my assumption is that most readers will find the site through search engines and links, when looking for information on a specific topic. I will be adding new articles at a rate of about one a day this week, as I've got quite a back log to plow through. Indeed the back log was one of the motivating factors for launching the site.

Also unlike Cafe au Lait/con Leche, the Cafes includes a place for reader comments on each article. I rolled my own comments system on top of PHP and MySQL because I really couldn't find an existing system that did what I wanted it to do. At the same time, since no one's done comments like this before, I pretty much had to code the system from scratch, so it's more than likely there are some bugs flitting around, waiting to be squashed. if you happen on any of the critters, please let me know.

Judging by my server logs, a few of you have found the site already. There's still a lot of work to be done, but I think it's ready to be opened to the public. Check it out, and let me know what you think. Please post any comments you have on the Welcome to the Cafes page. I think you'll like what you see. I'm very excited about The Cafes, and I think it's a going to be a very interesting and productive destination. Happy Java!

Saturday, November 27, 2004

The Jakarta Apache Project has posted the first release candidate of Commons Transaction 1.0. "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."

The Jakarta Apache Project has also posted Tomcat 5.0.30, 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.0.30 implements version 2.4 of the Java Servlet API 2.4 and version 2.0 of Java Server Pages. 5.0.30 is a bug fix release. The version numbering is funky, but this is basically a beta release. Presumably 5.0.31 will be the release version.

Friday, November 26, 2004

Enerjy Software has released four new profiliing and static code checking tools:

Each of these is $295 payware.

Thursday, November 25, 2004

Eric Lafortune has released ProGuard 3.1, a free-as-in-speech (GPL) "class file shrinker, optimizer, and obfuscator. It can detect and remove unused classes, fields, methods, and attributes. It can then optimize bytecode and remove unused instructions. Finally, it can rename the remaining classes, fields, and methods using short meaningless names. The resulting jars are smaller and harder to reverse-engineer."

IronFlare AB has released OrionServer 2.0.5, a $1500 payware J2EE 1.3 server. It supports the usual J2EE 1.3 features including EJB 2.0, Servlet 2.3, JSP 1.2, Connector 1.0, JTA 1.0.1, JavaMail 1.2, JAF 1.0, JAXP 1.1, JAAS 1.0, JNDI 1.2, JDBC 2.0, and JMS 1.0.2. (How's that for a pack of acronyms?)

Wednesday, November 24, 2004

The Blackdown Project has released their version of the Java 2 Standard Edition for Linux 1.4.2-01. This includes a software devlopment kit, runtime environment, and Java plug-in for Linux on x86 and Sparc. It's based on Sun's source code for JDK 1.4.2_07. It is not open source.

Tuesday, November 23, 2004

Nokia has posted an updated maintenance draft review for JSR-212 Server API for Mobile Services: Messaging. The changes are minor but functional. There are three major changes in this review:

Comments are due by December 20.

Monday, November 22, 2004

The Jakarta Apache Project has posted the first beta of HTTPClient 3.0. New features in 3.0 include:

According to the announcement, "Starting with this release the 3.0 API is frozen. We will now focus on creating additional documentation and test cases. All current HttpClient 2.0 users are strongly encouraged to migrate to 3.0. "

Sunday, November 21, 2004

Onion Networks has released AntFlow, an open source (Apache license) "hotfolder driven workflow and automation technology based on Apache Ant." According to the announcement, "Using XML, AntFlow associates an automated task, such as data transfer, encryption, or XML processing with a directory on the local system. Whenever a file is copied or written into the hot folder, the associated task is executed and the file is moved to the next hot folder in the pipeline for further processing."

Saturday, November 20, 2004

Diomidis Spinellis has released UMLGraph 2.10, an open source (BSD license) tool for declaratively specifying UML diagrams. UMLGraph uses text files that look vaguely like source code to specify how UML class and sequence diagrams are drawn. A doclet converts this into a Graphviz diagram that can be easily converted to Postscript, GIF, SVG, JPEG, etc. This is a bug fix release.

Friday, November 19, 2004

Siemens and Nokia have posted an early draft review of Java Specification Request 228, Information Module Profile - Next Generation (IMP-NG) to the Java Community Process (JCP). Comments are due by December 2.

Sun has posted an early draft review of JSR 233, J2EE Mobile Device Management and Monitoring Specification to the JCP. Comments are due by December 3.

Nokia has submitted JSR 258, Mobile User Interface Customization API to the JCP. According to the JSR,

The overall goal is the specification of an API that allows the customization of the look and feel of the user interface components in a mobile device or platform. This can be achieved by allowing the API to access the customization properties of user interface (i.e. the themes), providing a mechanism to achieve a uniform customized look and feel in the user interface components, regardless of their underlying implementation mechanism.

The API should have the following functionality:

  • Querying the customization properties of user interface themes of a mobile device or platform.
  • Modifying the customization properties of user interface themes of a mobile device or platform.

The initial requirements for the API are:

  • - Independence of specific user interface toolkits. The API should work with any graphical user interface toolkit, including (but not limited to) the LCDUI of MIDP, AGUI of JSR 209 or AWT of PBP/PP.
  • Providing an open framework for access to customization properties, without being fixed to any specific named collection of customization properties.

Access to a collection of customization properties is provided through a vocabulary. This vocabulary may be specific to a device or a platform. The customization API will try to identify a common vocabulary for the properties. However, the API should be an open and flexible framework for accessing any device-specific or platform-specific properties. The properties are not limited to UI APIs, but may include also application platform properties like application icons, tones etc.

The specification enables implementations where the customization uniformly affects all user interface elements of applications (both native and Java) in the device or platform, thereby achieving a unified user experience across the device.

The JSR expert group will study whether there is a need to have application-specific customization capabilities, or the need to extend the customization capabilities to functional elements such as menu extensions and browser bookmarks.

This JSR will specify the UI customization API as an Optional Package API, and does not assume any specific application model or UI toolkit. The Optional Package can be used by any J2ME application using any supported application model, running on any J2ME Profile.

The API can be utilized in the creation of a customized look and feel for custom UI components, but it does not define any APIs for creating those custom components. The custom components are created using the facilities available in existing UI toolkits.

The expert group will also study whether there is a need to specify an over-the-air (OTA) transmission/serialization format for the customization property / UI theme data.

Websina has released BugZero 3.9.6, 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.6 fixes bugs.

Thursday, November 18, 2004

Oliver Burn has released Checkstyle 3.5, a lint-like tool that checks Java code for adherence to various coding standards. Besides bug fixes new features in 3.5 include:

As is all too comon for these sorts of tools. the documentation, though better than average, was still actively misleading, and the product did not work if you followed the instructions. (One file was not in the directory the examples said it was in.) Still the problem wasn't too hard to debug, and after I corrected this, checkstyle generated almost 30,000 error messages when I ran it across the XOM code base. A few of these were false positives. Most of them were either "Line has trailing spaces" or "File does not end with a newline". These are very minor points, and certainly not something I'm going to fix at the cost of mucking up my source repository. Some of the issues are flat-out wrong; in particular the complaints about "Unused @throws tag for 'IllegalDataException'" and other runtime exceptions. checkstyle also seemed to believe that I should decalre all my method arguments final, a rather pointless exercise IMO, given that Java passes all arguments by value. It also seems to want me to put JavaDoc comments on all my private methods and fields. There were a lot of other issues like this. If it found any real problems, I lost them in the sea of false positives. Checkstyle is published under the LGPL.

ej-technologies has released Install4j 3.1.1, a $698 payware cross platform tool for building native installers and application launchers for Java applications. New features in 3.1 include :

3.1.1 is a bug fix release.

ej-technologies has also released version 3.0 of exe4j, a $99 payware tool for integrating Java programs into Windows with your own process name, task-bar grouping, native splash screens, and so forth. New features in 3.0 include:

Wednesday, November 17, 2004

The results are in the 2004 Java Community Process elections. New members are Google and JBoss for two year terms, and Intel for a one year term. Hani Suleiman came in fourth. Intel and Orange France SA were elected to the J2ME committee, and will serve for two years.

Tuesday, November 16, 2004

Sun's posted the first snapshot release of Mustang, a.k.a Java 1.6, a.k.a Java 2 6.0, a.k.a Java 6, a.k.a Java Who The Fuck Knows What They'll Call This? Version numbering aside, this is actually fairly cool. This is basically an early development release that includes source code. It's currently published only under the Java Research License. It's available on the usual Sun-supported platforms: Linux, Solaris, and Windows.

Randy Giedyrcz let me know that BookPool is selling the third edition of Java Network Programming for $22.75, a 43% discount, and quite a bit cheaper than Amazon. This is the lowest price I've seen yet.

Xan Gregg took up my challenge to port the prime number finding code to Java. According to Gregg:

I ported these to Java this week-end. Results are below for various machines. Java holds up pretty well and even finds an index-out-of-bounds error in the C code. As a benchmark, these programs test 64-bit arithmetic, i/o, array access, and general program flow.

#    AthC  G5CWC  G5Java  P4Java  Test
1.   83.8  237.0   113.5   176.6   brute force to 10,000,000
2.   18.2   50.5    15.1    32.8   linked list
3.   16.6   45.9    14.1    31.0   #2, skipping multiples of 2
4.   16.4   45.3    14.0    30.4   #2, skipping multiples of 2, 3, 5
5.    2.3    2.2     3.4     3.7   sieve with bytes
6.    4.5   11.7     5.0     8.4   sieve with bits and division
7.    2.2    1.9     2.8     3.4   sieve with bits and bit shift
8a.  23.0   23.9    25.1    33.1   #7 to 100,000,000
8b.   0.1     *      0.4     0.1   write 1,000,000
8c.  11.8   24.8    13.5    18.5   paged search to 100,000,000
8d. 249.6  283.0   259.0   335.6   #7 to 1,000,000,000
8e.   1.9     *      4.0     4.0   write 10,000,000
8f. 225.9  291.4   186.4   255.0   paged search to 1,000,000,000
  • Values are times in seconds.
  • AthC is the Athlon 2400XP with 1.5GB RAM from the article
  • G5CWC is a Mac G5 2GHz with 1GB using CodeWarrior
  • G5Java is a Mac G5 2GHz with 1GB using IDEA 4 (JDK 1.4)
  • P4Java is a 1.8 GHz P4 with 512 MB using IDEA 4 (JDK 1.4)
  • * 8b and 8e not run on G5-CWC -- just used from output from java run

I couldn't get CodeWarrior to use G5 64-bit instructions -- I wonder if the G5 JVM was taking advantage of them. In theory, that would be an advantage for Java since C compilers usually produce code that will run on any version of the processor but the JIT can tune the code it produces to the particular processor version it's running on.

The author doesn't say why 8a is often slower than 8b+8c, even though the former is memory-only. I think it's because the 8c passes start with the under 1,000,000 primes in a regular array instead of scattered throughout a bit array. Finding the next prime for testing is just a matter of incrementing the index into the array instead of scanning through bits in the bit array.

I've uploaded Gregg's source code if anyone feels like seeing if they can improve on these numbers. On the only same hardware comparison in these tests, Java executes about twice as fast as C, but that may just reflect the weakness of the C compiler used. It's also possible the overhead of running in an IDE hurt the numbers all around.

Monday, November 15, 2004

For the last couple of days I've been programming in the weakly typed language PHP. For the last few years I've been hearing quite a few people, most notably Bruce Eckel and James Robertson, extol the virtues of weakly typed languages. So far I'm not convinced. I've repeatedly found myself running up against bugs that simply would not have been possible in Java, or that would have been caught almost immediately by the compiler, misspelled variable names for example. I just got hit by another one. I was writing $myarray[index] instead of $myarray[$index]. There goes another ten minutes of debugging that I would not have had to do in Java.

Ten minutes here, ten minutes there; the bugs add up. Collectively these bugs that could have been prevented by strong typing have cost me hours of productivity. Admittedly, none of them have made it into production yet; but at least two of them were extremely hard to track down. Eckel is primarily advocating Python and Robertson Smalltalk, so perhaps there are other language issues besides simply weak typing that explain the problems I'm having. On the other hand I did start out trying to implement this project in Zope+Plone+Python, and gave up in frustration. Why am I using PHP instead of Java, then? Well that's a story for another day; although that story has been mostly written and will be told soon.

Amazon has dropped their price on the third edition of Java Network Programming to $26.37, a 34% discount. This is the lowest price I've seen from a major bookstore, though some of the Amazon marketplace sellers have it even lower.

The Gnu Project has released version 0.12 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 X.509 certificate path checking, signed JAR files, java.awt.color, java.beans 1.4 updates. It also improves the build process, AWT focus management, font support, AWT Choice menus, HTTP POST, and regular expressions. Since this is a clean room project, it doens't always line up exactly with any particular Java version. This release achieves a complete implementation of the Java 1.0 API for the first time, aside from a few places where the 1.0 and 1.4 APIs are incompatible. However, lots of classes and methods added from 1.1 through 1.4 are included as well. GNU Classpath is published under the GPL with library exception.

Teodor Danciu's posted version 0.6.2 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.2 supports internationalization.

Websina has released BugZero 3.9.5, 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.5 requires double confirmation for deleting users and fixes bugs.

Sunday, November 14, 2004

Timothy Wall has posted version 0.13.1 of the Abbot GUI testing framework has been released. This release allows arbitrary Java code in scripts, supports non-US keymaps/keyboard layouts, extends AWT support, and fixes bugs. Abbot is published under the LGPL.

Saturday, November 13, 2004

Sun's released a pure Java MP3 playing plugin for JavaSound and the Java Media Framework. I haven't tried it yet myself, but the initial reports are not promising. It appears to have some major installation issues.

The Apache Project has posted the third milestone release of Geronimo, their open source J2EE application server. "The aim of the project is to produce a large and healthy community of J2EE developers tasked with the development of an open source, certified J2EE server, that is ASF licensed and passes Sun's TCK reusing the best ASF/BSD licensed code available today and adding new code to complete the J2EE stack." According to the release notes, significant changes since the second milestone release are:

Also according to the release notes, significant missing features currently include:

Java 1.4 or later is required.

Friday, November 12, 2004

YourKit, LLC has released the YourKit Java Profiler 3.1.1, 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 3.1.1 improves CPU sampling accuracy. The profiler runs on Windows or Linux.

The Apache Jakarta Commons Project has posted the second release candidate of Commons Math 1.0, an open source library providing many mathematical functions for statistics, random data generation, linear algebra, root finding, interpolation, erf, gamma and beta functions, arrays, factorials, complex numbers, distributions, matrices, and solving linear systems. It looks like it covers most practical math you might encounter at roughly the level of a typical undergraduate course in mathematical methods for physics. Based on spot checks of the Complex class and the factorial function, this looks like pretty solid work. I don't see any of the usual mistakes I'm used to seeing in such classes. For instance, the MathUtils.factorial() method throws an ArithMeticException if the result overflows the bounds of a long. Commons Math is published under the Apache 2.0 license.

Werner Randelshofer has released the Quaqua Look and Feel 2.4, "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. Changes since 2.0 are fairly minor user interface improvements and bug fixes.

Thursday, November 11, 2004

In my continuing efforts to make XML dead-bang easy to manipulate with Java, I've posted beta 7 of XOM, my dual streaming/tree API for processing XML with Java. This release fixes a few bugs and approximately doubles the performance of a few common operations including getValue(), toXML(), DOM and SAX conversion, canonicalization, and XSL transformation.

This is the first release candidate. There are still a few open issues with regard to error handling in XInclude that require clarification from the XInclude working group. If they decide that how XOM currently behaves is correct, then XOM 1.0 is essentially complete. If they decide to require different behavior, a few changes may yet need to be made.

The Apache Software Foundation has released Maven 1.0.1, an open source "Java project management and project comprehension tool. Maven is based on the concept of a project object model (POM) in that all the artifacts produced by Maven are a result of consulting a well defined model for your project. Builds, documentation, source metrics, and source cross-references are all controlled by your POM.... Maven has many goals, but in a nutshell Maven aims to make the developer's life easier by providing a well defined project structure, well defined development processes to follow, and a coherent body of documentation that keeps your developers and clients apprised of what's happening with your project." 1.0.1 appears to be a bug fix release.

The NetBeans Project has posted the third alpha release of a profiler based on Sun Labs' JFluid. It can profile memory and CPU usage. New features in this release include NetBeans 4.0 support and various usability enhancements and bug fixes.

Wednesday, November 10, 2004

Websina has released BugZero 3.9.4, 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.4 is a bug fix release.

Anyone want to port these prime number finding algorithms to Java? I have a funny feeling the results might be surprising.

Tuesday, November 9, 2004

The Gnu Project has released version 3.4.3 of GCC, the GNU Compiler Collection. GCC contains frontends for C, C++, Objective C, Chill, Fortran, Ada, and Java as well as libraries for these languages. GCC is a clean room implementation of Java that doesn't use any Sun code, so it doesn't always exactly match Sun release versions, but this is roughly at the Java 1.4 level with some omissions. 3.4.3 is a bug fix release, mostly focusing on C++ isssues but it does fix one "GCJ segmentation fault while compiling GL4Java .class files."

Etienne Gagnon has released version 1.1.7 of SableVM, a Java bytecode interpreter (that is, a virtual machine) written in portable 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, Mac OS X, and FreeBSD. Version 1.1.7 allows users to add to the bootclasspath, improves error messages for bootstrap problems, adds a new generational garbage collector and fixes a number of bugs. SableVM is published under the GNU Lesser General Public License (LGPL).

Monday, November 8, 2004

2004 is becoming the year of third editions, as I am now happy to announce my third third edition this year, Java Network Programming. The third edition retains almost everything that made the last two editions bestsellers (I did cut one chapter on applets that wasn't hugely relevant in 2004) and adds a lot of material on new features introduced in Java 1.4 and 1.5 including:

Perhaps the most significant addition to the third edition is the animal on the cover. Henceforth, Java Network Programming will be known as "The Otter Book":

The Otter Book

The third edition is available now from Amazon, Powell's, and and Barnes & Noble. Note that there's a bug in Amazon's database: if you search for "Elliotte Harold" or "Java Network Programming", the second edition still comes up. However, if you follow the links here you'll go straight to the third edition. You can also read it online as part of a Safari subscription. I've added more than a few pages and a lot of content to this edition, but the price remains the same, $39.95. Amazon is currently showing it at 32% off, $27.17, which is the lowest price I've seen. Order now. Amazon never orders enough copies of my new books, and typically sells out of their initial stock very soon after I announce a book here, sometimes within the first hour or two. If they've sold out, don't worry. O'Reilly will get them some more very quickly, certainly sooner than the 1-2 weeks they generally promise. Check it out!

Sunday, November 7, 2004

The Eclipse Project has posted the third 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:

Saturday, November 6, 2004

The Eclipse Project has released AspectJ 1.2.1. AspectJ is a derivative of Java that allows programmers to write code that applies across multiple classes. The AspectJ compiler requires Java 1.3 but can generate code for Java 1.1 and later. According to the announcement, "AspectJ 1.2.1 contains an updated version of the JDT Java compiler, a number of tools improvements, runtime performance optimisations, the ability to split declare error/warning messages across several lines using the '+' operator, and numerous bug fixes."

Friday, November 5, 2004

IBM's alphaWorks has released HeapAnalyzer, a tool for locating possible memory leaks through "heuristic search engine and analysis of the Java heap dump in Java applications. Java heap areas define objects, arrays, and classes. When the Garbage Collector allocates areas of storage in the heap, an object continues to be live while a reference to it exists somewhere in the active state of the JVM; therefore the object is reachable. When an object ceases to be referenced from the active state, it becomes garbage and can be reclaimed for reuse. When this reclamation occurs, the Garbage Collector must process a possible finalizer and also ensure that any internal JVM resources that are associated with the object are returned to the pool of such resources. Java heap dumps are snap shots of Java heaps at specific times."

Thursday, November 4, 2004

Cenqua has released Clover 1.3.2, a $250 payware unit test coverage tool. This is a bug fix release.

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 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. This run didn't find anything I didn't already know about, but it did inspire me to write tests for a few uncovered areas, mostly code that worked around bugs or used special features of particular XML parsers. Wouldn't you know it? There was a major bug hiding in one place in the untested code (now fixed). At this point XOM achieves over 90% test coverage, and most of the things that aren't tested are unreachable code like catch blocks for exceptions that won't be thrown or extra case statements included just to allow the switch statement to be compiled with the tableswitch instruction. Still, they're a few untested lines of code I think I could cover, though it's getting harder. This latest batch of tests required implementing my own pseudo-parser that could call methods the normal SAX parser wouldn't call. Expanding the test coverage further might require implementing my own ClassLoader to force other bugs to surface. These cases mostly reflect workarounds for known bugs in particular libraries, platforms, and virtual machines that don't normally appear with other libraries, platforms, and virtual machines.

Clover is one of the few tools I can recommend unconditionally, and would certainly pay for if Cenqua hadn't given me a free copy. (That's not personal, by the way. They'll happily provide free copies to all open source projects.) Clover integrates with Ant, NetBeans, Eclipse, and IntelliJ IDEA. new in this release is support for 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.

Wednesday, November 3, 2004

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 adds support for SWT 3.0.1, StyledDocument/JEditorPane, pluggable editor panes, and a classloader that swaps Swing for SwingWT on the fly (neat hack!). SwingWT is dual licensed under the Common Public License and the LGPL.

Tuesday, November 2, 2004

YourKit, LLC has released the YourKit Java Profiler 3.1, 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 3.1 adds support for Solaris and Eclipse 3.1M2 and fixes a few bugs. Besides Solaris, the profiler also runs on Windows or Linux. Upgrades from 3.0 are free.

Michael Fuchs has posted version 0.61 of his DocBook Doclet that creates DocBook SGML and XML documents from JavaDoc. This release moves from DocBook 4.2 to DocBook 4.3, upgrades docbook-xsl to version 1.66, and fixes some bugs.

Monday, November 1, 2004

I've updated my pages about Cryptonomicon and The Baroque Cycle (actually just QuickSilver and The Confusion) with the latest reader comments. I've also started a new page about The System of the World, for anyone who's finished all four books. Warning: there are big spoilers on all three pages. Do not read these until you've finished the respective books.

Nokia has posted the public review draft specification of Java Specification Request 238, Mobile Internationalization API, to the Java Community Process. This includes one package,, with five classes: Formatter, ResourceException, ResourceManager, StringComparator, and UnsupportedLocaleException. Basically, this seems to be a simplified version of some of java.text. Comments are due by December 6.

Older news:

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 2004 Elliotte Rusty Harold