IBM's alphaWorks has updated ABLE, the Agent Building and Learning Environment. This is a toolkit from the IBM T.J. Watson Research Center for developing hybrid intelligent software agents and agent applications in Java. This release adds new neural and Bayesian learning algorithms, GUI enhancements, XML rule parsing, bug fixes, and documentation on adding custom beans. According to IBM:
ABLE provides a set of reusable JavaBean components, called AbleBeans, along with several flexible interconnection methods for combining those components to create software agents. AbleBeans implement data access, filtering and transformation, learning, and reasoning capabilities. Function-specific AbleAgents are provided for classification, clustering, prediction, and genetic search. Application-specific agents can be constructed using one or more of these AbleBeans. AbleAgents are situated in their environment through the use of sensors and effectors, which provide a generic mechanism for linking them to Java applications. A GUI-based interactive development environment, the Able Agent Editor, is provided to assist in the construction of AbleAgents using AbleBean components.
In the ABLE framework, an agent is an autonomous software component. It could be running on its own thread of control or could be called synchronously by another agent or process either through a direct method call or by sending an event. By combining one or more AbleBeans, agents can be extremely lightweight (e.g. a few lines of Java code) or can be relatively heavy weight, using multiple forms of inferencing (e.g. fuzzy rule systems, forward and backward chaining) and learning (e.g. neural classification, prediction, and clustering).
- reads data from flat text files
- filters, transforms, and scales data using translate template specifications
- writes data to flat text files
- Back Propagation
- implements enhanced back propagation algorithm
- Self-Organizing Map
- supports batch updates, Gaussian neighborhood function
- Boolean inference engine
- processes if-then rules using forward and backward chaining
- Fuzzy inference engine
- processes if-then rules containing fuzzy sets and supports multi-step forward chaining
- Naive Bayes
- learns a probabalistic model for classification
- Radial Basis Function
- uses radial basis functions to adjust weights in a single hidden layer neural network
- Temporal Difference Learning
- uses reinforcement learning for time series forecasting; gradient descent is used to adjust
- network weights
AbleAgents provided include:
- Genetic search agent
- manipulates a population of genetic objects which may include AbleBeans
- Neural classifier agent
- uses back propagation to classify data
- Neural clustering agent
- uses self-organizing maps to segment data
- Neural prediction agent
- uses back propagation to build regression models
Borland's announced (but not shipped) JBuilder 4. The new release allegedley supports J2EE Enterprise JavaBean development, improves team collaboration features, and can debug Java Server Pages. However, the most interesting promised new feature is built-in support for CVS. That would be useful.
Matthias Pfisterer has released version 0.3.0 of Tritonus, an implementation of the Java Sound API for Linux and Windows. This release includes:
Sun's posted the first beta of the Java Media Framework (JMF) .1.1 on the Java Developer Connection (registration required). JMF is a standard extension API for audio, video and other time-based media. Version 2.1.1 updates the RTP API, improves lip-sync over RTP, optmizes MPEG over RTP, adds a DirectAudioRenderer for reduced latency, and extends the JMF Customizer to work on performance packs.
The US Supreme Court has refused the government's request to fast-track the DOJ-Microsoft case, which means it will go to Appeals Court first.
Sun's released the JAIN TCAP and JAIN OAM API specifications. JAIN stands for "Java for Advanced Intelligent Networks". Both of these are used in public switched telephone networks (i.e. the phone companies) but aren't of a lot of interest to most of the world.
Luca Lutterotti has updated his "classic" MacOS Look & Feel for Swing. This release fixes assorted bugs, and is overall a little more Mac-like.
Slava Pestov's posted the seventh beta of JEdit 2.6, a programmer's editor written in Java and published under the GPL. This release fixes assorted bugs and adds some minor new features and UI enhancements.
Bill la Forge has released version 3.3 of Quick, a toolkit for integrating Java and XML. Quick's binding schema, QJML, binds XML elements and Java classes. In version 3.3, QJML now fully models Java inheritance and supports elements with non-unique names. This means that different Java classes can be bound to the same XML element name, depending on context.
Sun's posted an early access version of JavaMail 1.2 on the Java Developers Connection (registration required). Version 1.2 fixes many bugs and adds several new features including:
Apple's released Mac OS Runtime for Java 2.2.3 to fix a few bugs, increase performance, and use less memory. This is still a Java 1.1 VM. To get 1.2, you'll have to upgrade to MacOS X. The big new feature in 2.2.3 is "JAR caching" which saves downloaded JAR archives on your local disk for later reuse. This release also has better support for applets with Chinese and Japanese file names.
The ISO has formally closed the SC22 Java Study Group that was working on Java standardization. The group was effectively made meaningless by Sun's intense aversion to standards bodies, and never really accomplished much. A large part of the problem was that Sun repeatedly reneged on promises to adhere to various standards processes.
Sun's released the final version of the JDK 1.3.0 for Solaris.
Yesterday I upgraded from BBEdit 4.5 to BBEdit 6.0. Normally I avoid upgrades if at all possible and with good reason. It always breaks something. I'd avoided the upgrade to BBEdit 5.0, but I was getting annoyed with some of the bugs in BBEdit 4.5 that I thought 6.0 could fix, and I did need some of the new features like XHTML and XML support. (Incidentally, the upgrade hasn't fixed the main annoying bug in which the cursor is occasionally placed a line above or below where text will actually be inserted when I start typing. This bug is actually the result of another upgrade, from MacOS 8.5.1 to MacOS 9.0.4, an upgrade that significantly destabilized my system and is still causing several crashes a day. ) Unfortunately, this time proved to be no exception to the rule that upgrades always break at least as much as they fix. In particular, version 6.0 of BBEdit commits the mortal sin of completely changing its API so that all the scripts on which this site depends no longer run!
I'm slowly bringing all my scripts up to conformance with BBEdit 6.0. It's a long and painful process. A large part of the problem is that the language I'm using is AppleScript, possibly the worst designed programming language in history. Even Intercal would be an improvement. (OK, I'm exaggerating a little, but not nearly as much as you think I am.) Those of you who use AppleScript know whereof I speak. Those of you who don't, be glad; be very, very glad that you don't have to know just how bad it is. When inventing AppleScript, Apple designed a language that was supposed to be easy and intuitive enough for a novice non-programmer to use. They added lots of "easy-to-use" features like optional keywords and named variables that pop into and out of existence at unexpected places. The result is a morass that drives experienced programmers to distraction and is totally inaccessible to novices.
To give you just one example of the brain damage that is AppleScript, object properties (fields to Java programmers, member variables to the C++ crowd) can have names that include white space. In itself that's not too bad except that you can't use names that include white space in your code so that you can't actually access these properties from your program except through truly convulted painful indirections. Or at least you can't most of the time. Sometimes, for no apparent reason, you can. There's simply no predicting whether a given line of code will or will not compile.
Here's another example: the files aren't stored in plain text. Instead they're stored in a semi-compiled format that's dependent on the class libraries built into various applications. Upgrade or delete an application and instead of source that at least tells you what you we're trying to do you're looking at something like this:
tell «R*ch» to find "<!-- lm -->.*<!-- lm -->" with «class Grep» without «class Xsel»
What I originally wrote was the much more intelligible
tell application "BBEdit 4.5" to find "<!-- lm -->.*<!-- lm -->" with grep without extend selection
At least that's what I think I wrote. I can't really tell any more since AppleScript threw away my original source code! Imagine a Java editor that compiled everything to byte code, deleted your .java files, and expected you to edit the .class files directly from that day forward. That's the sort of brain damage AppleScript programmers struggle with every day.
The reason I and many other Mac users still use AppleScript is that although AppleScript itself is a travesty, there's a lot of power to be had by integrating all the different scriptable applications on a typical Mac. Doing what I do on Windows or Unix would be far more difficult since applications on those systems are not designed to be scripted. The AppleEvents model is quite powerful, even if the language most people use to access it is abominable. What's needed is a better language. There are alternatives to AppleScript, though most of them have problems of their own. What I really want is a Java-like language that can access the Open Scripting Architecture (OSA) on the Mac.
I don't have that yet, so in the next couple of days you may notice a couple of bugs in the system here as I try to port all my back end scripts to the new version of BBEdit. If you do notice a problem (say the quote of the day swapped with today's news or some such), please drop me a line so I can fix it manually. Thanks.
Sun has officially released version 1.2.1 of the Java Cryptography Extension. I strongly recommend that you do NOT upgrade from version 1.2.0. The only "functionality" this release adds is restrictions on who is allowed to implement cryptographic service providers. In this release all cryptographic service providers must be trusted and signed by Sun or IBM. Furthermore, Sun will only trust and sign service providers from companies that agree to adhere to U.S. export law, even providers that are outside the United States and are not required to adhere to U.S. law! Details are not provided for how to get IBM to sign a service provider, but they're likely similar. Both Sun and IBM are large U.S. companies with strong ties to the U.S. military-industrial complex that can be trusted not to rock the boat. Furthermore, mutual authentication helps ensure that service providers are not installed into a hacked version of the JCE that does not require Sun or IBM's code signing.
I'll have an addendum for Who Trusts the Trustees?Who Trusts the Trustees? soon to discuss these issues. In the meantime, the important point to remember is that this upgrade offers no benefits to anybody except those in the U.S. government trying to restrict the broad availability of strong cryptography around the world. You should not install it, and you should begin exploring alternative, non-encumbered cryptographic APIs such as the open source Cryptix. While Cryptix is currently an implementation of the JCE 1.2, the digital signature authentication requirements in JCE 1.2.1 probably make a fork inevitable.
Apple's posted the release notes for the version of Java included with MacOS X beta. In brief, it's a good 1.2.2 environment on its way to 1.3 with some annoying but non-critcial problems in the AWT.
Monash University has released version 1.1.1 of BlueJ, a free IDE aimed at education. This is a bug fix release.
Apple's released the first public beta of MacOS X, a BSD-Unix based system. It does bundle Java 1.2 and parts of 1.3 including javac and the other usual JDK command line tools. These may or may not be included in the final release next year. More sophisticated developer tools are available by joining the Apple Developer Connection for $400 a year and a non-disclosure agreement.
The MacOS X beta is only available on CD for $29.95. (At least that's what Apple's announced. The Apple Store doesn't seem to be taking orders for it just yet.) It is not available for download. Worse yet, after paying to help beta test Apple's buggy software, users will have to pay Apple again for the release version. MacOSX runs on all G3 and G4 desktop PowerMacs and iBooks with a minimum of 128MB of memory. Processor upgrade cards are not supported.
Sun's released the second Public Review Draft of the Enterprise JavaBeans 2.0 Specification and the first Public Review Draft of the JDBC 3.0 Specification. Both are available in PDF and PostScript only. Review for both closes on October 12, 2000.
I'm still working on fixing the problems with bouncing pages caused by the unexpected domain name change to ibiblio.org. All links to the old domain name should still work, though I have found some unexpected problems in obscure services. Most pages should work, but I haven't tested the entire site At this point, if you see a page that won't load because of the redirection, please drop me a line with the complete URL you were trying to reach so I can fix it manually.
Sun's released version 1.1.1 of JavaHelp. This is a minor bug fix release.
IBM's alphaWorks has released Carribean, a Java framework for building Web applications providing asynchronous, event-handling, and monitoring services. Each user can keep a persistent "Event-Driven Object" like an "Agent" at server side.
AlphaWorks has also updated their
BigDecimal class with a new
toBigIntegerExact() method, faster multiplication, some bug fixes and
I've cleaned up and posted the complete set of examples and source code from the second edition of Java Network Programming. This provides over one hundred different working network programs covering topics from sockets to the Java Mail API. I'll make a zip archive once I've had a chance to triple check everything.
Slava Pestov's posted the sixth beta of JEdit 2.6, a programmer's editor written in Java and published under the GPL. This release has assorted bug fixes and minor UI changes.
There's lots of new and updated wspecs from the Java Community Process in the last week. First off, the Java Management Extensions (JMX) expert group has released the final version of the JMX specification in PDF format.
The Proposed Final Draft Specification for JSR 000036 Connected Device Configuration has been posted as a zip archive of JavaDocs. This describes what a Java virtual machine intended for 512K minimum ROM available, 256K minimum RAM, networkable devices must provide.
Finally, the Proposed Final Draft Specification for JSR-000046 J2ME Foundation Profile has also been posted as a zip archive of JavaDocs. This describes a set of APIs for applications running on small devices with some type of network connection.
Sun's posted a release candidate of JDK 1.3 for Linux on the Java Developer Connection (registration required). This includes HotSpot. There aren't any new features here, just bug fixes and performance improvements.
ISNetworks has published an open source Java implementation of the RSA public key cryptography algorithm. It can perform encryption and decryption using either PKCS #1 padding, or OAEP padding, as well as digital signatures using PKCS #1 padding. Java 1.2 or later and the Java Cryptography Extension (JCE) 1.2 are required. You can also use a third party JCE implementation like Cryptix or the OpenJCE. However, Sun's JCE 1.2.1 will not workbecause it requires all cryptographic providers to be signed by Sun. (See my article Who Trusts the Trustees? for details on that last point.)
Zero G Ships has released InstallAnywhere 3.5, their cross-platform installer tool for Java. Version 3.5 adds Java 1.3 compatibility and Linux support. There are three versions: the Enterprise Edition, the Standard Edition, and Now!. InstallAnywhere Enterprise Edition is $1,995. The Standard Edition is $995, and InstallAnywhere Now! is free (as in beer). Upgrades are a little less than half those prices.
Mercatis Information Systems has released wingS, a servlet development library that uses Swing models, Swing events and the Swing API. The Java Servlet Development Kit 2.0 and JDK 1.2 are required wingS is published under the LGPL.
Python 2.0 beta 1 has been released. Most important are the new modules including XML support and internationalization. These include:
You also now have the option to collect cyclical garbage. (If I understand this right, this isn't anything Java hasn't been doing since 1.0 alpha 1.) Python 2.0 has also been sweetened with lots of syntactic sugar including:
x += 1
[x**2 for x in range(10)]
import Module as Name
print >> file, "Hello"
The XML Apache Project is now publishing nightly builds of the Tomcat 4.0-dev development tree (which is being updated to support the new Servlet 2.3 and JSP 1.2 draft specifications) in both source and binary form. The binary distributions are available from: This code is not yet ready for production use, but should be useful to anyone who wants a head start on Servlet 2.3/JSP 1.2.
Slava Pestov's posted the fifth beta of JEdit 2.6, a programmer's editor written in Java and published under the GPL. This release adds a jEdit Command Line, rudimentary keyboard navigation in the VFS browser, and an activity log.
Chris Kelly's released JConfig 2.1, a class library that adds native functions for working with files, web browsers, processes, file types, and other system-level items the standard Java API does not expose. Version 2.1 mainly fixes and enhances file attribute handling on Windows and Mac.
IBM's submitted Java Specification request (JSR) 80, a USB API. This would let Java communicate with anything connected to the USB port including hubs, mice, keyboards, hard drives, CD burners, etc. Comments are due by September 11, 2000.
Sun's also posted JSR-79, the JAIN MEGACO Protocol. This was submitted by Hughes Software Systems Ltd. From the JSR:
The MEGACO/H.248 is a new protocol belonging to the Gateway Control class of Protocols. It is a protocol proposed jointly by IETF and ITU-T that specifies the syntax and semantics of messages that are used by the Call Agent (alternately called as the Media Gateway Controller in the Decomposed VoIP Gateway architecture terminology) to control and thereby establish media connections in a Gateway (alternately referred to as the Media Gateway in the Decomposed VoIP Gateway Architecture terminology). The protocol defines a model for the Gateway comprising objects called as Contexts and Terminations and defines APIs by which the Call Agent can manipulate these objects within the Gateway.
There are also new RFCs from the IETF covering Megaco Protocol 0.8 and Megaco Errata. Frankly, the actual description of this protocol sounds rather boring, but any protocol whose name sounds like a new Godzilla monster can't be all bad. :-) Comments are due by September 11, 2000.
Unicode 3.0.1 is now available as a list of changes to Unicode 3.0. This is a pretty minor update. The changes won't affect most users.
Sun's released version 1.0.2 of the Java Secure Sockets Extension (JSSE). The JavaTM Secure Socket Extension (JSSE) is a Java package that enables secure Internet communications. JSSE implements the Secure Sockets Layer (SSL) and Transport Layer Security (TLS) protocols. It includes "functionality for data encryption, server authentication, message integrity, and optional client authentication. Using JSSE, developers can provide for the secure passage of data between a client and a server running any application protocol (such as HTTP, Telnet, NNTP, and FTP) over TCP/IP."
The big change in this release is that stronger cryptographic algorithms are now included in the export version of JSSE as well as the domestic version. However, they are not the same. The domestic version allows alternate SSL security providers; the global version must use the Sun SSL provider. I consider it possible that the Sun SSL service provider has been deliberately compromised to open backdoors to the NSA. I do not know that any such such backdoor exists, but Sun's close ties to the U.S. military-industrial-espionage complex don't lend themselves to trustworthiness. (See Who Trusts the Trustees? for some background on this.)
Other more minor changes include:
The JSSE is covered in depth in Chapter 12 of my recently released book, Java Network Programming, 2nd Edition. At first glance I don't think I'm going to need to write any update to cover this. The changes all appear to be in implementation, not in the public API.