David Hovemeyer has posted FindBugs 0.7.2, an automated open source tool for finding potential bugs in Java code. I ran this across the current XOM code base, and it found a couple of minor issues such as two streams that weren't closed on all paths through a method. However, this isn't really a fair test since I've used this tool repeatedly on XOM in the past, and most of the bugs it could find were found by earlier versions and thus have since been fixed. Version 0.7.2 can now check Java 1.5 class files. A few random bugs are fixed as well. Java 1.4 or later is required. FindBugs is published under the LGPL.
Tom Copeland has released PMD 1.6, an open source tool for automatically checking Java code for various classes of bugs. PMD scans Java source code and looks for potential problems including:
This version focuses on performance optimizations and bug fixes. PMD 1.6 found one real problem in the XOM code base, which surprised me because the last few runs hadn't turned up anything significant. A number of constructors were calling overridable (non-final, non-private) methods. This was indeed a change in my code base since I had last run earlier versions of PMD. I had definalized a number of setter methods to make XOM more extensible.
It wasn't immediately obvious to me why this was a problem, but I eventually found it in Item 15 of Bloch's Effective Java, "Design and document for inheritance or else prohibit it." The problem is that the constructor may call overridden versions of these methods before the object has been fully initialized. The subclass methods may, however, assume the object has been initialized This is something that had changed in XOM since the last time I ran PMD. I've spent some time thinking about whether this is a real problem or not. In context, I don't think it's a huge problem; but it's easy enough to fix without changing the API or hurting performance or anything else detrimental so I think I'm going to go ahead and fix it anyway.
R. Rawson-Tetley has posted SwingWT 0.81, 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 for your platform 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. Version 0.81 is now compatible with the open source Kaffe virtual machine. It also fixes various bugs. SwingWT is dual licensed under the Common Public License and the LGPL.
Version 2.1.3 of EJBCA , an open source, Java 2 Enterprise Edition (J2EE) Certificate Authority, has been released. EJBCA can be used standalone or integrated into other J2EE application. It supports multiple levels of certificate authorities, individual enrollment and batch production of certificates, PKCS12 and PEM export, configurable certificate contents. revocation and certificate revocation lists, and more. Version 2.1.3 is a bug fix release to improve interoperability with Internet Explorer. EJBCA is published under the LGPL.
YourKit, LLC has released YourKit Java Profiler 2.0.2, 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 2.0.2 is a bug fix release. The tool runs on Windows or Linux.
Version 0.8 of jTDS has been released. jTDS is a 100% pure Java (Type 4) open source JDBC 2.0 driver for the Microsoft SQL Server series (6.5, 7.x and 2000). It's originally based on the work of the FreeTDS project. Besides fixing bugs, Version 0.fixes assorted bugs and changes the license to LGPL.
The Object Refinery has posted version 0.9.17 of JFreeChart, an open source library based on Java2D. JFreeChart can produce pie charts, line charts, various kinds of bar charts, XY plots and scatter plots, time series, high/low/open/close charts, candle stick charts, and combination charts. This release adds polar plots, sorted/unsorted XYSeries, intervals for domain and range markers, and item labels for XYItemRenderers. JFreeChart is published under the LGPL.
Anthony J Wilkinson pointed out that XXX and FIXME are endorsed in
Sun's "Code Conventions for the JavaT™ Programming Language".
See section 10.5.4. Specifically,
"Use XXX
in a comment to flag something that is bogus but works. Use FIXME
to flag something that is bogus and broken."
Martin Auer has posted a beta of UMLet 3, "an open-source lightweight Java tool for rapidly drawing UML diagrams, with a focus on a sound and pop-up-free user interface." It can export diagrams to SVG, JPEG, and PDF formats. Version 3 adds support for EPS and can be used as an Eclipse plugin. UMLet 3 is published under the GPL.
IBM's alphaWorks has released version 4.5 of the WBI Development Kit for Java, a "programmable proxy for developing and running intermediary applications on the web." In other words it lets you stick filters in the middle of the HTTP stream. This release adds persistent connections to back-end servers and fixes bugs.
Speakeasy lied. I still don't have a DSL router, and won't until at least tomorrow morning. I really wish there were somewhere one could go to buy reliable Internet service, but all the providers seem interested in is a race to the bottom. Low quality at high cost is the rule of the day. Allegedly I'm paying SpeakEasy for business class service, but they sure aren't providing it. This is only one of several multi-day outages I've experienced since I signed up with them a few years ago, following bankruptcies and other complete failures at other providers including Northpoint and Panix. :-(
On an unrelated note, I'm going nuts trying to locate a song that's running through my head. The lyric fragment I remember is "We were only twenty-one," and I could swear it's an ABBA song, but I could be wrong about that. I can't find it in my collection of ABBA MP3s, and Google isn't helping. I'm almost certain the lyric is sung by a female voice. If anyone recognizes this, please drop me a line. Update: Never mind. I found it. It wasn't ABBA. It was Ace of Base, and the song is "C'est La Vie (Always 21)". No comments on my musical tastes or lack thereof, please.
The Eclipse Project has posted the eighth milestone beta of Eclipse 3.0, 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. My personal favorite new features in M8 are:
Features I don't like include the elimination of Rebuild All and Rebuild Project (which I didn't find at all confusing) in favor of a Clean... command (which seems very inobvious to me). Incredibly brain damaged is the feature that checks the workspace for breakpoints before launching in run mode, and asks you if you'd rather debug if it finds any. I don't know about you, but I always have breakpoiints in my code, and this feature just means I have to click through an additional dialog box before continuing. There's a preference to turn this off, but the feature shoudln't be there in the first place. If I want to debug, I'll select Debug. If I want to run I'll select Run. What is so confusing about that? This has nothing to do with whether I've set breakpoints.
There'a also a port to 64-bit Linux GTK port for AMD64, which is not yet production quality.
The release notes say "Standard coding conventions recommend using FIXME and XXX in a comment to mark places in Java code that need to be fixed. By default, these are now configured as task tags (along with TODO), as found on the Java > Task Tags preference page." First I've heard of that. I've always used "????" to indicate things I need to fix, though I have seen lots of FIXMEs in other projects' code. Is this an actual de jure convention that's been written down somewhere like the convention of using capitalized class names and uncapitalized member names? Or is it just a de facto convention?
The Eclipse Project has also released Eclipse 2.1.3, a bug fix release.
Christian Grothoff has released version 3.0 of JAMIT, the Java Access Modifier Inference Tool. Jamit can read Java .class files and determine which fields and methods can be changed from public to protected, private, or package protected, and so forth. Version 3.0 works with code that uses native methods and reflection. JAMIT is published under the GPL.
My DSL router died early yesterday afternoon. Speakeasy said they'd get me a new one by early this morning, but until it gets here I'm stuck with dial-up. And of course this happens just a couple of weeks after I finally disconnect my second phone line. :-(
Julien Ponge has released IzPack 3.5.1, an open source tool for building cross-platform installers in Java. 3.5.1 is a bug fix release. It's published under the GPL.
The Big Faceless Organization has released the Big Faceless PDF Library 2.1, a $400 payware (more if you want support) Java class library for creating PDF documents. The $1000 Extended Edition adds the AcroForms support, digital signatures, and the ability to import and edit and existing PDF documents. Version 2.1 adds support for UPS MaxiCodes and tiled TIFF images. Java 1.2 or later is required.
The Big Faceless Organization has also released the Big Faceless Graph Library 1.1.6, a $400 payware (more if you want support) Java class library for plotting 2D or shaded 3D pie charts, line graphs, area graphs, bar graphs and exporting them to PNG, GIF and PDF. 1.1.6 is a bug fix release. Java 1.2 or later is required.
Chris Simoes has posted LPD in Java 0.6.5, an implementation of the Unix LPD (line printer daemon) protocol for network printing.
Enterprise Distributed Technologies (Don't you just know that any company with such a big name has to be a one person shop?) has released edtFTPj 1.2.3, a free (LGPL) FTP library for Java. A $1500 payware version adds support for FTP over SSL.
Patrick Charles has released jpcap, a network packet capture library for applications written in Java that runs on various Unixes It includes a GUI tool for real-time network traffic capture and analysis and an API for developing packet capture applications in Java
Michael Fuchs has posted version 0.55.33 of his DocBook Doclet that creates DocBook SGML and XML documents from JavaDoc. This release mostly fixes bugs and improves the documentation.
YourKit, LLC has posted the first beta of YourKit Java Profiler 2.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 2.1 can compare the difference between memory snapshots and filter CPU and memory views. The tool runs on Windows or Linux.
Simone Bordet has released MX4J 2.0, an open source implementation of Java Management Extensions (JMX) 1.2.1 and the JMX Remote API 1.0. MX4J 2.0 is published under the Mozilla Public License.
The second beta of EJBCA 3.0, an open source, Java 2 Enterprise Edition (J2EE) Certificate Authority, has been posted. EJBCA can be used standalone or integrated into other J2EE application. It supports multiple levels of certificate authorities, individual enrollment and batch production of certificates, PKCS12 and PEM export, configurable certificate contents. revocation and certificate revocation lists, and more. Version 3.0 adds support for OCSP and allows several certificate authorities to run in one instance of EJBCA. EJBCA is published under the LGPL.
Timothy Wall has posted version 0.12.2 of the Abbot GUI testing framework has been released. This release fixes bugs. Abbot is published under the LGPL.
Websina has released BugZero 3.5.2, a $999 payware 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.5 makes various minor improvements including more lenient searching for user names.
The Apache Tomcat team has released version 2.0.4 of the mod_jk2 web server connector. "Tomcat is the reference implementation of a web application server which implements the Java Servlet and JavaServer Pages specifications. mod_jk2 is a connector which allows a web server such as Apache HTTPD or IIS to act as a front end to the Tomcat web application server. This version fixes a many majors bugs and is the first one to use APR which is now mandatory."
The Gnu Project has released version 0.08 of
GNU Classpath, an incomplete
free implementation of the
core Java class libraries. This release supports free Java VMs including the
Jikes RVM and Kissme.
Newly supported classes and packages in this release include
java.util.regexp
, java.net.URI
, and javax.swing.undo
. Many bugs were fixed and a lot of classes were sped up as well.
GNU Classpath is published under the LGPL.
Scott McNealy makes an interesting offhand comment at the end of Government Computer News's much reported article about Sun's refusal to open source Java as IBM wants them to. “Go open source with DB2 and then you can tell me what to do with my assets.” Sounds like a deal to me. I doubt McNealy really meant what he said, but why not call him on it? All the money in DB2 is in hardware sales, support contracts, and consulting anyway. How about it IBM? Tit for Tat. You open source DB2 under the GPL and Sun does the same with Java. Java crushes .NET. DB2 stomps Oracle. Everybody wins.
Mirko Nasato has posted Java OpenOffice Template Tools (Joott), a Java library for working with OpenOffice.org documents, especially Writer templates. Joott is published under a BSD license.
Robert Oloffson has posted version 0.41 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. This release makes it possible to ask for objects in the current reset level only and can show the owners of a given string and a given instance. JMP is written in C for Linux.
JCraft, Inc has posted JSch 0.1.14, a pure Java implementation of SSH2 that supports port forwarding, X11 forwarding, file transfer, etc. JSch is released under a BSD license. This release fixes bugs.
IBM's alphaWorks has released version 1.2 of the IBM Toolkit for MPEG-4, a Java class library for working with MPEG-4 video and audio. Version 1.2 adds HTTP tunneling and interleaving to support firewall and NAT traversal in the improves the Real Time Streaming Protocol (RTSP).
My evaluation copy of the "Java" Desktop System showed up in the mail yesterday so I popped it into my computer. Result: Completely non-functional. On a scale of 1 to 10, it gets a 0. The system could not boot past the license agreement, which was presented in an illegible font, and offered no way to agree to it, even if I could read it (which could be done only with great effort). And this is on a system that normally runs Red Hat Linux, so it's not exactly unsupported hardware. Sun clearly has a long way to go before they're ready to compete with Red Hat and Mandrake, even further if they want to compete with Microsoft.
Etienne Gagnon has released version 1.1.1 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 currently known to run on the i*86 and alpha processors with GNU/Linux." Version 1.1.1 is based on GNU Classpath 0.08, supports more architectures, fills in many holes JNI, reflection, and other areas, and fixes some bugs. SableVM is published under the GNU Lesser General Public License (LGPL).
Sun has released "early draft specifications" of four Java 2 Micro Edition (J2ME) related Java Specification Requests (JSRs). These are
I think previously the early draft specification would have been a community review draft, but now it's open to the general public. These update the existing 1.0 versions of those specs to support Java 1.4. Comments are due by April 23.
Doug Lea has posted the proposed final draft specification of Java Specification Request (JSR) 166, Concurrency Utilities, to the Java Community Process (JCP). There's also a public mailing list, CVS repository, and preliminary test release. Kudos to Lea for making the process mcuh more open than is customary within the JCP. There's a lot of cool stuff here including thread local variables, thread-wide exception handlers, queues, locks, atomic values and more. This is planned to become part of Java 1.5.
NOAA has released the Scientific Graphics Toolkit 3.0 (sgt), a set of JavaBeans that enables "platform independent, Java applications to produce highly interactive, flexible, publication quality, object oriented graphics of scientific data. Features include user settable or automatically scaled axes, sophisticated, automatically self-scaling time axes, labels as movable, customizable objects, automatic generation of legends to explain the data being displayed, and many more." Java 1.4 is required.
IBM's alphaWorks has released a Dictionary and Thesaurus API for Java, "a standard-based class library for accessing a dictionary and thesaurus using Java. It provides programming access to wordbook data from the Java programming language. Various actors involved in this library are driver providers, users, and applications with tightly- or loosely-coupled dictionaries, word processors, and/or thesauri. Using this library, applications written in the Java programming language can have access to data such as definition, pronunciation, synonyms, acronyms, etc., for a particular word, independent of vendors." The native storage format for the data files is XML.
I'm pleased to report that the U.S. military has dropped all charges against Captain James Yee, the soldier accused of various counts of espionage involving the prisoners at Guantanomo Bay. This was a vicious, bigoted, religiously motivated prosecution from the start. There was never any substance to any of the claims of espionage. There are still several Arabic-speaking and Muslim enlisted men and one non-Arab, non-Muslim officer being prosecuted on similarly trumped up charges though. Let's hope the Army has the good sense and common decency to drop those charges as well.
.I'm back from Software Development 2004 West, where a good time was had by all. I also spent a couple of days in Sonoma County where I managed to add western bluebirds, western tanagers, scrub jays, and purple finches to my life list. I was particularly pleased to see the bluebird. I was particularly unpleased to see that starlings are following humanity into the increasingly developed wine country, as they almost always do. :-( The invasive starlings and house sparrows are largely repsonsible for the near elimination of bluebirds in North America over the last century. Bluebirds used to be very common. There's got to be something we can do to control these invasive species so the native ones don't get crowded out.
As usual, the coolest ideas at the conference were unexpected. Most practically, Matt Liotta introduced me to scp, and made me wonder why I'd stuck with ftp all these years. Habit I guess. Not only is scp much more secure than ftp. It is also much, much easier to use from a Unix command line. I'd also say that it's easier to use than a lot of the common GUI ftp clients including Fugu and gFTP. It's also more reliable when transferring large numbdrs of files. Highly recommended.
I also got some interesting ideas about data binding APIs during Dennis Sosnoski's talk about JAXB and JiBX. I think I see now how to design a data binding API that doesn't suffer from the numerous problems of the existing schema dependent, tightly coupled systems. More on that after I get XOM out the door. I'm currently hoping to post alpha 1 around the first of next month. Speaking of XOM, it got a very positive reception at the conference; and a few more groups are likely to start using it. I'll be catching up on news from the last week over the day as I wade through my e-mail backlog.
Gaudenz Alder has released version 3.2 of JGraph, an open source 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. New features in 3.2 include the ability to draw labels along edges, double precision coordinates, a map to the default graph model, and bug fixes.
Slava Pestov has uploaded the eleventh pre-release of jEdit 4.2, 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 the ability to customize the metal look and feel fonts in Java 1.5, the file system browser uses the locale's short date format, various new macros, and S# syntax highlighting.
Several people wrote in to explain how the autoboxing worked and how the code could be rewritten so the equality was transitive. This misses the point. I know how autoboxing works. I know what the compiled byte code is actually doing, and I know how to write the code so that this doesn't happen. But that doesn't invalidate what I wrote. It should not be possible to write code such that equality is not transitive. Equality needs to be transitive on all paths, not just some of them.
Omnicore has released CodeGuide 7.0, an integrated development environment for Java. Version 7.0 features full support for Java 1.5 and a "back in time debugger." CodeGuide costs $299 and runs on Linux, Solaris, Windows and Mac OS X.
I noticed something bothersome about autoboxing and unboxing in Java 1.5 in Paul Tyma's Java 1.5 tutorial at SD West today. Equality is no longer transitive! Here's how it works:
Integer a = new Integer(7);
int b = 7;
Integer c = new Integer(7);
if (a == b) System.out.println("a = b");
else System.out.println("a != b");
if (b == c) System.out.println("b = c");
else System.out.println("b != c");
if (c == a) System.out.println("c = a");
else System.out.println("c != a");
It appears that the result of this will be:
a = b b = c c != a
I haven't compiled this yet because I'm typing this from a
Mac OS X laptop in the classroom, which doesn't support Java 1.5 yet;
but the results Paul
showed indicate this will happen.
In other words equality is no longer transitive!
This bothers me immensely. It seems that it bothers someone at Sun as well.
The documentation fo the equals method in Java 1.4.2 says,
the equals()
method
"is transitive: for any non-null reference
values x
, y
, and z
, if x.equals(y)
returns true and y.equals(z)
returns true
, then x.equals(z)
should return true
." That applies to the equals()
,
method not the ==
operator. However, I really think
==
should be transitive too.
On the positive side, Paul's convinced me that most of the syntax
of autoboxing and unboxing is a win.
His example of using an int as a key in a Hashtable
is compelling, and I really like being able to use
Number
objects in regular code.
JetBrains has released IntelliJ IDEA 4.0.1, a popular $499 payware integrated development environment for Java that runs on Windows, Mac OS X, Linux, and Unix. 4.0.1 is a bug fix release.
I'm leaving today for Santa Clara and the Software Development 2004 West Conference. I'll have intermittent Internet access at the show, but I'll be quite busy so updates here may be sporadic until I return next week.
Subversion 1.0.1 has been released. Subversion is an open source version control system designed to replace CVS, the open source version control system we've all learned to hate. 1.0.1 is a bug fix release, mostly for bugs found during the six week code freeze leading up to 1.0.
Sun has released the , Java Server Faces specification and reference implementation (developed in the Java Community Process as Java Specification Request 127). The technology compatibility kit must be licensed specially.
JavaServer™ Faces technology simplifies building user interfaces for JavaServer applications. With the well-defined programming model that JavaServer Faces provides, developers of varying skill levels can quickly and easily build web applications by: assembling reusable UI components in a page, connecting these components to an application data source, and wiring client-generated events to server-side event handlers. With the power of JavaServer Faces technology, these web applications handle all of the complexity of managing the user interface on the server, allowing the application developer to focus on application code.
JavaServer Faces technology includes:
- A set of APIs for: representing UI components and managing their state, handling events and input validation, defining page navigation, and supporting internationalization and accessibility.
- A JavaServer Pages™ (JSP™) custom tag library for expressing a JavaServer Faces interface within a JSP page.
In a fit of deliberate insanity, I've begin replacing the operating system on elharo.com (switching from Red Hat to Debian) less than 48 hours before I'm scheduled to leave for Software Development West. elharo.com (and xom.nu, and a few other minor sites) will be down for somewhere between two hours and two weeks. Cafe au Lait and Cafe con Leche will continue without interruption.
I'd heard that the Debian install process had improved since the last time I used it, and that may be so. I'm still installing. The last time I tried Debian, I gave up. However, it's clear this hasn't gone thorugh enough user testing. I've noticed numerous problems throughout the process. So far:
I suspect more surprises await me.
The Olympum Group has posted the Caffeine.NET 0.1, a free "interoperability solution between the Java platform and the .NET framework, with special emphasis to the enterprise variants of such platforms." Caffeine transfers APIs between .NET and Java and can run code written for one platform on the other platform . Caffeine is based on Mono.
The Inline Project has released Inline::Java 0.47, an open source Perl module that lets you write Perl classes in Java as well as wrap/use existing Java classes. It is an ILSM (Inline Language Support Module) for Java 2." This is a bug fix release.
Voruta 1.0.1 is an open source library that reduces the JDBC code in application by mapping SQL procedures and queries to Java methods using custom JavaDoc tags. It does not need any custom build tools or external metadata files. Version 1.0.1 adds an activity statistics collector that lets users view execution times, cache usage, and query plans. Voruta is published under the Apache License.
Websina has released BugZero 3.5.1, a $999 payware 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.5.1 is a bug fix release.
Apple has posted a developer preview of Java 1.4.2 Update 1 on the Apple Developer Connection (registration and Mac OS X 10.3 required). No word yet on what's been fixed in this release. Update: Think Secret says, the update "improves applet behavior in Safari as well as Java in other applications. According to release notes Apple provided to developers this week, the update is based on Sun's JDK 1.4.2_04."
IBM has posted the proposed final draft specification for the Java USB API Specification to the Java Community Process. USB is the Universal Serial Bus used in most modern PCs and Macs to attach mice, scanners, some hard drives and other storage devices, keyboards, digital cameras, and various other peripherals. The lack of USB support has been a shortcoming in Java for years. Now if they'd only get started on a Firewire API.
Michael Fuchs has posted version 0.55 of his DocBook Doclet that creates DocBook SGML and XML documents from JavaDoc. This release mostly fixes bugs and improves the documentation.
Sun's released a minor maintenance update to the Java Development Kit 1.4.2, version 1.4.2_04. The release notes have not been updated yet, but I assume some bugs have been fixed. It's available for Winodws, Linux, and Solaris.
Eric Lafortune has released ProGuard 2.1, a free Java class file shrinker and obfuscator that can detect and remove unused classes, fields, methods, and attributes and rename the remaining classes, fields, and methods using short, meaningless names. The resulting jars are more compact and more difficult to reverse-engineer. Version 2.1 now supports Java 1.5. ProGuard is published under the GPL.
The Jakarta Apache Project has released
Tomcat 3.3.2, 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 3 implements version 2.2 of the Java Servlet API
and version 1.1 of Java Server Pages. 3.3.2 is a bug fix release.
In a Guardian story about child pornography, Nick Truman, head of internet security at British Telecom, reveals that "We've been looking at way to give one internet name to everyone, using their social security number as an access key, or eye scan or fingerprint." He also reveals plans to deliberately inject phone noise into the net connections of suspected pedophiles while still allowing ongoing police investigations.
Robert Oloffson has posted version 0.40 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. This release shows how many bytes each string uses and the number of strings (per node and for duplicates). In addition, bugs have been fixed. JMP is written in C for Linux.
debugtools.com has released version 3.4 of JDebugTool, a standalone graphical Java debugger built on top of the Java Platform Debugger Architecture (JPDA). This release supports Java 1.5 and works better with different Look and Feels. and will install the JPDA debugger library JAR archive if necessary. JDebugTool is $99 (personal)/$199 (corporate) payware.
Brendan Macmillan has posted version 2.1.7 of Java Serialization for XML (JSX)
2, a library for converting Java objects into streams of XML
and reading the objects back from the streams. To use it, replace
ObjectOutputStream
with
JSX.ObjectWriter
and ObjectInputStream
with JSX.ObjectReader
.
JSX costs $200 per developer plus $500 if you want to distribute the application. 2.1.7 is a bug fix release.
ej-technologies GmbH has released version 3.0 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). Version 3.0 adds an allocation hot spots view, integrates the memory views with the heap walker (which has been redesigned), provides automatic deadlock detection, supports recent versions of Java WebStart, can export views to HTML, and integrates with the most recent releases of the major IDEs (IDEA, Eclipse, NetBeans, and JBuilder).
ej-technologies has also released Install4j 2.0.4, a $598 payware cross platform tool for building native installers and application launchers for Java applications. 2.0.4 adds support for Apple's Java 1.4.2 and fixes various bugs.
Finally, ej-technologies has released version 2.2 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. This release prevents JAR files from being easily extracted from the exe with external tools, lets you choose either the server or the client VM, and can uninstall currently running services. Upgrades from 2.0 are free.
NEC has released version 1.1 of the OSS IP Billing API specification. "The main purpose of this version was to add the XML interface to the specification. However, since a maintenance release to the specification was taking place, additional modifications to the previously existing Java Value Type interface were also incorporated."
Sun has released the J2ME Web Services Specification. This describes a subset of JAXP and JAX-RPC intended for talking to SOAP services from Java 2 Micro Edition devices. "The goal of this optional package is to define a strict subset wherever possible of the XML parsing functionality defined in JSR-063 JAXP 1.2 [2] that can be used on the Java 2 Micro Edition Platform (J2ME)".
There are major problems in the SAX subset. Sun is using the confusing, underspecified SAXParser
and SAXParserFactory
classes instead of the much cleaner, better specified XMLReader
and XMLReaderFactory
classes. They've also removed ContentHandler
completely and replaced it with DefaultHandler
. This
requires altering signatures in JAXP and makes it substantially more difficult to port standard SAX programs to J2ME.
If Sun really finds true SAX to be inappropriate for a micro environment, then they're free to develop their own API that better fits the needs of small devices. And indeed they're doing exactly that with the StAX API. Thus it's completely unclear to me why they felt the need to fork SAX in this fashion. They keep claiming SAX is too big, but if size were really the concern, I'd expect them to limit themselves to one API for this use case rather than two.
IBM's alphaWorks has updated the Interface Tool for Java, a program based on the Java Native Interface and COM that allows Java programs to communicate with ActiveX objects. The tool "creates Java proxies from the ActiveX controls's typelib. These proxies can then be used to allow a Java program to communicate with the ActiveX object." This release fixes various bugs.
The Colorado Software Summit has published a Call for Papers. The conference takes place at the Keystone Resort October 24-29. I've heard relatively good things about this show over the years, though they also have a reputation on being stingy when it comes to paying speakers so I'm unlikely to attend myself.
Dan Creswell has released Blitz JavaSpaces 2.0.1, an open source implementation of JavaSpaces that is Jini 2.0 enabled. It implements smart indexing, tuneable persistence, and active/passive lease cleanup. 2.0.1 is a bug fix release.
R. Rawson-Tetley has posted SwingWT 0.80, 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 version primarily fixes bugs. SwingWT is dual licensed under the Common Public License and the LGPL.
Andy Hunt asks, "Think about it: have you ever had to reboot your microwave?" Well, yes, Andy, actually I have had to reboot my microwave, more than once in fact. The only reason microwaves seem to work better is that they have less software to go wrong, but the more the manufacturers stuff in, the more that does go wrong. I see no evidence that my microwave oven is any less buggy than typical commercial software, especially on a bugs per line of code metric. I want software that's better than the software in my microwave. I also want it to be much easier to use. The various "auto-defrost", "auto-reheat", "power" and other buttons that require me to enter mysterious undocumented numeric codes are a particular problem.
I'm pleased to announce the release of the XML 1.1 Bible, the first book to dedicated to the new version of the XML standard released by the W3C less than a month ago. XML 1.1 has a number of features that make it much more suitable for use by people whose operating system is MVS or VM/CMS or whose native language is Amharic, Burmese, or Cambodian. That doesn't describe you? Then to be honest there really isn't much in XML 1.1 to interest you, which is why the XML 1.1 Bible is quite clear in its recommendation that most users should stick to XML 1.0 for the foreseeable future.
However, although the new edition of this bestselling work is titled the XML 1.1 Bible, I didn't stop with the relatively minor changes needed to make it 1.1 savvy. A number of other sections were updated as well including the chapters on XPointers, Schemas, CSS, and XHTML. Most importantly, the book was substantially reduced in size and price. The last edition topped out at 1600 pages and cost almost $70. This edition cuts both the size and the price by almost half. The XML 1.1 Bible should strain neither your back nor your wallet. It comes in at a little over 1000 pages, and just under $40 (on top of which Amazon and other booksellers are currently offering it for 30% off).
How did I manage such a radical reduction in size? The French philosopher and mathematician Blaise Pascal once wrote, "I have only made this longer because I have not had the time to make it shorter." I know how he felt. The first edition of the XML Bible was written under great time pressure, was finished well after deadline, and was the largest book I had written up to that point. My favorite reader comment about that edition was, "It would seem to me that if you asked the author to write 10,000 words about the colour blue, he would be able to do it without breaking into a sweat." While I probably could write 10,000 words about blue, for this edition, I restrained myself and took the time to write more concisely. I rewrote the book from the ground up; and while I retained the basic flavor and outline that proved so popular with the last three editions, I tightened up the writing and cut many examples down to size. With the benefit of five years of hindsight, I have also been able to expand coverage of promising new technologies (schemas, XInclude, XHTML, SVG, XML Base, and RDDL) while eliminating coverage of applications that proved to be less useful than they initially appeared (WML, VML, CDF, HTML+TIME, RDF, aural style sheets, and so on). The result is a more concise, approachable volume that covers more of what you need to know and less of what you don’t. If you liked the first or second edition, you’re going to like the third edition even more. I’m confident you’ll find this an even more useful tutorial and reference.
One change deserves special note. The baseball examples are history. They've been replaced throughout by a shorter, more approachable XML application involving television listings that I hope is a little less offputting to European audiences and other non-baseball fans. The baseball examples were a real dividing line among readers. You either loved them or hated them. I'm hopeful that the new television examples in this edition will be somewhat less controversial. If nothing else, they are certainly shorter.
Should you buy the new edition? If you already have the second or Gold edition, probably not. There's not a lot of new material here. Besides bringing the coverage of a few specs like XML itself and XPointer up to date, the main focus of this revision was to make the whole subject more approachable and accessible for novices. If you're still tooling around with a dog-eared copy of the first edition, it may be time to replace it. However, the second and Gold editions are still pretty up-to-date on most topics, and will continue to serve you well. On the other hand if you're looking for a book to recommend to a colleague or use as a text for a class, then I think the XML 1.1 Bible is better than ever. It covers the basics with more depth and detail, with fewer digressions into the more obscure parts of XML. The price has been reduced to just $39.99, and Amazon has it on sale for just $27.99. Enjoy, and Happy XML 1.1!
Atlassian has released JIRA 2.6, a $1000 payware J2EE-based bug tracking and project management server application. Version 2.6 adds CVS and Confluence integration, an XML-RPC/ SOAP interface, better email support, allows screenshots to be added to issues, and can import data from Mantis. Many bugs are fixed as well.
The Apache Jakarta Project has released POI 2.5, an open source Java library for "manipulating various file formats based upon Microsoft's OLE 2 Compound Document format. OLE 2 Compound Document Format based files include most Microsoft Office files such as XLS and DOC." This release adds support for the HSSF and Escher formats. The latter is used for embedding shapes inside spreadsheets. POI is now published under the Apache 2.0 license.
IBM's alphaWorks has released Structural Analysis for JavaTM (SA4J), "a technology that analyzes structural dependencies of Java applications in order to measure their stability. It detects structural 'anti-patterns' (suspicious design elements) and provides dependency web browsing for detailed exploration of anti-patterns in the dependency web. SA4J also enables 'what if' analysis in order to assess the impact of change on the functionality of the application; and it offers guidelines for package re-factoring." I'd love to test this out, but currently it's only available for Windows. Linux and Mac OS X binaries are promised shortly.
Linus Tolke has posted ArgoUML 0.15.4, an open source UML modelling tool written in Java. ArgoUML is published under a BSD license.
David Koelle has changed the license of his JFugue music library so it's now available for commercial use.
Sun has posted the first public review draft of Java Specification Request 204, Unicode Supplementary Character Support, in the Java Community Process.
This spec defines how Java can handle Unicode characters that no longer fit into a single char
. Basically it suggests using surrogate pairs (two chars equals one character) for character from outside the Basic Multilingual Plane (the first 65,536 Unicode code points). This isn't pleasant, as anybody who's had to do XML processing in Java already knows, but it does work. In addition, some additional methods have been added to String
, StringBuffer
, and related classes that use ints to represent code points. It's probably the best that can be done without breaking backwards compatibility. Comments are due by March 27.
David Koelle has released JFugue, a library for programming playing note-based music in Java through MIDI. The API is simple enough, but it's hindered by a no-commercial use license.
Marco Schmidt has released ImageInfo 1.5, a Java class that examines InputStream and RandomAccessFile objects to determine whether the stream/file is in one of the supported image file formats and if so read the image's height, width, and color depth. ImageInfo is in the public domain.
Version 0.7 of jTDS has been released. jTDS is a 100% pure Java (Type 4) open source JDBC 2.0 driver for the Microsoft SQL Server series (6.5, 7.x and 2000). It's originally based on the work of the FreeTDS project. Besides fixing bugs, Version 0.7 adds scrollable and updateable ResultSets, batch updates, BLOB/CLOB support, and JDBC escape handling. jTDS is published under a BSD license.
Websina has released BugZero 3.5, a $999 payware 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.5 improves handling of database connection timeouts and makes a few more pieces configurable.