Kirill Grouchnikov has released the Substance look-and-feel 2.2. "The goal of this project is to provide a modern Java look & feel that combines graphic ideas from Windows XP / Vista and MacOS 10.4." That sounds sort of like mixing a truly excellent Cabernet with a quite nice carton of milk. Java 5 or later is required.
Tomorrow, Tuesday, February 28, I'll be at the New York PHP Users Group to talk about RSS, Atom, OPML, and All That. The meeting starts at 6:30 P.M. You need to RSVP online to attend. Hope to see you there!
BenQ Corporation has posted the early draft review of JSR-259 Ad Hoc Networking API. According to the draft,
Ad Hoc Networking API JSR proposal enables communication between mobile devices in a peer-to-peer ad hoc network environment. It will be an optional package for the J2ME configurations CDC and CLDC and mainly targeted for MIDP devices. Scope of this JSR is to provide a generic mobile ad hoc communication mechanism, which hide the actual architecture and complexity from the developers. This JSR will not define and imply any concrete ad hoc networking implementation and mechanism but will be generic enough to support different implementations. It is up to the implementing party to realize to API based on one or more available stack enabling ad hoc networking. The JSR will not define any user defined behavior or user interface but leaves them to be defined by the actual implementation of the API.
Possible underlying protocols include Zeroconf, UPnP, and JXTA. Comments are due by March 1.
Linus Tolke has posted ArgoUML 0.20, an open source UML modeling tool written in Java. This release adds support for UML 1.4, Sequence Diagrams, and AndroMDA. ArgoUML is published under the BSD license.
Apple has posted the sixth beta of Java 5 (Tiger) Release 4 for Mac OS X 10.4 (Tiger) on the Apple Developer Connection (first born child required). This is based on Sun's J2SE 1.5.0_06. Most importantly it finally makes Java 1.5 the default instead of 1.4. This release is compatible with the Intel Macs.
David Hovemeyer and Bill Pugh have posted FindBugs 0.9.5, an automated open source tool for finding potential bugs in Java code. New detectors in this release include:
I tested this out on XOM. Almost
all the bugs it found were false positives, though it did find one place where I could change catch (Exception ex)
to several more specific catch
clauses for individual runtime exceptions.
That's not really a bug, but it is a good idea. Hmm, on further experiment it seems I can remove the try-catch block completely. That means either:
A. I don't need it.
or
B. There's a missing test case somewhere.
It looks like Clover had noted this too. I'll have to investigate further. It found similar issues in a couple of other classes. If I hadn't used this tool frequently in the past, it would have found more.
The final draft of the second edition of Java I/O is done and off to production. This is one of my personal favorite books, and it's been overdue for an update for several years now. It still has to go through layout, copy edit, indexing, and printing, so it will be a couple of months yet before it arrives on store shelves. However, in the meantime, I've posted the example code.
There's a lot of new content here to explore. (The previous edition was circa Java 1.1 and 1.2.) Most obviously there are three and a half new chapters covering the java.nio
packages, including channels, buffers, and non-blocking I/O. There's also a lot of new material from Java 5 and Java 6 including printf()
.
However for me the most intriguing new material came at the end of the book where I wrote extensively about how to talk to various small devices including
USB, Bluetooth, and anything that supports J2ME and the Generic Connection Framework.
I'll have more to say about that in the not too distant future.
In the meantime, check out the examples; and should you happen to notice any bugs that escaped the tech editors, it's not too late to fix them.
The Eclipse Project has posted the fifth milestone of Eclipse 3.2, 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. Most importantly this milestone adds support for Java 6 Mustang and X86 Macs. Other new features include:
On the other hand they've added one very nasty "quick break", Remove brackets. This is a very bad idea. I have to go file a bug on this one. There. Done. Almost equally unwise is a quick assist to autogenerate hashCode()
and equals()
methods. I'm sorry, but these methods are just too tricky to expect a computer to get right. (Then again, they're so tricky that most humans don't get them right either most of the time.)
SWT has also been much improved with
There's quite a bit more. This is really quite an impressive milestone.
Websina has released BugZero 4.3, 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. 4.3 adds assorted minor features including a full text listing format of the query result.
Robert Oloffson has posted version 0.50 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.50 fixes bugs. JMP is written in C for Linux.
Atlassian has released version 3.5.1 of JIRA, a $1200-$4800 payware J2EE-based bug tracking and project management server application. 3.5.1 is a bug fix release. I've been using Jira lately with Jaxen and Apache. It's a definite improvement over Bugzilla. I'm not sure it really does anything that Bugzilla doesn't do (at least not anything I use) but the user interface is about a hundred times cleaner.
Sun's posted the first official beta release of Java 6 Mustang. I've been following along with the weekly builds, and so far they seem solid. Among other new features, this release includes a new Smart Card I/O API. That sounds useful, but I question why it's in the core instead of being a standard extension. It is a javax package. Does that qualify as an extension implementers are allowed to drop, even if it's bundled with Java 6? I'm not sure.
Jonathan Knudsen and I are trying to figure out if HTTP headers sent and received by MIDlets are reliable or not. That is, will phone company proxy servers ever remove or change the headers fields. We're eespecially interested in Content-length, but the general question is of interest too. If anyone has seen a phone company proxy server change or delete an HTTP header on its way to or from your MIDLet, could you please send me details? Jonathan thinks he's seen this happen, but he doesn't remember the details any more. Thanks.
Kent Beck and David Saff have released JUnit 4.0. JUnit 4 takes advantage of Java 5 features like annotations, varargs, and generics to simplify unit testing still further. If you're committed to Java 5, then JUnit 4 is big leap forward. Unfortunately while JUnit 4 is backward and forwards compatible with JUnit 3 test suites and test runners, it's completely incompatible with Java 1.4 and earlier so I'm afraid most of us will be sticking with JUnit 3 for some years to come.
The JUnit web site has not yet been updated. Until it is, the article I wrote for developerWorks is probably the best introduction to this version. I think it's mostly still accurate.
My editor Mike Loukides just noticed that Sun no longer seems to make available the Java Communications API for Windows, only Linux and Solaris. This didn't use to be the case. Are the older versions for Windows available anywhere? Or are there any third party implementations? If anyone knows of anything, could you please drop me a line? Thanks. Note: I'm only interested in actual implementations of the Java Communications API, not alternative APIs for talking to the serial and parallel port such as RXTX. Update: that was fast. Ulf Dittmer found it here. Stephen Drye notes that the IBM Development Package for Eclipse includes a Windows javax.comm implementation. Update to the update: I can't seem to find that. The docs refer to it, but the file doesn't seem to be included in the archive.
Sun has released the finished version of JSR 211, Content Handler API for J2ME. This brings to J23mE some of the vision of content handlers that was hyped in the early days of java, but never really surfaced. In this incarnation it lets developers register Java applications to handle particular MIME types, invoke Java applications via a URL, and invoke native applications from Java programs and vice versa.
Sun has posted the final versions of four Java 2 Micro Edition (J2ME) specifications. These are
Version 1.1 updates the various device profiles to Java 1.4.
Nathan Fiedler has released version 3.7 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 3.7 adds several small features and fixes bugs. JSwat is now published under the Sun Public License. (It was previously published under the GPL.)
Achim Westermann has released JChart2D 1.1.0, a thread-safe, libré (LGPL) Swing widget for drawing x-y plots. new features in this release include viewports, run-time configuration by popup menus for traces and charts, and flexible rendering of traces by discs, polylines, and filled polygons.
Frederic Lavigne posted version 6.2 of his Skin Look And Feel for Java. SkinLF allows Java developers to use Skins (GTK and KDE themes) in their Swing applications. This release supports theming text component borders and JDK 1.4 frame decoration. It also provides theme converters to port themes written for other skin engines to SkinLF themepacks. This is a bug fix release. Java 2 is required.
Kohsuke Kawaguchi has released , an open source continuous integration system. Hudson is based on servlets and requires a Java Servlet 2.4 or later container.
That last bit is a deal breaker for me. I thought I might try this out until I read that I'd have to deploy it on top of Tomcat. I wonder when Sun's going to realize how badly Tomcat and servlet deployment are crippling products higher up in the stack. It's not just Tomcat either, though some other servlet containers might be marginally better. Servlets took the worst single part of Java, the classpath, and multiplied its complexities a thousandfold when moving from the client to the server. These days I won't even consider a Java product that runs on top of a web server. PHP makes my life simpler. For instance, I never have to worry about restarting PHP just because I've rebooted the server. Yes, I know there are experts out there who can make servlets work, but why should I have to waste my life twiddling config files for hours just to get a basic Hello World program to run at the right URL? Unlike Java, PHP just works. Sure the PHP language is inferior to Java; but deploying PHP apps is so much easier, that doesn't much matter.
Sadly the programmers who designed Java never knew or never cared much about human interface factors which is why to this day we are still struggling with the classpath, an inability to create double clickable applications, an incomprehensible security model, and server side deployments from hell. A beautiful language doesn't matter much when you can't actually deploy the programs you've written.
verson 2.1.2 of
BlueJ , a free integrated development environment
(IDE) for Java aimed at education, has been released.
2.1.2 is a bug fix release.
I've posted the notes from yesterfay's talk to Capital District Java Developer's Network on the subject of Measuring JUnit Code Coverage.
Cedric Beust has released TestNG 4.5, an open source testing (unit, functional, and integration) framework based on annotations. Version 4.5 adds some small features and fixes bugs. TestNG is released under the Apache Software License. Java 1.4 or later is required.
IBM's alphaWorks has released version 1.2.8 of the IBM Toolkit for MPEG-4, a Java class library for working with MPEG-4 video and audio. Version 1.2.8 improves handling of MP3 and M4V files and fixes bugs.
Cenqua has released Clover 1.3.12, a $250 payware unit test coverage tool. 1.3.12 "is a bugfix release. It addresses a problem that prevented Clover-instrumented classes from loading correctly in JBoss 3.x under some conditions. It also includes various minor improvements and bugfixes." 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. I use Clover with Ant, but there are also versions for 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.
As usual I tested this release on XOM. I've been doing some updates on XOM lately, so I was curious to see how the code coverage was holding up. Externally the changes since the 1.1 release in November are quite minor, but internally I'd completely rewritten one class, and made very significant changes in several others since the last time I measured the coverage. A few things I noticed:
Element.attributeIterator
can probably skip a hasNext check if I trust Jaxenxml
(or perhaps I'm making an unnecessary test for that).DOMConverter.convert()
method. This was one of the major changes since the last release.DOMConvert.convert(Attr attribute, NodeFactory factory)
is completely untested. That's very surprising. This is probably a real bug (though in new code, not old code).DOMConvert.convert(Element, NodeFactory)
has an untested block that might be dead code.They're a few other places that appear to be minor uncovered fragments, nothing too shocking. I'll have to look into these in more detail. Bottom line: if it isn't tested, it is buggy.
If anyone would like to hear more about this subject, tonight I'll be in Albany to talk to the Capital District Java Developer's Network on the subject of Measuring JUnit Code Coverage. The meeting starts at 6:00. If Albany's a little far for you, I'd be glad to repeat this talk for other user groups, conferences, or companies. Just drop me a line. I'll post the notes here tomorrow.
JetBrains has released IntelliJ IDEA 5.1, a popular $499 payware integrated development environment for Java that runs on Windows, Mac OS X, Linux, and Unix. New features include enhanced internationalization tools, JSP debugging in WebSphere 5.1, and new actions for auto-creating new application, module, and project components. Upgrades from 5.0 are free. From other version upgrades cost $299.
The Big Faceless Organization has released the Big Faceless PDF Library 2.6.6, a $700 payware (more if you want support) Java class library for creating PDF documents. The $1300 Extended Edition adds the AcroForms support, digital signatures, and the ability to import and edit and existing PDF documents. Version 2.6.6 can extract XFA data from a form and set a form's values based on an XFA dataset object.
Christof Dallermassl has posted GPSMap 0.5, a free-as-in-speech (LGPL) Java library and application for plotting NMEA data on maps it downloads from the Expedia map servers. "It consists of different modules that may be used as a programmer's framework or as an application. The main application is GPSylon. A smaller command line tool (demonstration of the gpsinput library) is named GPSTool. The library that is used to communicate with the gps device can be used independently and is provided as a separate jar file (since version 0.5)." GPSMap can talk to increasingly uncommon serial port GPS units. It may work with Bluetooth or USB if you can map that to a serial port first, though I've never had any luck with that myself. I've actually been working on USB and Bluetooth GPS devices lately. Expanding this library to cover Bluetooth more directly probably wouldn't be hard, though it would need a JSR-82 stack, and those aren't cheap. However Java USB support is pretty pathetic at this opoint in time. It only works on Linux, and then only if you run as root. :-(
Mantis 1.0, a free-as-in-speech (GPL) bug tracking system based on PHP and MySQL, has been released.
Atlassian has released version 3.5 of JIRA, a $1200-$4800 payware J2EE-based bug tracking and project management server application. Version 3.5 adds bulk workflow transitions, a FogBugz importer, a charting plugin, Microsoft Word Export, and a Component Lead notification type. I've been using Jira lately with Jaxen and Apache. It's a definite improvement over Bugzilla. I'm not sure it really does anything that Bugzilla doesn't do (at least not anything I use) but the user interface is about a hundred times cleaner.
Martin Auer has released UMLet 6, "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, EPS, and PDF formats and can be used as an Eclipse plugin. This release adds some new diagram types. UMLet is published under the GPL. Java 1.5 is required.
Sun has released NetBeans 5.0, an Integrated Development Environment (IDE) for Java. versoon 5.0 "introduces comprehensive support for developing IDE modules and rich client applications based on the NetBeans platform, the new intuitive GUI builder Matisse, new and redesigned CVS support, Sun Application Server 8.2, Weblogic9 and JBoss 4 support, and a lot of editor enhancements."
On the plus side, version 5.0 finally puts the menu bar in the right place; the CVS integration seems to be much improved; and unlike Eclipse it will run on Intel Macs. NetBeans is catching up. In a few ways it's superior to Eclipse; but overall I don't think it's quite there yet. Eclipse or IntelliJ IDEA still seem like the superior choice for most users. Netbeans is available for Windows, Linux, Mac OS X, and Solaris. Java 1.4.2 or later is required.