The Inline Project has released Inline::Java 0.45, 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."
Version 2.1.2 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.2 fixes bugs that prevented it from interoperating with OpenLDAP 2.2. EJBCA is published under the LGPL.
The Apache Project has posted the first beta of Ant 1.6.1, the popular open source build tool. Version 1.6.1 fixes bugs in namespace handling, and adds support for compiling with Java 1.5. It will probably be published under the new GPL compatible Apache 2.0 license, though the final decision on that remains to be made.
IBM's alphaWorks has released Debug Tracer, an XML-based scripting tool for debugging, tracing, and monitoring Java programs based on the Java Platform Debugger Architecture. The notable feature of this debugger is that it's based around reusable scripts, rather than human controlled single stepping.
R. Rawson-Tetley has posted SwingWT 0.78.1, 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 fixes a bug. SwingWT is dual licensed under the Common Public License and the LGPL.
The Apache Jakarta Project has released POI 2.0, 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." Changes since 1.5 include:
Today I've been working on some example code covering JSSE, specifically the SSLSocket
class. I started with a simple example program I published in Java Network Programming a few years ago to connect to an HTTPS server. The program didn't work at first due to some expired certificates but that was easily fixed by upgrading to Java 1.4.2_03. Then things got weird.
Once the program would agree to talk to the server, it began returning data that looked like this:
HTTP/1.1 200 OK
Server: Netscape-Enterprise/6.0
Date: Wed, 28 Jan 2004 18:13:08 GMT
Content-type: text/html
nnCoection: close
31-Dec-2010 00:00:00 GMT; path=/
Transfer-Encoding: chunked
b6b
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>...
</HTML>
0
Beyond this weird data, the server did not close the connection, nor did it provide a Content-length header to allow the client to figure out when to close the connection as RTFC 2818 requires. It took me quite a while to convince myself nothing in my code was mucking up the data. However, once In was fairly sure the data Java was producing was indeed what the server was sending, the next question was why was the server sending this?
The first weird part was the "b6b" before the HTML document. At first I thought this was an encoding issue (e.g. I was trying to read UTF-8 data as ASCII, or something like that) but I ruled that out by getting the same characters when I read everything raw without decoding it. I tried a couple of different HTTPS servers and noticed that they behaved similarly. However, instead of b6b the second server sent the garbage data "ca". Eventually it occurred to me that these might be hexadecimal digits. Since there wasn't any Content-length header from either server, I surmised this might be a Content-length. I rewrote my code to read the first line of the HTTP body as a hexadecimal content-length, and lo and behold it worked! The numbers matched the actual body length and I was able to close the connection at the right place.
Next I tried adding "Connection: close" to the client headers my program sent to the server. One of the servers I was testing stopped sending a hexadecimmal content length in the response body, but the other didn't. However, both now sent a Connection: close response in the server MIME header.
However, two questions remain:
If it helps, one server was https:/www.amazon.com/. One was https://www.usps.com/. However not all servers behave this way. https://www.verisign.com/, for example, does not send a Content-length in the response body and closes the conenction in the normal way from the server side. Any ideas?
OK. I've got the answer to question 1. It seems the content encoding is chunked. My mistake was thinking this must have something to do with HTTPS. It doesn't. The same issue could arise with plain vanilla HTTP. Still unanswered: why is amazon misspelling "Connection: close"?
R. Rawson-Tetley has posted SwingWT 0.78, 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 is much more compatible with existing Swing apps. SwingWT is dual licensed under the Common Public License and the LGPL.
Hugues Pisapia and Marc Gimpel have posted JSpeex 0.9.2, an open source "Java port of the Speex speech codec (Open Source/Free Software patent-free audio compression format designed for speech). It provides both the decoder and the encoder in pure Java, as well as a JavaSound SPI." 0.9.2 adds support for Speex wave file decoding and fixes some bugs. JSpeex is published under a BSD license.
Sun has released JFluid 1.3.1, a profiler for Java that can profile "an arbitrary subset of a program that can be changed on-the-fly, while the program is running. This is a capability not available in any other profiling tool for Java at this time." JFluid relies on a unique dynamic bytecode instrumentation mechanism and thus only can run on a specially modified HotSpot VM.
Rahul Kumar's Raining Sockets is an open source (LGPL) framework for writing servers based on Java 1.4's non-blocking I/O. "Even the New IO model offers a low level interface to non-blocking IO which is not easy to master, despite all the information and books available. Raining aims to give a high level interface to the user, so that NB IO (NBIO) can be plugged into applications without worrying about details, bugs, proper handling of buffers/selector/channel/events etc." With Raining Sockets the client simply subclasses a single class that that contains complete non-blocking I/O code and overrides a few methods to customize the operations that process the data.
3DChat.org has released Java XTools 1.16, an open source collection of enhanced functions and features for Java 3D. It includes an enhanced BranchGroup Node; object loaders for Renderware .rwx files, Caligari TrueSpace .cob and .scn files, and Alias/Wavefront Maya .obj and .mtl-files; a light-object for a visible light using a lensflare-like effect; RotationInterpolators for combinations of the X-, Y-, and Z-axes, a text to texture converter, a ByteArrayReader, and caching data download classes. XTools is published under the GPL.
Does anyone know of any third-party, non-Sun JSSE providers? Open or closed source, payware or free beer are all of interest. If so, can you please drop me a line with the URL. Thanks. So far I'm aware of Casey Marshall's Jessie. Is there anything else?
The Apache Jakarta Project has released Commons Collections 3.0, an open source library that extends and augments the Java Collections Framework. It includes:
Version 0.6 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.6 provides basic BLOB and CLOB support and implements PreparedStatement.SetAsciiStream and SetUnicodeStream. jTDS is published under a BSD license.
Bodo Tasche has posted JCalendar 0.7.51, an open source calendar GUI widget for Java that "provides a ComboBox (JCalendarComboBox) for selecting a Date and a simple Panel (JCalendarPanel) for showing and editing a Date." This release adds support for Spanish and Chinese and fixes a few bugs. JCalendar is published under a BSD license.
Websina has released BugZero 3.3.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.3.3 is a bug fix release.
Nathan Fiedler has released version 2.20 of JSwat, a graphical, stand-alone Java debugger built on top of the Java Platform Debugger Architecture. Features include breakpoints, source code viewing, single-stepping, watching variables, viewing stack frames, and printing variables. Version 2.20 adds launcher scripts for Unix and Windows. It also fixes several bugs. JSwat is published under the GPL.
JetBrains has posted the first release candidate of Intellij IDEA 4.0 (registration required). IDEA is a $699 payware integrated development environment for Java that's been getting a lot of good buzz for the last year or so. New features in 4.0 include a GUI designer, CVS integration, the ability to modify code from within the debugger and continue running, generics support, and JUnit integration.
Personally, I'm an Eclipse person after a horrid initial experience with IntelliJ about a year and half ago. Perhaps it's improved since then. A lot of people I respect are raving about IDEA. However, Mac developers I hear from about IDEA 4.0 are distinctly negative about it, which is always a a bad sign, as they're usually the only ones who actually understand user interfaces. If the Mac programmers don't like your product, that normally means there's something wrong with it.
The Jakarta Apache Project has released
Tomcat 5.0.18, 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 second stable
release in the 5.0 series. It should really be numbered 5.0.1. It appears to be mostly a bug fix release.
IBM and BEA have submitted Java Specification Request 235, Service Data Objects, to the Java Community Process. According to the JSR,
An established best-practice in J2EE programming is encapsulating business data passed between tiers of an n-tier application in a by-value Java object that is independent of the technologies used to implement the tiers (note that these tiers are sometimes purely logical - that is, in the same Java VM). [1] [2] [3] [5] [7] This pattern, called "Data Transfer Object" [1] [5] [7] and "Transfer Object" [2] [3], will be called Service Data Objects (SDOs) here. SDOs are used in several standard patterns.
- Service Data Objects are used to pass data between a business tier and a persistence tier. The persistence tier is responsible for encapsulating the access to whatever persistent data storage mechanism is being used. The Service Data Object represents the data in a way that is independent of the underlying persistence technology.
- Service Data Objects are used to pass data from the presentation tier (e.g. servlets and JSPs) to the business logic tier (e.g. An EJB session bean facade)
- Data Access Objects [4] [6] abstract and encapsulate a data source by creating and using Service Data Objects as the neutral form of data across applications and data sources. Data Access Objects will be called Data Mediator Services (DMS) here.
Nokia has submitted Java Specification Request 234, Advanced Multimedia Supplements, to the Java Community Process. "The purpose of this API is to give access to multimedia functionality of the modern mobile terminals. Specifically, better support for camera and radio and access to advanced audio processing will be introduced but it’s possible to add other functionality as well." In other words, this is targetted at camera phones and mobile-to-mobile functionality.
Frank Karlstrøm has posted the fifth alpha of JCache 1.0, an open source caching system for Java database-based applications based on JSR-107 JCache API. JCache is published under the LGPL.
The Big Faceless Organization has released the Big Faceless PDF Library 2.0.7, 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.7 seems to be mostly a bug fix release. Java 1.2 or later is required.
Sebastiano Vigna has released version 4.0 of fastUtil,
a collection of type-specific Java maps and sets with a small memory footprint
and faster access and insertion. The classes implement their standard counterpart interfaces such as java.util.Map
and can be plugged into existing code. However, they also contain type-specific methods. For instance, the CharList
class has not only the usual add(Object o)
method but also an add(char c)
method.
Version 4.0 adds type-specific heaps and priority queues, both single and double, direct and indirect.
fastUtil is published under the Gnu Lesser General Public License (LGPL).
Websina has released BugZero 3.3.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.3.2 allows custom to be used in the email notification template.
Dafydd Walters has released JBarcodeBean 1.0.2, an open source JavaBeans component that can display bar codes on the client side or convert them to GIFs for serving to clients from the server side. JBarcodeBean is published under the LGPL.
Dieter Wimberger has written an open source telnet daemon in Java. It is designed to be "easily embeddable into other applications." This is published under a BSD license.
This coming Wednesday, January 21, I will be speaking to the XML Developers Network of the Capital District in Albany, New York. The topic is "XQuery: Exquisite or Excruciating?". I'll be exploring XQuery 1.0 and demonstrating XQuisitor, an open source Swing GUI tool for querying XML that I wrote based on Michael Kay's Saxon 7.0. This has inspired me to try to fix a few lingering issues in XQuisitor. The most annoying is indicated in this screenshot:
If you look closely, you'll noitce that the labels for "Base URI" and "Context document" don't quite line up, nor do their respective text fields. The items in the bottom row are about one pixel to the right of the matching items in the top row. I have wasted a ridiculous amount of time trying to fix this using a variety of layout managers, and so far not succeeded. Currently, I'm using a GridBagLayout with the relevant code as follows:
private JPanel makeOptionsPanel() {
JPanel options = new JPanel();
GridBagConstraints constraints = new GridBagConstraints();
GridBagLayout gbl = new GridBagLayout();
options.setLayout(gbl);
// It looks like each text field needs its own
// UndoManager which is active whenever that field has the focus.
// Otherwise, the undo crosses field boundaries????
// baseField.getDocument().addUndoableEditListener(manager);
JLabel baseLabel = new JLabel(
Messages.getString("Base_URI___9"), JLabel.LEFT);
baseLabel.setDisplayedMnemonic(KeyEvent.VK_B);
baseLabel.setLabelFor(baseField);
JLabel chooserLabel = new JLabel(
Messages.getString("Context___10"), JLabel.LEFT);
chooserLabel.setDisplayedMnemonic(KeyEvent.VK_C);
chooserLabel.setLabelFor(contextField);
constraints.gridx=0;
constraints.gridy=0;
constraints.gridwidth=3;
constraints.gridheight=1;
constraints.anchor = GridBagConstraints.WEST;
gbl.setConstraints(baseLabel, constraints);
options.add(baseLabel);
constraints.anchor = GridBagConstraints.CENTER;
constraints.gridx=3;
constraints.gridy=0;
constraints.gridwidth=4;
constraints.gridheight=1;
gbl.setConstraints(baseField, constraints);
options.add(baseField);
JButton chooseBase = new JButton(Messages.getString("..._11"));
constraints.gridx=7;
constraints.gridy=0;
constraints.gridwidth=1;
constraints.gridheight=1;
constraints.insets = new Insets(0, 2, 2, 0);
gbl.setConstraints(chooseBase, constraints);
options.add(chooseBase);
chooseBase.addActionListener(new BaseURIChooser());
// contextField.getDocument().addUndoableEditListener(manager);
constraints.insets = new Insets(0, 0, 0, 0); // bug fix
constraints.gridx=0;
constraints.gridy=1;
constraints.gridwidth=3;
constraints.gridheight=1;
constraints.anchor = GridBagConstraints.WEST;
gbl.setConstraints(chooserLabel, constraints);
options.add(chooserLabel);
constraints.anchor = GridBagConstraints.CENTER;
constraints.gridx=3;
constraints.gridy=1;
constraints.gridwidth=4;
constraints.gridheight=1;
gbl.setConstraints(contextField, constraints);
options.add(contextField);
JButton chooseFile = new JButton(Messages.getString("..._12"));
constraints.gridx=7;
constraints.gridy=1;
constraints.gridwidth=1;
constraints.gridheight=1;
gbl.setConstraints(chooseFile, constraints);
options.add(chooseFile);
chooseFile.addActionListener(new ContextChooser());
ItemListener redrawer = new NeedsSerialization();
doWrapping.addItemListener(redrawer);
doWrapping.setMnemonic(KeyEvent.VK_W);
doIndenting.addItemListener(redrawer);
doIndenting.setMnemonic(KeyEvent.VK_P);
constraints.gridx=0;
constraints.gridy=2;
constraints.gridwidth=3;
constraints.gridheight=1;
constraints.anchor = GridBagConstraints.SOUTHWEST;
gbl.setConstraints(doWrapping, constraints);
options.add(doWrapping);
constraints.gridx=0;
constraints.gridy=3;
constraints.gridwidth=3;
constraints.gridheight=1;
gbl.setConstraints(doIndenting, constraints);
options.add(doIndenting);
JButton executeButton = new JButton(Messages.getString("Run_Query_13"));
executeButton.addActionListener(new RunQuery());
constraints.gridx=0;
constraints.gridy=4;
constraints.gridwidth=3;
constraints.gridheight=1;
gbl.setConstraints(executeButton, constraints);
options.add(executeButton);
String userdir = System.getProperty("user.dir");
if (userdir != null) {
File baseDir = new File(userdir);
URI baseURI = baseDir.toURI();
baseField.setText(baseURI.toASCIIString());
}
// baseField.set(KeyEvent.VK_B);
JPanel master = new JPanel();
master.add(options);
return master;
}
Does anyone have any idea what I need to do in order to get these user interface widgets to line up pixel perfect? Send suggestions to elharo@ibiblio.org. Thanks.
Update: Jochen Bedersdorfer gave me half the answer. Aligning the field to the EAST rather than the CENTER lines them up. However, this doesn't work for the labels because it aligns their right edges rather than their left, and unlike the field the labels don't have the same width. I'm still looking for the full solution.
And now I have it. "dvholten" noticed that I was carrying the insets from the chooseBase button down to the chooserLabel, and then to all other items added later. That was my bug. It is now fixed as I will prove on Wednesday in Albany. It's reassuring to note that the GridBagLayout does actually work, and it was just my stupid code bug that made it fail to align. This would not have happened if I had not followed the bad practice of reusing the same variable for different objects.
The Jakarta Apache Project has posted the third release candidate of HTTPClient 2.0. "Although the java.net package provides basic functionality for accessing resources via HTTP, it doesn't provide the full flexibility or functionality needed by many applications. The Jakarta Commons HttpClient component seeks to fill this void by providing an efficient, up-to-date, and feature-rich package implementing the client side of the most recent HTTP standards and recommendations....Designed for extension while providing robust support for the base HTTP protocol, the HttpClient component may be of interest to anyone building HTTP-aware client applications such as web browsers, web service clients, or systems that leverage or extend the HTTP protocol for distributed communication." This version fixes various bugs.
Sun Microsystems has posted its financial results for the fourth quarter of 2003 (the second quarter of their fiscal year). Once again, Sun was in the red for the quarter. They lost $125 million, 4 cents a share. However, this isn't nearly as bad as the $2.28 billion loss for the same quarter in 2002, or the $286 million for the previous quarter. Revenue for the quarter was $2.88 billion, down from $2.91 billion a year earlier.
The Zaval Creative Engineering Group has released the Zaval JRC Editor 2.0, a GUI tool for editing Java reosurce files commonly used for localisation. It's published under the GPL.
"Wiz" has released DateChooser 1.2.4, an open source (GPL) widget for selecting a date from a calendar interface.
The Object Refinery has posted version 0.9.16 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 title and category label wrapping, legend shape scaling, and new Spanish localisation files. It also fixes various bugs. JFreeChart is published under the LGPL.
Dan Creswell has released Blitz JavaSpaces 1.1.3, an open source (BSD license) implementation of JavaSpaces that is Jini 2.0 enabled. It implements smart indexing, tuneable persistence, and active/passive lease cleanup.
Stefan Palme has released HBCI4Java 2.4.7, an open source Java class library for the HBCI home banking interface that supports 2.01, 2.1, 2.2, and HBCIplus (with PIN/TAN support). HBCI4Java is published under the GPL. The main web page is in German, but the Sourceforge page is in English.
Hugues Pisapia and Marc Gimpel have posted JSpeex 0.9, an open source "Java port of the Speex speech codec (Open Source/Free Software patent-free audio compression format designed for speech). It provides both the decoder and the encoder in pure Java, as well as a JavaSound SPI." JSpeex is published under a BSD license.
Gaudenz Alder has released version 3.1 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. Changes in 3.1 include:
Christian Grothoff has released Runabout 1.4.0, an open source (GPL) "extension of the Java libraries that adds two-argument multi-dispatch to Java without changing the language or the VM. Like the Walkabout, the Runabout uses reflection to find visit methods. But instead of invoking the visit methods with reflection, the Runabout uses dynamic code generation to create code at run-time that will invoke the appropriate visit method. This puts the Runabout closer to MultiJava, a Java source compiler that compiles Java with multi-methods to ordinary Java bytecode. Unlike MultiJava, the Runabout runs when the application is executed, and not at compile time." I don't feel like I understand exactly how this works yet, but it looks interesting.
Tiger Privacy has posted Tiger JMail 1.0 rc3, an open source (LGPL) replacement for Sun's javamail.
Teodor Danciu's posted version 0.5.1 of JasperReports, an open source Java library for generating reports from XML templates and customizable data sources (including JDBC). The output can be displayed on the screen, printed, or written to XML or PDF files. Version 0.5.1 fixes assorted bugs.
SSHTools.com has posted J2SSH 0.2.7, a Java implementation of the secure shell protocol that "provides a fully featured SSH2 implementation specifically designed for cross platform development. Higher level components representing both the standard SSH client and SSH servers are provided which implement the protocol specification for user sessions and port forwarding." Supported features include public key and password authentication and the SFTP protocol. This release fixes assorted bugs. J2SSH is published under the LGPL.
Marc Schoenefeld has written JChains, a custom security manager framework that "records the permissions needed for the codebases (jars) of j2se applications running under access control of a security manager. The resulting policy file is recorded while running the program and is useful as a starting point when developing a security policy for a java application. When run against libraries when source is not available it is useful for reverse engineering, revealing the permission needed to use the libraries. This is helpful when you do not trust the jar , and do not want to grant it the AllPermission free ride ticket." Source code has not yet been released.
Version 2.1.1 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.0 adds a Web GUI for administration, speed ups, soft configurable types of signing device, new access control on method invocation, an option to generate JKS or PEM keystores, a CertificatePolicies extension, a return PKCS7 with full path to browsers, new configurable certificate profiles, more alternative names, user profiles for administrators of different groups, improved serial number generation, and a new logging mechanism. 2.1.1 is a bug fix release. EJBCA is published under the LGPL.
Michael Fuchs has posted version 0.53.2 of his DocBook Doclet that creates DocBook SGML and XML documents from JavaDoc. This release works better on Windows, and fixes some bugs.
R. Rawson-Tetley has posted SwingWT 0.77, 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 improves support for many components and fixes numerous bugs. SwingWT is dual licensed under the Common Public License and the LGPL.
There's an interesting article in the New York Times today about online voting in the Michigan primary which I'm afraid demonstrates just how little knowledge of security most election officials have. It seems that in the Michigan Democratic primary it is now possible to vote over the Internet, in advance. To enable this some campaigns, including the Dean campaign, are bringing their own laptops to potential voters and asking them to vote on the campaigns laptops. Given that the campaign controls these machines, both software and hardware, there is effectively no way to prevent them from rejiggering the votes to support their candidate. It would not be hard, for example, to make sure the laptops change all votes for Clark to a vote for Dean or vice versa, while making it appear that the voter has voted for the other candidate. I have no evidence nor is anybody alleging that such shenanigans have actually taken place. Nonetheless, if campaign sponsored online balloting continues, I have no doubt that this will happen, if not in this election then in the next one, and probably sooner rather than later.
There is one possible protection here. The ballots in this case are individually numbered, and according to the Times article, this is not a secret ballot. (which is legal because this is not a real election, only a caucus run by the party which subcontracts to the corporation Election Services Corp.) However, it's not clear whether voters can check that their ballot recorded a vote for the correct candidate. If they can't, there's a real problem here. According to this Dawson Bell column in the Detroit Free Press, the results will be kept temporarily and can be traced back to individual voters if there's a challenge. Better, but still not secure enough for my tastes. It does not let voters check their votes themselves. This is not a voter verifiable audit trail. If I were a Michigan voter I'd demand a system in which an independent auditor checks each and every online (and mail-in) vote to make sure that the voter was actually the person who voted, and the vote recorded was the one they cast. If that's too expensive, then we should stick with ballots cast in the election booth on the election day. This needs to be stopped.
Tom Copeland has released PMD 1.4, 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 release seems to be much improved over 1.3, which is to say 1.4 works and 1.3 didn't. 1,4 also adds an AbstractNamingRule (which I personally don't agree with) and a ProperCloneImplementationRule.
In my tests, PMD 1.4 found a few minor problems in the XOM code base (unused local variables, mostly) but didn't turn up anything too major. This isn't necessarily a fair test, because XOM has been repeatedly checked with earlier versions of PMD as well as other similar tools, so most of the easy problems have been found and fixed.
Websina has released BugZero 3.3.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.3.1 is a bug fix release.
The figure that sticks in my memory from Steve Jobs' keynote on Tuesday is that 40% of the installed Mac base is running Mac OS X. If that's true, then 60% (including me) are still running Mac OS 9. Which makes me wonder: why do I find it so hard to find decent, new software for Mac OS 9? In some cases it's obvious. The software is written in Java, which Apple never supported adequately on Mac OS 9, or it's a port of old Unix software, and even Mac OS X support is an after thought. Or it's freeware written primarily for the programmer's own amusement.
However, I really do have to wonder when longtime Mac software copmpanies and hardware vendors drop support for Mac OS 9, and when nobody wants to sell to this market. For instance, I would have paio for an upgrade to the latest version of my FTP client Fetch a year ago (when Mac OS X was an even smaller percentage of the installed base) if it had offered secure FTP support on Mac OS 9, but it didn't. Secure FTP was only available on the Mac OS X version, so they lost a sale. Bare Bones lost at least one upgrade to BBEdit from me by not providing compelling enough new features on Mac OS 9. I like Net Newswire, but I don't use anything except the light version and that only for testing my own feeds because it doesn't run on Mac OS 9. I'm surprised by the number of companies just leaving money on the table
In any case, for me these issues will soon be moot because I'm buying a new G5 in the near future to replace my six year old G3 that still serves as my primary web surfing/e-mail/word processing desktop; so I'll be moving to Mac OS X soon. With luck, I can also move a lot of my development work onto this platform as well, though I'll still keep a Linux box handy to test the latest Java betas that always arrive a year or two late on the Mac. But I'm a developer. My non-technical wife and her non-technical office are still on Mac OS 9, and likely to remain so for years to come. So are my parents. And I see the same thing in a lot of non-developer/non-power user households and offices. If Mac OS 9 becomes untenable, a lot of these users are going to move to Windows instead of Mac OS X. (Certainly my parents and my wife's office will. They've already begun the transition. At home, my wife will probably bite the bullet and move to Mac OS X, and then complain about it non-stop for two years.) Mac OS X is more stable than Mac OS 9, but it isn't yet as easy to use. I wish Apple and third party vendors wouldn't be so quick to bury it.
JavaZOOM has posted version 0.4 of JavaLayer, an open source, pure Java library that decodes, converts, and plays MP3 files in real time wikthout requiring the Java Media Framework. JavaLayer is published under the GPL.
Version 0.11 of the Abbot GUI testing framework has been released. New features in this release include recognizeing locations in composite components such as JTree so that cells, items, values, etc. can be specified in place of coordinates and support for PopupMenu and CheckBoxMenuItme. Drag and drop recording now works in Java 1.4. Abbot is published under the LGPL.
Robert Oloffson has posted version 0.38 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 allows several filters to run at the same time. JMP is written in C for Linux.
Brendan Macmillan has posted version 2.1.4 of Java Serialization for XML (JSX)
2, a $200 payware 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
.
Michael Fuchs has posted version 0.53.1 of his DocBook Doclet that creates DocBook SGML and XML documents from JavaDoc. New features in this release include support for multiple input files, generation of books or articles, and setting the system identifier in html2db.
Sometimes the good guys win one. Congratulations to Jon Johansen for beating his government, the Motion Pictures Association, and and the DVD Copy Control Association, and protecting his right to play his DVDs on the system of his choice. As you probably remember, Johansen is one of the authors of the DeCSS tool needed to play DVDs on unapproved hardware such as Linux boxes. Johansen was acquitted initially. The prosecution appealed, and he was acquitted again. The prosecution had one more chance to appeal to Norway's supreme court, but they have decided not to lose one more time.
Not one to rest on his laurels Johansen has been working on QTFairUse, software to decrypt Apple's encumbered AAC music format used by the iTunes music store, so he can play his legally purchased music on something other than an iPod. Personally I'd be a lot more likely to buy songs from that store if they came in unencumered, unportected .mp3 or .ogg formats. Go Jon!
Gert Van Ham has posted the first release candidate of JCE taglib 1.0, an open source library based on the Java Cryptography Extension that adds strong encryption and message digests to Java Server Pages (JSP). JCE taglib is published under the LGPL.
The Big Faceless Organization has released the Big Faceless PDF Library 2.0.5, 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.5 fixes a memory leak. Java 1.2 or later is required.
The New York Times has published the results of an investigation into the arrest of Captain James Yee for espionage at Guantanamo Bay. It appears that the conspiracy of which he and two other Muslim soldiers were charged amounted to nothing more than having dinner together on Friday nights and attending chapel services together. Meeting with your coreligionists is now an arrestable offence for which you can be tossed in solitary confinement and locked in leg irons for months.
This is making it clearer than ever that in three of the four espionage cases at Guantanamo Bay, the charges were based on nothing more than racial and religious prejudice. (The fourth case was likely a screwup, or just maybe an attempt on the part of the Army to cover their collective ass so it didn't look like they were only targetting Muslims.) Why any Muslim or Arabic-speaker would even consider serving in the U.S. military after this mess is beyond me.
Thomas Zander has released UICompiler 1.2, an open source rapid prototyping tool for Swing GUIs based on Qt Designer and JDOM. UICompiler is published under an Apache license.
Martin Auer has released UMLet 2, "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. UMLet 2 is published under the GPL.
Dimitry D'hondt and Edwin Mol have posted Smile 0.2, an open source implementation of Java Server Faces (JSF). This release contains everything but the JSP tags, and is built against Early Access 4 from Sun.
DeNova, Inc. has released JExpress Professional 6.5, a $499 payware cross-platform installer builder. This release adds support for Mac OS X Panther. It also supports Windows, Linux, and Solaris.
Happy New Year. This is normally the point where I make a lot of promises about cool new features for this site that don't come to pass. However, for 2004 my plans are focused in on other areas. My goals for this year are three third editions, at least one peer-reviewed paper, and 1.0 releases of XOM and XQuisitor.
3DChat.org has released Java XTools 1.15, an open source collection of enhanced functions and features for Java 3D. It includes an enhanced BranchGroup Node; object loaders for Renderware .rwx files, Caligari TrueSpace .cob and .scn files, and Alias/Wavefront Maya .obj and .mtl-files; a light-object for a visible light using a lensflare-like effect; RotationInterpolators for combinations of the X-, Y-, and Z-axes, a text to texture converter, a ByteArrayReader, and caching data download classes. XTools is published under the GPL.