June, 2007 Java News

Saturday, June 30, 2007 (Permalink)

The Free Software Foundation has released version 3 of the GNU General Public License. This release of the license endeavors to prevent "Tivoisation" (hardware restrictions that prevent modified versions of the software from running.) It also requires patent licenses to be extended to all sublicensees.It also removes the requirement to make source available on physical media (as opposed to Internet downloads).

Friday, June 29, 2007 (Permalink)

O'Reilly has published Beautiful Code, in which 33 programmers discuss what makes code beautiful and demonstrate by example. I wrote Chapter 5, "Correct, Beautiful, Fast (In That Order)". Other chapters include:

Chapter 1, A Regular Expression Matcher, by Brian Kernighan, shows how deep insight into a language and a problem can lead to a concise and elegant solution.

Chapter 2, Subversion's Delta Editor: Interface as Ontology, by Karl Fogel, starts with a well-chosen abstraction and demonstrates its unifying effects on the system's further development.

Chapter 3, The Most Beautiful Code I Never Wrote, by Jon Bentley, suggests how to measure a procedure without actually executing it.

Chapter 4, Finding Things, by Tim Bray, draws together many strands in Computer Science in an exploration of a problem that is fundamental to many computing tasks.

Chapter 5, Correct, Beautiful, Fast (In That Order): Lessons From Designing XML Verifiers, by Elliotte Rusty Harold, reconciles the often conflicting goals of thoroughness and good performance.

Chapter 6, Framework for Integrated Test: Beauty through Fragility, by Michael Feathers, presents an example that breaks the rules and achieves its own elegant solution.

Chapter 7, Beautiful Tests, by Alberto Savoia, shows how a broad, creative approach to testing can not only eliminate bugs but turn you into a better programmer.

Chapter 8, On-the-Fly Code Generation for Image Processing, by Charles Petzold, drops down a level to improve performance while maintaining portability.

Chapter 9, Top-Down Operator Precedence, by Douglas Crockford, revives an almost forgotten parsing technique and shows its new relevance to the popular JavaScript language.

Chapter 10, The Quest for an Accelerated Population Count, by Henry S. Warren, Jr., reveals the impact that some clever algorithms can have on even a seemingly simple problem.

Chapter 11, Secure Communication: The Technology of Freedom, by Ashish Gulhati, discusses the directed evolution of a secure messaging application that was designed to make sophisticated but often confusing cryptographic technology intuitively accessible to users.

Chapter 12, Growing Beautiful Code in BioPerl, by Lincoln Stein, shows how the combination of a flexible language and a custom-designed module can make it easy for people with modest programming skills to create powerful visualizations for their data.

Chapter 13, The Design of the Gene Sorter, by Jim Kent, combines simple building blocks to produce a robust and valuable tool for gene researchers.

Chapter 14, How Elegant Code Evolves With Hardware: The Case Of Gaussian Elimination, by Jack Dongarra and Piotr Luszczek, surveys the history of LINPACK and related major software packages, to show how assumptions must constantly be re-evaluated in the face of new computing architectures.

Chapter 15, The Long-Term Benefits of Beautiful Design, by Adam Kolawa, explains how attention to good design principles many decades ago helped CERN's widely used mathematical library (the predecessor of LINPACK) stand the test of time.

Chapter 16, The Linux Kernel Driver Model: The Benefits of Working Together, by Greg Kroah-Hartman, explains how many efforts by different collaborators to solve different problems led to the successful evolution of a complex, multithreaded system.

Chapter 17, Another Level of Indirection, by Diomidis Spinellis, shows how the flexibility and maintainability of the FreeBSD kernel is promoted by abstracting operations done in common by many drivers and filesystem modules.

Chapter 18, Python's Dictionary Implementation: Being All Things to All People, by Andrew Kuchling, explains how a careful design combined with accommodations for a few special cases allows a language feature to support many different uses.

Chapter 19, Multi-Dimensional Iterators in NumPy, by Travis E. Oliphant, takes you through the design steps that succeed in hiding complexity under a simple interface.

Chapter 20, A Highly Reliable Enterprise System for NASA's Mars Rover Mission, by Ronald Mak, uses industry standards, best practices, and Java technologies to meet the requirements of a NASA expedition where reliability cannot be in doubt.

Chapter 21, ERP5: Designing for Maximum Adaptability, by Rogerio Atem de Carvalho and Rafael Monnerat, shows how a powerful ERP system can be developed with free software tools and a flexible architecture.

Chapter 22, A Spoonful of Sewage, by Bryan Cantrill, lets the reader accompany the author through a hair-raising bug scare and a clever solution that violated expectations.

Chapter 23, Distributed Programming with MapReduce, by Jeff Dean and Sanjay Ghemawat, describes a system that provides an easy-to-use programming abstraction for large-scale distributed data processing at Google that automatically handles many difficult aspects of distributed computation, including automatic parallelization, load balancing, and failure handling.

Chapter 24, Beautiful Concurrency, by Simon Peyton Jones, removes much of the difficulty of parallel program through Software Transactional Memory, demonstrated here using Haskell.

Chapter 25, Syntactic Abstraction: The syntax-case Expander, by Kent Dybvig, shows how macros-a key feature of many languages and systems-can be protected in Scheme from producing erroneous output.

Chapter 26, Labor-Saving Architecture: An Object-Oriented Framework for Networked Software, by William Otte and Douglas C. Schmidt, applies a range of standard object-oriented design techniques, such as patterns and frameworks, to distributed logging to keep the system flexible and modular.

Chapter 27, Integrating Business Partners the RESTful Way, by Andrew Patzer, demonstrates a designer's respect for his programmers by matching the design of a B2B web service to its requirements.

Chapter 28, Beautiful Debugging, by Andreas Zeller, shows how a disciplined approach to validating code can reduce the time it takes to track down errors.

Chapter 29, Treating Code as an Essay, by Yukihiro Matsumoto, lays out some challenging principles that drove his design of the Ruby programming language, and that, by extension, will help produce better software in general.

Chapter 30, When a Button Is All That Connects You to the World, by Arun Mehta, takes you on a tour through the astounding interface design choices involved in a text editing system that allow people with severe motor disabilities, like Professor Stephen Hawking, to communicate via a computer.

Chapter 31, Emacspeak: The Complete Audio Desktop, by TV Raman, shows how Lisp's advice facility can be used with Emacs to address a general need-generating rich spoken output-that cuts across all aspects of the Emacs environment, without modifying the underlying source code of a large software system.

Chapter 32, Code in Motion, by Laura Wingerd and Christopher Seiwald, lists some simple rules that have unexpectedly strong impacts on programming accuracy.

Chapter 33, Writing Programs for "The Book," by Brian Hayes, explores the frustrations of solving a seemingly simple problem in computational geometry, and its surprising resolution.

You can order it from Amazon if you like, though it doesn't appear to be in stock quite yet. Author royalties on this book are dedicated to Amnesty International.

Thursday, June 28, 2007 (Permalink)

Jean-Marie Dautelle and Werner Keil have posted the early draft review of JSR 275, Units Specification, to the Java Community Process. According to the draft,

JSR-275 specifies one or more Java packages for the programmatic handling of physical quantities and their expression as numbers of units. The specification includes:

  • Interfaces and abstract classes with methods for unit operations:
    • Checking of unit compatibility
    • Expression of a quantity in various units
    • Arithmetic operations on units
  • Concrete classes implementing the standard types of units (such as base, supplementary, and derived) and unit conversions.
  • Classes for parsing unit specifications in string form and for formatting string representations of quantities.
  • A database of predefined units.

This sounds interesting, and I hope they can make it work, but I'm not yet convinced it's possible within the existing language. Comments are due by July 8.

Wednesday, June 27, 2007 (Permalink)

The Apache Software Foundation has released of Maven 1.1, an open source build tool for Java that's more declarative and less procedural than Ant. All 1.x users should upgrade to this release.

Maven 2.0.7 is the latest stable release of Maven and is recommended for all new projects, but it is not compatible with Maven 1.x. No further development is planned for the Maven-1.0 branch, and Maven-1.1 is in maintenance mode, i.e. development is restricted to support and bug fixes.

Maven 1.1 is meant to improve the performance and stability for those using Maven 1.0 for their builds. Compared to Maven 1.0.2, this release features several enhancements:

  • Integration of Maven 2 technologies such as Maven Wagon, Maven
  • SCM and the new model code
  • Ant 1.6.5 support
  • Upgrade dependencies, in particular Jelly, Dom4j, Jaxen,
  • Commons-Jexl, and many others.
  • Upgraded versions [2] of almost all the bundled plugins,
  • Improved error handling and reporting.
  • Improved POM layout
  • Significant improvements in memory usage and general performance.

The Apache Software Foundation has also released of Maven 2.0.7. This a bug fix release for the 2.x branch.

Tuesday, June 26, 2007 (Permalink)

Quinn Taylor has released XHTML Doclet, and open source doclet that creates valid XHTML 1.0 Transitional JavaDoc.

Monday, June 25, 2007 (Permalink)

Do you recognize this problem?

Write a program to explain the multithreading with the use of multiplication tables. Three threads must be defined. Each one must create one multiplication table, they are 5 table, 7 table and 13 table. And assign priority 1 to 5 Table, priority 5 to 7 Table and priority 8 to 13 Table. And then run the threads.

If so, one of your students (or fellow students) is trying to get me and probably others to do his homework for him. Drop me an e-mail and I'll tell you who (and just maybe students will start to get the idea that it's not a good idea to send homework assignments to random people on the Internet.)

I don't know why students bother with transparent attempts like this to get away with something. Personally, I'm a very easy grader. About the only ways you can fail one of my classes are to not do the work or to cheat, plagiarize, copy or otherwise break the rules. As long as you hand in each assignment and take both exams, you're pretty much guaranteed a B in my classes. And yet most semesters I have one or two students who might as well be daring me to flunk them.

P.S. This is actually quite a nicely constructed problem, as are the others the student sent me. If you don't mind, I'd like to borrow them for my own exams in the future.

Thursday, June 28, 2007 (Permalink)

Jean-Marie Dautelle and Werner Keil have posted the early draft review of JSR 275, Units Specification, to the Java Community Process. According to the draft,

JSR-275 specifies one or more Java packages for the programmatic handling of physical quantities and their expression as numbers of units. The specification includes:

  • Interfaces and abstract classes with methods for unit operations:
    • Checking of unit compatibility
    • Expression of a quantity in various units
    • Arithmetic operations on units
  • Concrete classes implementing the standard types of units (such as base, supplementary, and derived) and unit conversions.
  • Classes for parsing unit specifications in string form and for formatting string representations of quantities.
  • A database of predefined units.

This sounds interesting, and I hope they can make it work, but I'm not yet convinced it's possible within the existing language. Comments are due by July 8.

Wednesday, June 27, 2007 (Permalink)

The Apache Software Foundation has released of Maven 1.1, an open source build tool for Java that's more declarative and less procedural than Ant. All 1.x users should upgrade to this release.

Maven 2.0.7 is the latest stable release of Maven and is recommended for all new projects, but it is not compatible with Maven 1.x. No further development is planned for the Maven-1.0 branch, and Maven-1.1 is in maintenance mode, i.e. development is restricted to support and bug fixes.

Maven 1.1 is meant to improve the performance and stability for those using Maven 1.0 for their builds. Compared to Maven 1.0.2, this release features several enhancements:

  • Integration of Maven 2 technologies such as Maven Wagon, Maven
  • SCM and the new model code
  • Ant 1.6.5 support
  • Upgrade dependencies, in particular Jelly, Dom4j, Jaxen,
  • Commons-Jexl, and many others.
  • Upgraded versions [2] of almost all the bundled plugins,
  • Improved error handling and reporting.
  • Improved POM layout
  • Significant improvements in memory usage and general performance.

The Apache Software Foundation has also released of Maven 2.0.7. This a bug fix release for the 2.x branch.

Tuesday, June 26, 2007 (Permalink)

Quinn Taylor has released XHTML Doclet, and open source doclet that creates valid XHTML 1.0 Transitional JavaDoc.

Monday, June 25, 2007 (Permalink)

Do you recognize this problem?

Write a program to explain the multithreading with the use of multiplication tables. Three threads must be defined. Each one must create one multiplication table, they are 5 table, 7 table and 13 table. And assign priority 1 to 5 Table, priority 5 to 7 Table and priority 8 to 13 Table. And then run the threads.

If so, one of your students (or fellow students) is trying to get me and probably others to do his homework for him. Drop me an e-mail and I'll tell you who (and just maybe students will start to get the idea that it's not a good idea to send homework assignments to random people on the Internet.)

I don't know why students bother with transparent attempts like this to get away with something. Personally, I'm a very easy grader. About the only ways you can fail one of my classes are to not do the work or to cheat, plagiarize, copy or otherwise break the rules. As long as you hand in each assignment and take both exams, you're pretty much guaranteed a B in my classes. And yet most semesters I have one or two students who might as well be daring me to flunk them.

P.S. This is actually quite a nicely constructed problem, as are the others the student sent me. If you don't mind, I'd like to borrow them for my own exams in the future.

Saturday, June 23, 2007 (Permalink)

The Apache Web Services Project has released Synapse 1.0, an open source "XML and Web Services management and integration broker that can form the basis of a Service Oriented Architecture (SOA) and Enterprise Service Bus (ESB) Apache Synapse offers a wide range of mediation capabilities, including support for a number of open standards, including XML, XSLT, XPath, SOAP, HTTP, JMS, Web Services Security, Web Services Reliable Messaging (WS-RM), SMTP and Web Services Addressing. Synapse supports a number of useful functions out-of-the-box without programming, but it also can be extended using popular programming languages such as Java, JavaScript, Ruby, and Groovy. "


The Apache MyFaces team has released Tomahawk 1.1.6. This is an "'extended' version of some of the default components. These are basically components that exist in either the core or html tag libraries but additional functionality has been addded that goes beyond the specification." In particular there's a <t:inputText> component that provides additional attributes such as forceId and Tiles Support. "This release is a security update that fixes a severe cross-site scripting vulnerability when using the 'autoscroll' feature." All users should upgrade.

Thursday, June 21, 2007 (Permalink)

The Apache Jakarta Project has released Commons JCI 1.0. JCI is a component that can compile Java and other JVM hosted languages. "It is well integrated with a FAM (FilesystemAlterationMonitor) that can be used with the JCI compiling/reloading classloader. All the currently supported compilers (even javac before java6) feature in-memory compilation." Currently, JCI supports the Eclipse, Janino, Groovy, Javac, and Rhino compilers.


The Apache Project has released Struts 2.0.8 an open source framework for building web applications with Java Servlets and JavaServer Pages (JSP). Struts encourages application architectures based on the Model-View-Controller (MVC) design paradigm. 2.0.8 "has over 60 bug fixes and improvements since 2.0.6".


The Apache Jakarta Project has released Java Caching System (JCS) 1.3, an open source "distributed caching system written in java. It is intended to speed up applications by providing a means to manage cached data of various dynamic natures. Like any caching system, JCS is most useful for high read, low put applications. Latency times drop sharply and bottlenecks move away from the database in an effectively cached system."

Wednesday, June 20, 2007 (Permalink)

Sun has submitted JSR-315, Java Servlet 3.0 Specification , to the Java Community Process. According to the JSR,

This JSR is to develop the next version of Java Servlets - Java Servlets 3.0 Specification. One of the goals for Java EE 6 is extensibility. Servlet 3.0 specification will work on extensibility / pluggability. Web framework pluggability will be a key driver of the Servlet 3.0 specification. As part of the revision for Java EE 6 we would like to revise the Servlet specification to support the Ease of Development (EoD) using the newer language features. Also along with EoD there have been requests for enhancements in other areas as well to support the modern next generation web application development. This JSR tries to highlight some of the features that we plan to target with the next revision of the servlet specification.

Proposal

  • Web framework pluggability.
    • Almost all of the Java based web frameworks build on top of servlets. Most web frameworks today plugin either through servlets or through web.xml. Annotations to define some of the servlets, listeners, filters will help in making this possible. Programatic access to web.xml and dynamic changes to configuration of a webapp are desired features. This JSR will aim to provide the ability to seamlessly plugin different web frameworks into web appplications.
  • EOD
    • Annotations - use of annotations for the declarative style of programming.
    • As part of the EoD effort the goal is to have zero configuration for web applications. The deployment descriptors would be used to override configuration.
    • Generics - Use generics in the API where possible.
    • Use of other language enhancements where possible to improve the usability of the API.
  • Async and Comet support
    • Non-blocking input - The ability to receive data from a client without blocking if the data is slow arriving.
    • Non-blocking output - The ability to send data to a client without blocking if the client or network is slow.
    • Delay request handling - The comet style of Ajax web application can require that a request handling is delayed until either a timeout or an event has occurred. Delaying request handling is also useful if a remote/slow resource must be obtained before servicing the request or if access to a specific resource needs to be throttled to prevent too many simultaneous accesses.
    • Delay response close - The comet style of Ajax web application can require that a response is held open to allow additional data to be sent when asynchronous events occur.
    • Blocking - Non-blocking notification - The ability to notify push blocking or non-blocking events. Channels concept - The ability to subscribe to a channel and get asyncronous events from that channel. This implies being able to create, subscribe, unsubscribe and also apply some security restriction on who can join and who cannot.
  • Security
    • Ability to login / logout.
    • Self registration.
  • Alignment
    • Alignment / requirements from REST JSR (JSR 311).
    • Alignment / requirements from JSF 2.0 JSR.
  • Misc
    • Better welcome file support.
    • ServletContextListener ordering.
    • Container wide definition for init params.
    • File upload - progress listener - where to store interim and final file.
    • Clarifications of thread-safety issues.

Comments are due by July 2.

Tuesday, June 19, 2007 (Permalink)

David Gilbert has released JFreeChart 1.0.6. This release adds vector plots, faster time series charts, mouse-click support for legends, and it fixes bugs. JFreeChart is free software under the terms of the GNU Lesser General Public Licence (LGPL), and requires Java version 1.3.1 or later.

Monday, June 18, 2007 (Permalink)

Tonight, Monday, June 18, the NYC Java Meetup group will convene at 7pm at 55 Broad St (NYSIA offices on 10th floor). Topics of discussion include JavaFX and JavaOne. I'm going to try to attend. An RSVP is required if you want to attend.


Tomorrow night, Tuesday, June 19, is the bimonthly Extreme Tuesday New York meeting. It's also Metropolitan Opera in Prospect Park night so I'm going to miss this one.

Saturday, June 16, 2007 (Permalink)

The Legion of the Bouncy Castle has released version 1.37 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, TEA, XTEA, SHA224, SEED, Salsa20, 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. According to the announcement:

1.37 is a mixture of enhancements and defect fixes. On the enhancements side we have new block ciphers (CCM, EAX, Noekeon), new stream ciphers (HC-128/256, ISAAC), improvements to PGP signature processing and compatibility improvements in CMS.

Download it while it's still legal.

Friday, June 15, 2007 (Permalink)

Conversational Computing Corporation has posted the second proposed final draft of Java Specification Request 113, the Java Speech API 2.0. According to the draft,

The Java Speech API (JSAPI 2.0) allows developers to incorporate speech technology into user interfaces for their Java programming language applets (or MIDlets) and applications. This API specifies a cross-platform interface to support command and control recognizers and speech synthesizers, with considerations for future incorporation of dictation and other features.

JSAPI 2.0 is primarily aimed at the J2ME platform (specifically CLDC 1.0 and MIDP 1.0). At first glance the API may look large, but it can be scaled in several ways. First, implementations may choose to implement recognition, synthesis, or both. Second, the types of engines used may be small or large depending on their capabilities. Recognition engines may provide full support for command and control or provide more limited support through specialized built-in grammars. Synthesis engines may support full text-to-speech capabilities or audio sequencing only.

At the same time, it has been designed to work well on J2SE. The subset of capabilities used from J2ME also work equally well on J2SE. A few very small building blocks have been included in the API to not only support this compatibility, but to also aid the developer with familiar programming methods and save space by using reusable objects.

JSAPI 2.0 has a large number of uses. It is designed to support not only the limited cases of name dialing and digit dialing, but the following applications as well (to name a few):

  • Application switching
  • E-mail interaction including both reading and manipulation
  • Calendar management and interaction
  • Accessibility including screen reading
  • System alerts including low memory or low fuel
  • Car navigation system
  • Games
  • Learning
  • Data entry

JSAPI 2.0 is especially well suited for downloadable applications, opening rich new interaction possibilities on devices with limited size yet unlimited potential. Capabilities for applications include the ability to

  • easily switch between applications,
  • prioritize applications, especially between trusted and untrusted applications, and
  • support multimodal interaction
Thursday, June 14, 2007 (Permalink)

Sun has posted a public review draft of JSR 293 - Location API 2.0. According to the draft:

This specification defines a Java ME Optional Package that enables mobile location-based applications for resource limited devices (referred to as 'terminals' in the following). The API is designed to be a compact and generic API that produces information about the present geographic location of the terminal to Java applications. This API covers obtaining information about the present geographic location and orientation of the terminal and accessing a database of known landmarks stored in the terminal [ JSR179].

The Location API 2.0 for Java ME extends JSR 179 Location API. This means that JSR 179 specification is part of the JSR 293 specification. Therefore applications written for Location API are upwards compatible with Location API 2.0 and will work without any changes in the Location API 2.0 compliant terminals. In addition to minor clarifications to Location API [ JSR179], the version 2.0 adds several new features like map and navigation services to the API.

Wednesday, June 13, 2007 (Permalink)

Software 7 GmbH has released Helen 2, a GUI tool for creating online help systems in JavaHelp format. Helen 2 adds a WYSIWYG editor for HTML topic files, search and replace in multiple files, and export of a single PDF or XHTML document for the complete HelpSet. Prices start at $169 for a single license, with discounts for multiple licenses.Upgrades from 1.6 are free. Upgrades from earlier versions are $89.

Tuesday, June 12, 2007 (Permalink)

Sun CEO Jonathan Schwartz may have opened his mouth too soon. Despite his claims last week that Mac OS X Leopard would include Sun's Zettabyte file system (ZFS), Apple now publicly states that ZFS will not be in Leopard. It certainly wasn't in the keynote, and may not be mentioned at WWDC at all. I suspect we'll still see it--it's too core a part of the much-hyped Time Machine--but Steve Jobs is notoriously vindictive against anyone who steals his keynote thunder,

Update: it looks like ZFS may make the cut for Leopard, but only as a read-only file system; and it may require some command line magic to get working. It will not be Leopard's default file system.


Based on early betas of Safari 3.0 for Windows, some people are speculating that Apple has succeeded in porting Cocoa to Windows. If that turns out to be true, that could be a real threat to Java on the desktop, but a boon for Mac developers. If they could port to Linux too (probably an easier task) Java on the desktop would be dead.

Monday, June 11, 2007 (Permalink)

Charles Oliver Nutter, Thomas Enebo, and Ola Bini have released JRuby 1.0, a "1.8.5 compatible Ruby interpreter written in 100% pure Java." It also supports the Bean Scripting Framework. JRuby is distributed under three licenses CPL, GPL, LGPL. That's just way too confusing. There's zero-need to dual license under both the LGPL and GPL since the LGPL explicitly allows code to be forked into a pure GPL product.

Saturday, June 9, 2007 (Permalink)

I've posted the second beta of XOM 1.2, my free-as-in-speech (LGPL) library for processing XML with Java. Compared to the 1.0-->1.1 transition, this is a very minor upgrade. There are just a couple of additional methods, a few bug fixes, and maybe a small optimization or two. All code written to the 1.1 or 1.0 APIs should run unchanged with 1.2. This beta upgrades jaxen to 1.1.1.


Subversion 1.4.4, an open source version control system designed to replace CVS, has been released. 1.4.4 is a bug fix release.

Friday, June 8, 2007 (Permalink)

Subversion 1.4.3, an open source version control system designed to replace CVS, has been released. 1.4.3 is a bug fix release.


Syncro Soft has released Syncro SVN Client 2.4, a $59 GUI Subversion client written in Java. Version 2.4 adds some information to the GUI.

Thursday, June 7, 2007 (Permalink)

IBM developerWorks has published, JavaOne 2007: Prodigal Sun returns to the client, my trip report from JavaOne.

Wednesday, June 6, 2007 (Permalink)

IBM's developerWorks has published JavaOne 2007: Prodigal Sun returns to the client, my trip report from JavaOne.


Mark Doliner has released Cobertura 1.9, a free-as-in-speech (GPL) code coverage tool for Java. Changes in 1.9 include:

  • Reports whether the true as well as the false of an if statement is collected.
  • Assumes Java source files are saved as UTF-8 instead of the computer's default encoding.
  • Writes all HTML and XML reports in UTF-8.
  • Added a "maxmemory" attribute to the instrument, merge and report ant tasks
  • Improves support for Maven and similar environments where control over system properties is difficult such as app servers, IoC containers, IDEs, etc.

If you're not already using another code coverage tool, this is definitely worth a look. Java 1.4 or later is required.

Tuesday, June 5, 2007 (Permalink)

The Free Software Foundation has released the fourth draft of the GNU General Public License version 3.

Changes in this draft include:

  • GPL 3 is now compatible with the Apache 2.0 License.
  • License compatibility terms have been simplified, with the goal of making them easier to understand and administer.
  • Some very minor technical changes that have the major effect of defanging Microsoft patent claims. (Microsoft's lawyers screwed up in the Novell deal.)

One thing I don't like in the new license is a separation of consumer from non-consumer software. That just seems like a needless distinction to me, and one that's sure to cause confusion in the community. I don't understand what it's intended to achieve.


Tonight, Tuesday, June 5, Extreme Tuesday New York meets at D.B.A in the East Village, 41 1st Ave, between 2nd and 3rd streets starting at 6:30. I'm going to try to attend.

Monday, June 4, 2007 (Permalink)

Charles Oliver Nutter, Thomas Enebo, and Ola Bini have posted the third release candidate of JRuby 1.0, a "1.8.5 compatible Ruby interpreter written in 100% pure Java." It also supports the Bean Scripting Framework.

This will likely be our final release candidate before our 1.0 release. People are encouraged to try out this release to help us find any remaining showstopper issues. We have spent a lot of time over the last month squashing compatibility bugs and we have confidence that applications 'will just work' (tm)*. Please try your applications and libraries against JRuby and give us feedback.

JRuby is distributed under three licenses CPL, GPL, LGPL. That's just way too confusing. There's zero-need to dual license under both the LGPL and GPL since the LGPL explicitly allows code to be forked into a pure GPL product.

Sunday, June 3, 2007 (Permalink)

Agitar has released JUnitFactory, "a free experimental project from AgitarLabs. You send it Java code and it sends back JUnit characterization tests for your code." There's a client plug-in for Eclipse.

This is something I've thought about writing myself in my non-existent spare time. This isn't open source so the fields still open. I may actually get to that as part of my day job soon, since right now I find myself staring down a small batch of legacy code with limited tests, and have been told to produce some tests for it.


David Saff has posted Popper 0.5. According to Saff, "Popper enables developers to specify and validate general statements about program behavior, called Theories."

Popper is named after Karl Popper, a noted philosopher whose theories are a lot more practical than most of the muddled existentialism, neoplatonism, deconstructionism, pointless dialectic, and cultural fadism that passes for rational thought in too many philosophy departments.

Java 5 or later is required.

Saturday, June 2, 2007 (Permalink)

The Apache JAMES team has posted Apache Mime4J 0.3, an open source Java library for parsing e-mail messages.

mime4j provides a parser, MimeStreamParser , for e-mail message streams in plain rfc822 and MIME format. The parser uses a callback mechanism to report parsing events such as the start of an entity header, the start of a body, etc. If you are familiar with the SAX XML parser interface you should have no problem getting started with mime4j.

The parser only deals with the structure of the message stream. It won't do any decoding of base64 or quoted-printable encoded header fields and bodies. This is intentional - the parser should only provide the most basic functionality needed to build more complex parsers. However, mime4j does include facilities to decode bodies and fields and the Message class described below handles decoding of fields and bodies transparently.

The parser has been designed to be extremely tolerant against messages violating the standards. It has been tested using a large corpus (>5000) of e-mail messages. As a benchmark the widely used perl MIME::Tools parser has been used. mime4j and MIME:Tools rarely differ (<25 in those 5000). When they do (which only occurs for illegally formatted spam messages) we think mime4j does a better job.

mime4j can also be used to build a tree representation of an e-mail message using the Message class. Using this facility mime4j automatically handles the decoding of fields and bodies and uses temporary files for large attachments. This representation is similar to the representation constructed by the JavaMail API:s but is more tolerant to messages violating the standards.

Friday, June 1, 2007 (Permalink)

Bill Pugh of the University of Maryland has released FindBugs 1.2.1, an automated open source tool for finding potential bugs in Java code. This release fixes bugs and adds a static calendar detector\:

Even though the JavaDoc does not contain a hint about it, Calendars are inherently unsafe for multithreaded use. Sharing a single instance across thread boundaries without proper synchronization will result in erratic behavior of the application. Under 1.4 problems seem to surface less often than under Java 5 where you will probably see random ArrayIndexOutOfBoundsExceptions or IndexOutOfBoundsExceptions in sun.util.calendar.BaseCalendar.getCalendarDateFromFixedDate().

You may also experience serialization problems.

Using an instance field is recommended.

For more information on this see Sun Bug #6231579 and Sun Bug #6178997.


Excelsior has released JET 5.0, a Java virtual machine for Linux and Windows that uses a combination of a traditional native code compiler and just-in-time compilation from byte code. According to Dmitry Leskov, "the key new feature is the ability to leave the unused parts of the Java SE platform out of your application installer. 100% TCK compliance is maintained through on-demand downloading of the omitted at application run time. The result is substantial reduction in download size and disk footprint." JET costs start at $1200 and run up to $4500 depending on which version and how much support you want. Support is available by e-mail and Web site only.


Older news:

20072006200520042003
January, 2007 January, 2006 January, 2005 January, 2004 January, 2003
February, 2007 February, 2006 February, 2005 February, 2004 February, 2003
March, 2007 March, 2006 March, 2005 March, 2004 March, 2003
April, 2007 April, 2006 April, 2005 April, 2004 April, 2003
May, 2007 May, 2006 May, 2005 May, 2004 May, 2003
June 2006 June, 2005 June, 2004 June, 2003
July, 2006 July, 2005 July, 2004 July, 2003
August, 2006 August, 2005 August, 2004 August, 2003
September, 2006 September, 2005 September, 2004 September, 2003
October, 2006 October, 2005 October, 2004 October, 2003
November, 2006 November, 2005 November, 2004 November, 2003
December, 2006 December, 2005 December, 2004 December, 2003

[ Cafe au Lait | Books | Trade Shows | FAQ | Tutorial | User Groups ]

Copyright 2007 Elliotte Rusty Harold
elharo@metalab.unc.edu