The Apache Jakarta Project has released
version 2.0.8 of
jakarta-oro. This class library contains text-processing classes that provide
Java with Perl 5 compatible regular expressions, awk-like regular expressions, glob expressions, and utility classes for performing substitutions, splits, and filtering filenames.
2.0.8 is a bug fix release.
jutils.com has released lint4j 0.51, a free-beer "static Java source code analyzer that detects locking and threading issues, performance and scalability problems, and checks complex contracts such as Java serialization by performing type, data flow, and lock graph analysis." I ran this across the XOM code base. It noted a few places where I could slightly simplify the code. However, it didn't find any real bugs or issues; and did report numerous false positives.
Codeca has released BugRoster 1.0.3, a $499 payware, web-hosted, multi-user defect tracking and reporting system.
YourKit, LLC has posted a beta of Memory Profiler 2.0, a 99€ 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. The tool runs on Windows or Linux.
Sun has posted an alpha of Java 1.5 (a.k.a. Java 2 Standard Edition Development Kit 1.5) for Windows, Linux, and Solaris. Registration is required.
Slava Pestov has uploaded the eighth 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 BeanShell 2.0b1 and syntax highlighting for Lua, SMI-MIB, Swig, PSP, and Poplog-11. In addition many bugs were fixed.
Sun has posted the
proposed
final draft specification of
JSR 114,
JDBC Rowset Implementations (javax.sql.rowset
),
to the Java Community Process.
It's all HTML JavaDoc, according to which,
The JDBC 3.0 API specification provides a set of standard interfaces that define the functionality of all JDBC RowSet objects. To standardize implementations of these interfaces, this specification aims to define a set of JDBC RowSet Implementations using a common set of APIs and utility classes.
In addition, we to standardize the means by which disconnected JDBC RowSet objects communicate with underlying data stores by defining standard set of syncrhonization semantics.
Sun's released a minor maintenance update to the Java Development Kit 1.4.2, version 1.4.2_03. The only listed change is updated certificate authority certificates. It's available for Winodws, Linux, and Solaris.
As usual I'll be away for the holidays for the next week or so. Updates are likely to be a little sparse until I return.
Apple has posted Java 1.4.2 Developer Preview 2 for Mac OS X 10.3 on the Apple Developer Connection (registration required).
Nokia has released the finished version of Java Specification Request (JSR) 184, Mobile 3D Graphics API for J2ME, to the Java Community Process (JCP). The goal is "an efficient 3D Graphics API suitable for the J2ME platform, in particular CLDC/MIDP. The API is targeted at CLDC class of devices that typically have very little processing power and memory, and no hardware support for 3D graphics or floating point math. The API has been defined such that implementations on that kind of hardware are feasible. However, the API also scales up to higher-end devices featuring a color display, a DSP, a floating point unit, or even specialized 3D graphics hardware." The reference implementation and technology compatibility kit must be licensed from Nokia.
The Blackdown Project has posted the first release candidate of their version of the Java 2 Standard Edition for Linux 1.4.2. This includes a software devlopment kit, runtime environment, and Java plug-in for Linux on x86 and AMD64. XFree 86 4.2 or later, glibc 2.2.5 or later, and kernel 2.4.18 (2.4.19 for AMD64) or later are required.
The prosecutions against the three soldiers and one civilian accused of various forms of espionage at Camp Delta at Guantanomo Bay continue to fall apart. The Air Force has now dropped three of the most serious counts against the Syrian-born translator Ahmad I. al-Halabi. The specific charges dropped include aiding the enemy, e-mailing information about detainees, and transmitting information to unauthorized recipients. Ten charges had been dropped in November. There are 17 counts still pending against al-Halabi, though I'm not sure how serious those counts are. They include espionage, failure to obey an order, retaining documents without authority, making false official statements, and executing a fraudulent credit application scheme. I continue to believe three of the four prosecutions are racially and religiously motivated, while the fourth is likely just a colossal fuck-up.
The Eclipse Project has posted the sixth 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. New features since milestone 5 include
A recent crash had trashed some of my previous Eclipse installation so it could no longer debug. Rather than reinstalling 2.1, I took the opportunity to install this beta. Some of the new features turned up minor problems with throws clauses, JavaDoc comments, and extraneous local variables, methods, and statements. However, overall 3.0 is much slower than 2.1 on the same hardware, OS, and VM. Simple code edits can cause several second pauses. Scrolling is often disabled, and then speeds madly to catch up when Eclipse finally notices I've been pressing the scroll button for several seconds. Overall, this is not nearly as smooth a user experience as 2.1 was.
Radim `HSN` Kolar has posted the first release candidate of the Java FSP Library, an open source (MIT/X license) protocol handler for the FSP protocol.
IBM's alphaWorks has released version 1.1.1 of the IBM Toolkit for MPEG-4, a Java class library for working with MPEG-4 video and audio. Version 1.1.1 is a bug fix release.
The Apache Project has released Ant 1.6, the popular open source build tool. "Ant 1.6 adds a lot of new features, most prominently support for XML namespaces as well as a new concept of Ant libraries that makes use of namespaces to avoid name clashes of custom tasks." New tasks in this release include scp, symlink, chown, chgrp, attrib, p4integrate, p4resolve, p4labelsync, sshexec, image, sync, import, macrodef, and presetdef. Java 1.2 or later is required. Java 1.1 is no longer supported.
Michael Clark has posted JMemProf 0.6, an open source (LGPL), live Java memory profiler suitable for deployment in Web containers such as JBoss and Tomcat. JMemProf can retrieve memory profile information from a running application. This release fixes various bugs.
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.
Apple has released Java 3D and the Java Advanced Imaging for Java 1.4.1 on Mac OS X 10.3 (a.k.a Panther).
R. Rawson-Tetley has posted SwingWT 0.76,
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 adds support for disabled tabs in JClosableTabbedPane
/JTabbedPane
, thread safe method calls for all components, Scrollable JPanel
s in JScrollPane
, a JTableHeader implementation, andJOptionPane.showinputDialog()
.
SwingWT is dual licensed under the Common Public License
and the LGPL.
I finally finished Neal Stephenson's QuickSilver yesterday. I was surprised it took me so long since I finished the equally voluminous Cryptonomicon in about a week. It didn't help that the book is way too large to carry on the subway, or stick in my pocket when I go to Popeye's for lunch. More importantly, though, in 900+ pages of QuickSilver, not a whole hell of a lot happens. It's certainly not the page turner Cryptonomicon was. Yes, Newton invents calculus, governments rise, governments fall, a few small wars take place mostly off camera, and the beginnings of the modern stock markets get going in Amsterdam and London. But this is all historical. As far as the main characters, they mostly spend their time trying to survive without any particular goal or purpose. The one notable exception is the middle third of the book, the rather picaresque adventures of one Jack Shaftoe. However, the first third of the book is devoted to setting the stage for the rest of the book. The last third mostly deals with court intrigues and economics, aside from one amusing chapter about sand sailing. The middle third also spends a considerable amount of effort on economics. This may be of interest to anyone who didn't take introductory economics in college, but for a typical, educated 21st century reader, the effects of a dual gold and silver based currency, short selling, and market manipulation are hardly as astonishing revelations as they are to Jack and Eliza. Overall, it's a good book and worth reading (especially if you don't know much about the history of Western Europe in the late 1600s), but it's not up to the high standards set by Cryptonomicon.
It's no secret at this point that Enoch Root is indeed extraordinarily long lived. He shows up at several times and locations throughout the book. Beyond that little new is learned of him. He does seem to have an interest in alchemy, at least in its more chemical, less mystical form. At one point late in the novel he does provide some medicine for one character, but it's not the magic cure-all he's toting around in Cryptonomicon, just a mild anaesthetic. Whatever's in the cigar box, he doesn't appear to have it in the 17th century. He doesn't seem to show any knowledge of the future, or of science beyond what the learned of his day could reasonably know, so it feels much more likely that he's merely long lived rather than a time traveller. He also doesn't appear to be a priest yet. Root is actually quite a minor character in this book, just occasionally popping in for a couple of pages or less to nudge other characters in the right direction
There are a few hints about the Societas Eruditorum. It's possible this was founded in the 17th century by Gottfried Leibniz as a German or Continental response to London's Royal Society. However, these are just offhand remarks. The Societas Eruditorum plays no major role in this book. Leibniz, however, does, as do many other historical figures including Isaac Newton, William of Orange, Louis XIV, Edward Teach, Benjamin Franklin, John Wilkins, Bonaventure Rossignol, Robert Hooke, and many others. Stephenson's set up a Wiki to try and keep all the characters and events straight. It's especially useful for figuring out who's really historical and who's a Stephenson invention.
If anything more is to be revealed (and at this point, I kind of doubt it), perhaps it will happen in the next two volumes of the Baroque Cycle. The Confusion is due out on April 13, 2004, and the System of the World on September 21, 2004. But I think it's more likely that if we ever learn what's in the cigar box, it will have to take place in a future book that follows Cryptonomicon. Stephenson originally intended to set that story in three time frames (present, future, and past) rather than two (past, and present) but decided the future deserved a book of its own. If he ever writes it, then maybe we'll finally find out who or what Enoch Root is.
Websina has released BugZero 3.2.4, 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.2.4 adds deployment instructions for Enhydra and makes initialization of new issues more automatic.
Steve Souza has released the Java Application Monitor 1.0 (JAMon), an open source (BSD license) thread safe API for monitoring production applications. JAMon can be used to determine application performance bottlenecks, user/application interactions, and application scalability. JAMon gathers summary statistics such as hits, execution times (total, average, minimum, maximum, standard deviation), and simultaneous application requests. JAMon statistics are displayed in the sortable JAMon report.
R. Rawson-Tetley has posted SwingWT 0.75,
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 adds support for JTree expansion and selection events, JFileChooser
and JColorChooser
, object data storage for JList
and JComboBox
, JInternalFrame
and JDesktopPane
, KeyboardFocusManager
, correct JPopupMenu
firings, window events and defaultCloseOperation()
, and SwingUtilities
-compatible thread methods.
SwingWT is dual licensed under the Common Public License
and the LGPL.
Sean Meiners has released JabberWookie 1.0.1, an open source Java implementation of the Jabber protocol (aka XMPP). JabberWookie is published under a BSD license.
Ivan Moore has released Jester 1.3.0, an
interesting unit test tester tool, sadly hobbled by CLASSPATH problems, a poor user interface, abysmal error reporting, and an inability to distinguish comments from statements.
The basic idea of Jester is that it mutates your source code, for instance by changing an ==
to a !=
, runs all the tests, and sees if any of them report a failure. If none of them do, then the line of code tested is either unnecessary or untested. The results of a Jester run are often eye opening. It's an extremely valuable tool, if you can actually get it to work.
Unfortunately, Jester is mind-numbingly difficult to configure. First you have to make a copy of your source files, because Jester isn't smart enough to make its own copies before mutating them. This means you also need to make sure any paths are adjusted to the new location of the source files. You can't just copy your existing source tree and build system to a new directory because Jester insists that the source code has to be placed in the same directories as the compiled .class files. Then the CLASSPATH needs to be set up just so. It must be set through an environment variable, not via the -classpath command line argument or the ext directory. And even then the TestTester fails more often than not with no indication to the user of why the program could run. A typical message is "Sun Dec 14 08:09:11 EST 2003 running command 'java jester.TestRunnerImpl nu.xom.tests.XOMTests' resulted in '[..................FAILED]'". Yes, I know it failed. Would it be too much to ask that Jester tell me why it failed? Could it not find the test class? Was some other class missing from the CLASSPATH? Was the source code in the wrong place? What was the exception? What was the stack trace? Anything at all that would help me debug the problem?
James Strachan has posted the first beta of Groovy 1.0, an open source, dynamically typed high level scripting language for the Java virtual machine. Features include:
I really have to wonder about the judgement of including operator overloading. I think C++ has proved pretty conclusively by example that is a bad idea. They're about a dozen textbook cases where it makes sense, all mathematical, and then you find yourself trying to debug code where someone is adding two database recorrds together. They're just aren't enough real uses of the various operators to make operator overloading worth its cose in complexity and code legibility. Otherwise it looks interesting. I've never succeeded in getting jython running, and a dynamically typed scripting language for the Java virtual machine could be a very useful tool. Groovy is published under a BSD license. Java 1.4 is required.
Cougaar 1.2 is a memory profiler that is not based on the Java Virtual Machine Profiling Interface (JVMPI). "The profiler tracks memory usage within the application by using tables of WeakReferences. The developer selects which classes should be tracked and runs an automated classfile editor (using BCEL) to add profiling instructions to the constructors. Runtime statistics are maintained, such as the number of allocated and GC'ed instances, and additional detail can be enabled such as per-instance allocation time and allocation-point stacktrace." The user interface is provided as a servlet based, local web site. The license is unclear, but Cougaar seems to be at least free-beer.
SolarMetric Inc. has released Kodo JDO 3.0, an implementation of Sun's Java Data Objects (JDO) 1.0 specification plus "preview features of the upcoming JDO 2.0 specification." JDO permits Java objects to be transparently stored in relational databases. Version 3.0 adds:
Kodo JDO Standard Edition sells for $600 per developer license, and Kodo JDO Enterprise Edition sells for $3000 per developer license and adds J2EE application server support.
Oracle has posted the second public review draft specification of Java Specification Request (JSR) 73 Data Mining API. According to the draft spec,
The Java Data Mining (JDM) specification addresses the need for a pure Java API to facilitate development of data mining-enabled applications. JDM supports common data mining operations, as well as the creation, persistence, access, and maintenance of metadata supporting mining activities.
Currently, no existing Java platform specification provides a standard API for data mining systems. Existing APIs are vendor-proprietary. By using JDM, implementers of data mining applications can expose a single, standard API that will be understood by a wide variety of developers writing client applications and components running on the Java™ 2 Platform. Similarly, data mining clients can be coded against a single API that is independent of the underlying data mining system. JDM is targeted for the Java™ 2 Platform, Enterprise Edition (J2EE™) and Standard Edition (J2SE™).
In JDM, data mining [Mitchell1997, BL1997] includes the functional areas of classification, regression, attribute importance1, clustering, and association. These are supported by such supervised and unsupervised learning algorithms as decision trees, neural networks, Naive Bayes, Support Vector Machine, K-Means, and Apriori, on structured data. Common operations include model build, test, and apply (score). A particular implementation of this specification may not necessarily support all interfaces and services defined by JDM. However, JDM provides a mechanism for client discovery of supported interfaces and capabilities.
JDM is based on a generalized, object-oriented, data mining conceptual model leveraging emerging data mining standards such the Object Management Group’s Common Warehouse Metadata (CWM), ISO’s SQL/MM for Data Mining, and the Data Mining Group’s Predictive Model Markup Language (PMML), as appropriate Implementation details of JDM are delegated to each vendor. A vendor may decide to implement JDM as a native API of its data mining product. Others may opt to develop a driver/adapter that mediates between a core JDM layer and multiple vendor products. The JDM specification does not prescribe a particular implementation strategy, nor does it prescribe performance or accuracy of a given capability or algorithm.
To ensure J2EE™ compatibility and eliminate duplication of effort, JDM leverages existing specifications. In particular, JDM leverages the Java Connection Architecture [JSR16] to provide communication and resource management between applications and the services that implement the JDM API. JDM also reflects aspects the Java Metadata Interface [JSR40] for the general interface specification.
Comments are due by March 8, 2004.
Version 1.3.5 of BlueJ, a free integrated development environment (IDE) for Java aimed at education, has been released. The major new feature in 1.3.5 is auto-open of the last used projects on startup. Numerous minor improvements and bug fixes have also been made.
The JBoss Project has released JBoss 3.2.3, an open source Enterprise JavaBeans application server implemented in pure Java. This release fixes bugs and adds an option to run TomCat 5.1.6 instead of TomCat 4.x (which is still the default.) JBoss provides JBossServer, the basic EJB container and JMX infrastructure, JBossMQ for JMS messaging, JBossMail for mail, JBossTX for JTA/JTS transactions, JBossSX for JAAS based security, JBossCX for JCA connectivity, and JBossCMP for CMP persistence. It integrates with Tomcat Servlet/JSP container and Jetty Web server/servlet container, and enables you to mix and match these components through JMX by replacing any component you wish with a JMX-compliant implementation for the same APIs. Java 1.3 or later is required.
Robert Oloffson has posted version 0.37 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 adds the ability to track how many objects are reachable from a given object. JMP is written in C for Linux.
Sean Meiners has released JabberWookie 1.0, an open source Java implementation of the Jabber protocol (aka XMPP). JabberWookie is published under a BSD license.
Websina has released BugZero 3.2.3, 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.2.3 fixes bugs and improves performance when used with Microsoft SQL Server.
The Big Faceless Organization has released the Big Faceless PDF Library 2.0.4, 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.0.4 improves support for right-to-left languages suvch as Hebrew and Arabic. Java 1.2 or later is required.
IBM's alphaWorks has updated their Focus code coverage tool. "FoCuS is a tool that implements the functional coverage methodology and improves testing of applications by providing detailed coverage information on the areas in which testing is lacking. Functional coverage refers to testing the performance and functionality of an e-business application and making sure that the design of the test is complete and covers every aspect of what the application is meant to do." It's not obvious what changed since the release last month.
Version 1.1.3 of the Kaffe open source Java virtual machine for various Unixes has been released. According to developer Jim Pick,
As this is a development release, it is essentially a snapshot of what's happening in CVS, with limited testing. Even though this is not a production release, it contains a lot of improvements over 1.0.7, which was release over half a year ago. I anticipate that most people will have less trouble with this release.
Here are some highlights of new things done since the last development release:
- More merges from GNU Classpath:
- java.beans
- java.util.Date
- java.util.jar
- java.net
- java.io
- javax.swing.EventListenerList
- More JVMPI support implemented.
- More NIO support implemented.
- java.security.SecureRandom bugfix (with security implications)
- JIT fixes for x86, ARM and Sparc.
- Interpreter fixes (underflow problem)
- Fixes for Solaris, Darwin, FreeBSD.
- Build fixes for powerpc64.
- IPv6 fixes.
- KJC fixes:
- inner class access
- switch labels
- constant initializers
- concatenating a null to a string
- Fixes for SHIFT_JIS (Japanese) encoding.
- Fix for Jetty 4.2.14.
- AppletViewer fix for <applet> tag.
- Lots of minor bug fixes.
- Cleaned up GC code.
- Compiler warning fixes.
- Resynced with existing Classpath, GNU JAXP, Jessie.
He also reports that Kaffe can now run JBoss, Eclipse 3.0M4, and gjdoc/libxmlj. Swing does not appear to be supported yet, though which rules out a lot of applications including jEdit and the JUnit GUI Test Runner. It was not yet able to pass the full XOM test suite either, possibly due to problems with JUnit.
Software 7 GmbH has released Helen 1.5, a tool for creating online help systems in JavaHelp format. Helen 1.5 adds full support for the newly-released JavaHelp 2.0 features including improved printing, glossary and favorites navigational views, more extensibility, and expanded customization options. Prices start at $169 for a single license, with discounts for multiple licenses. Users who have purchased Helen 1.1 on or after March 13, 2003 are eligible for a free upgrade. Upgrades from 1.0 are $49.
Julien Ponge has released IzPack 3.4.0, an open source tool for building cross-platform installers in Java. This release fixes assorted bugs and removes the deprecated front end. It's published under the GPL.
The Legion of the Bouncy Castle has released version 1.21 of the Bouncy Castle Java Cryptography API, an open source, clean-room implementation of the Java Cryptography Extension (JCE). It supports X.509 certificates, PKCS12, S/MIME, CMS, PKCS7, and lots of other juicy acronyms. It also includes its own light-weight crypto API that works in Java 1.0 and later, and does not depend on the JCE. Version 1.21 fixes bugs. Download it while it's still legal.
Sun has released Java 2 Enterprise Edition (J2EE) 1.4. The main focus of this release is web services. Sun claims full support for the WS-I Basic Profile 1.0, a subset of various specification selected for maximum interoperability. According to Sun, J2EE 1.4:
features complete Web services support through the new JAX-RPC 1.1 API, which supports service endpoints based on servlets and enterprise beans. JAX-RPC 1.1 provides interoperability with Web services based on the WSDL and SOAP protocols. The J2EE 1.4 platform also supports the Web Services for J2EE specification (JSR 921), which defines deployment requirements for Web services and utilizes the JAX-RPC programming model. In addition to numerous Web services APIs, J2EE 1.4 platform also features support for the WS-I Basic Profile 1.0. This means that in addition to platform independence and complete Web services support, J2EE 1.4 offers platform Web services interoperability.
The J2EE 1.4 platform also introduces the J2EE Management 1.0 API, which defines the information model for J2EE management, including the standard Management EJB (MEJB). The J2EE Management 1.0 API uses the Java Management Extensions API (JMX). The J2EE 1.4 platform also introduces the J2EE Deployment 1.1 API, which provides a standard API for deployment of J2EE applications. The J2EE 1.4 platform includes security enhancements via the introduction of the Java Authorization Contract for Containers (JavaACC). The JavaACC API improves security by standardizing how authentication mechanisms are integrated into J2EE containers.
The J2EE platform now makes it easier to develop web front ends with enhancements to Java Servlet and JavaServer Pages (JSP) technologies. Servlets now support request listeners and enhanced filters. JSP technology has simplified the page and extension development models with the introduction of a simple expression language, tag files, and a simpler tag extension API, among other features. This makes it easier than ever for developers to build JSP-enabled pages, especially those who are familiar with scripting languages.
Other enhancements to the J2EE platform include the J2EE Connector Architecture, which provides incoming resource adapter and Java Message Service (JMS) pluggability. New features in Enterprise JavaBeans (EJB) technology include Web service endpoints, a timer service, and enhancements to EJB QL and message-driven beans. The J2EE 1.4 platform also includes enhancements to deployment descriptors. They are now defined using XML Schema which can also be used by developers to validate their XML structures.
Sun has released the final specification of Java Specification Request 45 (JSR-45) Debugging Support for Other Languages. The reference implementation is part of the newly released J2EE 1.4.
IBM has published the
second proposed final draft specification for
JSR-13 Decimal Arithmetic Enhancement in the Java Community Process (JCP).
This proposes adding floating point
arithmetic to the java.math.BigDecimal
class,
which would be especially useful for
financial applications. Currently, this class
uses fixed point arithmetic.
For the last couple of years I was buying more music than I had in over a decade, almost all of it discovered on Gnutella. I stopped doing that when the RIAA started suing twelve year old girls in housing projects though. Yesterday I discovered RIAA Radar, a site that will tell you whether a CD you're contemplating buying is published by the RIAA or not. I'm pleased to report that I can buy the new Ingrid Lucia CD and the complete ouevre of Black Box Recorder in good conscience. On the other hand, only one of Sarah Connor's albums is RIAA free, and I can't touch the new Jeanette Biedermann CD. (But that's OK. I already found out on Gnutella that it sucked.) So far this only works for albums that are available from Amazon in the U.S. It would be helpful if the radar were extended to cover other stores, and other countries; but at least now I can buy CDs again.
The third beta of Ant 1.6, the popular open source build tool, has been posted by the Apache Project. "Ant 1.6 adds a lot of new features, most prominently support for XML namespaces as well as a new concept of Ant libraries that makes use of namespaces to avoid name clashes of custom tasks." Java 1.2 or later is required. Java 1.1 is no longer supported.
WEBSina has released JLicense 2.6.1, a simple Java library for creating and validating license keys. The binary is free beer. Source code will cost you $50.
JCraft, Inc has posted JSch 0.1.11, a pure Java implementation of SSH2 that supports port forwarding, X11 forwarding, file transfer, etc. JSch is released under a BSD license. This release supports DSA keypair generation and fixes bugs.
R. Rawson-Tetley has posted SwingWT 0.74, 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 adds support for JEditorPane/HTML, automatic Swing-style event dispatching, and AbstractButton and AWT cursors. SwingWT is dual licensed under the Common Public License and the LGPL.
The recent XOM Code Coverage results that Brendan Humphreys sent me on Monday have gotten me thinking about no-args constructors in exceptions, mostly because the results demonstrated that I wasn't actually using those constructors. Consider a typical exception subclass:
public class MyException extends Exception { public MyException() { super(); } public MyException(String message) { super(message); } }
Java 1.4 adds one more constructor that takes both a message and a root cause. I've followed this particular pattern so many times I could type it in my sleep.
It often shows up in one form or another on my midterm and final exams. But does it really make sense? Why, exactly, do we need the no-args constructor?
Certainly it's better to provide a detailed message than not to provide one. Is there any time you should not provide such a message? Certainly this is the case for some of the standard exceptions in java.lang. For example, it would be quite hard to provide a detail message for all occurrences of NullPointerException
or OutOfMemoryError
. However, for exceptions you define yourself, and which can only be explicitly thrown by a throw
statement, is there any time or reason you would not want to provide a detail message?
If there's not, may I suggest the time has come to stop reflexively writing no-args contructors in our exception classes? Eliminating them has a number of advantages:
Is there really anything you can do with a no-args exception constructor you can't do without one?
The Jakarta Apache Project has released
Tomcat 5.0.16, the 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 implements version 2.4 of the Java Servlet API
2.4 and version 2.0 of Java Server Pages.
The numbering is a little confusing, but this appears to be the first stable
release in the 5.0 series. It should really be numbered 5.0. New features since Tomcat 4.0 include:
The Guardian is reporting that the U.S. Army has fired five of the six lawyers recruited to represent the few prisoners at Guantanamo Bay who will actually be tried. The fired lawyers consisted exclusively of U.S. military officers. We're not talking about Jonnie Cochran here. Apparently even these people felt the trial conditions were too ridiculous to stomach. I remember my grammar school teachers telling us how evil the Soviet Union was because they used unfair show trials to convict political prisoners. I wonder what St. Catherine's is teaching the kids today?
One small (very small) positive note: The Yaser Esam Hamdi, an American citizen and "enemy combatant" being held in the contintental U.S., will be allowed access to a lawyer. Or at least he will unless it looks like the lawyer might actually accomplish something, in which case I'm sure the lawyer will be taken away.
One very important reason for having a system of checks and balances, for actually requiring evidence and proof to convict somebody, is to make sure that the process actually works, that the genuinely guilty parties are charged and go to jail. The rules do not merely exist to protect the rights of the innocent and the accused. A system that does not allow meaningful defense leads to lazy cops and lazy prosecutors who arrest anyone they can get their hands on, and toss them in jail so they can say they caught the bad guy, whether they actually did or not. When the police and the prosecutors know their assertions will be actively challenged and must be proved beyond a reasonable doubt, they work harder. They do a better job. The right people are more likely to go to jail. A system that allows almost anybody to be convicted on only the slimmest evidence or no evidence at all is much more likely to leave the real evildoers at large.
Syntext has released Serna 1.1.0, a $299 payware XSL-based WYSIWYG XML Document Editor for Windows and Linux. Features include on-the-fly XSL-driven XML rendering and transformation, on-the-fly XML Schema validation, and spell checking. Version 1.1.0 adds TEI support, DITA stylesheet updates, and bug fixes.
Pricing is reduced to $149 until the end of the year. If you want support past the first 30 days, it will cost you $99 extra. Personally, I'm not willing to pay for any product that doesn't include support. Especially with end-user software of this nature, it's not like support is so expensive or frequent that it requires a separate price. I can sort of accept that a company might charge for support for some developer tools where support essentially involves extensive debugging work in the user's own code. However, for an end-user tool like this, there are really only three reasons a user will call support:
All of these are the vendor's own fault, and the vendor should eliminate them. It is essential that all these problems be seen as costs to the vendor rather than profit centers. Charging for support gets the incentives exactly backwards. It becomes in the vendor's interest to make the product buggy and hard to use.
Kiyut Software has released Sketsa 1.5, a $39 shareware SVG editor written in Java 1.4. I note they don't charge anything extra for support.
Slava Pestov has uploaded the seventh 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 support for byte order marks in UTF-8 documents and syntax highlighting for MoinMoin, the Relax NG compact syntax, Renderman-RIB, PowerDynamo, WebSphere MQ, and squid.conf. In addition many bugs were fixed.
Mark Lindner has posted the Jolt JVM Daemon 0.3, a wrapper program for Linux and Solaris that enables multiple invocations of java, javac, javadoc, and jar to reuse the same virtual machine for faster startup. Given the problems caused already by classpath and class loader issues, and the number of times I've had to specify fork="true" in my ant build files to make everything work, I'm not sure this is such a good idea.
Michael Fuchs has posted version 0.5.2 of his DocBook Doclet that creates DocBook SGML and XML documents from JavaDoc. New features in this release include a new standard style/layout based on lists, creation of valid and unique IDs, support for the -tag option, many new command line options, and support for the {@linkplain} tag.
Cortex has released Clover 1.2.4, a $250 payware unit test coverage tool. 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 (which I initially confused it with) Clover only tests whether the tests execute each statement. It does not test whether the tests correctly detect bugs deliberately introduced into the code. Ideally you'd want to use both a tool like Jester and a tool like Clover since they do different things. Clover integrates with Ant, NetBeans, Eclipse, and IntelliJ IDEA. It can generate test coverage reports in XML, HTML, PDF, or via a Swing Viewer. Java 1.2 or later is required.
Along with the announcement, Brendan Humphreys sent me a set of Clover reports for XOM. The results are interesting and target a few areas where I still have work to do. On the other hand, I think the overall numbers are a little too low. The tests appear to have run on every method in the API, rather than just the public and protected parts. He even tested the tests package itself. To my way of thinking, as long as all public methods behave appropriately under all possible inputs, the library is working. But now that I think about it, I'm not quite so sure that this really makes sense. In at least some cases if you can change something without breaking anything, then maybe the thing is too complicated? Maybe there's a test there that needn't be there? I need to explore this in more detail.
Clearly a lot of thought has gone into this product. One of the neatest things I noticed about Clover has nothing to do with code coverage testing. Clover depends on several common open source tools including Velocity, Antlr, iText, and Ant. Some of these may well be installed on any system where Clover runs. To avoid version mismatches, a frequent problem for Java programs, the libraries have been obfuscated and/or repackaged and included in the clover jar. This isn't a code hiding technique--they're up front that they've done it--just a way to make sure that Clover gets the right version of the libraries it needs. In reverse, this would prevents Clover's jars from getting in the way of other uses of those libraries on the system, including in the system being tested. What a neat hack, and so much easier than the custom class loaders I've seen used to do this in the past. I'm going to think about whether this is applicable to any of my projects.