Sebastiano Vigna has released version 5.1.5 of fastUtil,
a collection of type-specific Java lists,
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 5.1.x adds new fast iterators with mutable entries and a hierarchy of function interfaces.
fastUtil suffers from the a common problem of open source projects: good code and thoroughly inadequate documentation. If it were just a question of poorly written documentation, it could be patched. Unfortunately the problem is more serious than end user documentation. The library is severely underspecified. For instance the add() method in IntCollection doesn't say whether the new element is added at the beginning of the list, the end, or some random location.
Sure, you can test to find out the answer in this version (It's at the end) but how do I know that this will still be the right answer in 5.1.6 or 6.0? I don't. I can't tell
if adding new items at the end is a deliberate decision or an accident of implementation. I thought there might be unit or acceptance tests, but if there are I couldn't find them anywhere. That gives me even less confidence that the contract is stable.
I am seriously considering reimplementing the parts of this library I actually need (just the primitive collection classes) from scratch using fully designed, documented, specified, and tested contracts. You don't need this level of detail for all projects, but for core libraries like this it's critical. fastUtil is published under the GNU Lesser General Public License (LGPL), so if I want to I could just fork it.
Sun has posted the first beta of NetBeans 6.8, its open source IDE for Java. New features in this version include:
Looks good, though Netbeans is going to have an even harder time making headway now that IntelliJ is open source too.
Subversion 1.6.6, an open source, server-based
version control system designed to replace CVS, has been released.
This is a bug-fix release.
The Gnu Project has released version 4.4.2 of GCC, the GNU Compiler Collection. GCC contains frontends for C, C++, Objective C, Fortran, Ada, and Java as well as libraries for these languages. GCC's Java is a clean room implementation that doesn't use any Sun code, so it doesn't always exactly match Sun release versions, but this is roughly at the Java 1.5 level with some omissions. "This release is a bug-fix release, containing fixes for regressions in GCC 4.4.1 relative to previous releases of GCC." GCC is released under the Gnu General Public License.
JetBrains has announced plans to release IntelliJ IDEA 9.0 as open source under the Apache 1.0 license (and you can download the in-development preview version now). The community version won't have quite all the features of the payware Ultimate version--no Ruby, JavaScript, or Perforce support for example--but now that it's open source it may be possible for 3rd parties to fill those gaps, and the open product is still pretty well-featured for basic Java development. Structured search and replace is the most notable omission. It will be nice for IDEA, NetBeans, and Eclipse to finally be able to complete on a relatively level playing field based on features, usability, and speed without excessive concern over price. Personally I've always chosen Eclipse, even when price wasn't an issue; but I know a lot of developers who prefer IDEA.
Google has posted version 1.2.6 of the AppEngine for Java SDK. "With App Engine, you can build web applications using standard Java technologies and run them on Google's scalable infrastructure. The Java environment provides a Java 6 JVM, a Java Servlets interface, and support for standard interfaces to the App Engine scalable datastore and services, such as JDO, JPA, JavaMail, and JCache.":
App Engine uses the Java Servlet standard for web applications. You provide your app's servlet classes, JavaServer Pages (JSPs), static files and data files, along with the deployment descriptor (the web.xml file) and other configuration files, in a standard WAR directory structure. App Engine serves requests by invoking servlets according to the deployment descriptor.
The JVM runs in a secured "sandbox" environment to isolate your application for service and security. The sandbox ensures that apps can only perform actions that do not interfere with the performance and scalability of other apps. For instance, an app cannot spawn threads, write data to the local file system or make arbitrary network connections. An app also cannot use JNI or other native code. The JVM can execute any Java bytecode that operates within the sandbox restrictions.
Version 1.2.6 adds the ability to receive e-mail, data store statistics, and the ability to delete applications. I dedicated a day last week to learning appengine, but it only took me about 30 minutes. If you already know servlets, this is really straight-forward stuff.
The Legion of the Bouncy Castle has released version 1.44
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, 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. "GCM mode is now around 10x faster, PSS signature support has been added
to CMS and S/MIME, and support for EC encrypted keys has been added to
the openSSL PEM classes. Bug fixes include correction of a date
calculation error in GeneralisedTime when the time included
microseconds, support for ECDH with the JSSE, and the J2ME SecureRandom
now uses common seed material within the VM. A number of other fixes and
enhancements have been made."
I've released XOM 1.2.3, my free-as-in-speech (LGPL) dual streaming/tree-based API for processing XML with Java. 1.2.3 fixes a few minor bugs:
Please upgrade when you get a chance. I'll post maven packages soon.
BlueJ 2.5.3, a free integrated development environment
(IDE) for Java aimed at education, has been released. "This is a bug-fix release, with important fixes to Java ME support, Subversion support, and for recent Mac OS versions."
Java 5 or later is required.
The Eclipse Project has released Jetty 7.0, an open source servlet engine that supports version 2.5 of the Java Servlet API and version 2.1 of Java Server Pages, and my personal favorite embeddable web server. Version 7 adds some Servlet 3.0 features such as fragments, JASPI for pluggable standard authentication modules, and a modular start.jar mechanism. There is also now jetty-hightide:
Hightide is to jetty as ubuntu is to linux. It is fully open source and contains additional modules and integrations:
- JSP from glassfish
- JTA from atomikos
- maven plugin
- ant integration
- setuid
- spring configuration
Both distributions are available via maven as artefacts or complete bundles
Jetty 6 will continue to be maintained for some time, but all new features will now be developed on Jetty-7. Jetty-8 will be in prelease in the next few months and will support servlet 3.0.