For a potential project I'm researching the available GUI components, JavaBeans or otherwise, that provide database grid controls and bound data input (e.g. a field that only accepts a date in the form 2003-01-31). I'm familiar with the KL Group's JClass DesktopViews, and I'm wondering what else is out there. Payware is not ruled out for this project, and I've found a lot of payware options, but open source is always better. Is anybody aware of open source options for this sort of software? If so, could you please drop me a line at firstname.lastname@example.org? Thanks.
Sun's posted the first
public review draft specification for
Java Specification Request (JSR) 179,
Location API for J2ME. The purpose of this API is to allow
cell phone applets to figure out where you are at any given time.
The privacy implications of this are significant, and the expert group
does not appear to be addressing them to any signifcant extent. They simply note that some methods might occasionally throw a
SecurityException (but then again they might not). There's no real effort here to protect users privacy in any realistic way. They're just solving the technical problem without considering the social implications.
Comments are due by February 23.
Sun's posted the maintenance review draft for the Java Data Objects Specification. This focuses on clarifications and errata, and they're quite a few of them. This will eventually become JDO 1.0.1. Comments are due by March 3.
A maintenance review draft of the Application Installation API Specification has also been posted. This proposes several new methods:
public String getUniqueName() public void setUniqueName(String name) public String getUninstaller() public void setUninstaller(String uninstallerCmd) public String getData(String key) public boolean setData(String key, String value) public String getDataKeys()
Comments are due by February 18.
Teodor Danciu's posted version 0.4.5 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.4.5 adds support for round rectangles, ellipses, and vertical alignment of text elements.
Sun's posted the second proposed final draft of the JavaServer Pages 2.0 Specification in the Java Community Process.
The Apache Commons Group has posted the first alpha of Betwixt, a Java class library that "provides an XML introspection mechanism for mapping beans to XML in a flexible way. It is implemented using an XMLIntrospector and XMLBeanInfo classes which are similar to the standard Introspector and BeanInfo from the Java Beans specification."
Slava Pestov's posted the ninth prerelease of version 4.1 of jEdit, an open source programmer's editor written in Java. This release adds gettext and APDL syntax highlighting and makes assorted bug fixes and user interface and API cleanups. Pestov writes, "jEdit 4.1final is getting very, very, close. If you currently use jEdit 4.0, please try out 4.1."
www.elharo.com is down due to damage caused by a brief power outage in my apartment yesterday (compounded by an incredibly poor user interface for shutting down the server). I'll probably have to rebuild its hard drive later today.
Siemens AG has submitted Java Specification Request (JSR) 205 Wireless Messaging API 2.0, to the Java Community Process (JCP). This proposes to extend the Wireless Messaging API to support multimedia messages. Comments are due by February 10.
Nils Meier has released InstantJ 1.5, a library that can compile and execute Java code or evaluate expressions written in Java on the fly. This is useful when expressions are either assembled programmatically at runtime, read from descriptors, or received from user-input. Version 1.5 adds support for the Pizza compiler. InstantJ is published unde the LGPL.
Sun's posted the second proposed final draft specification for JSR-22 Java Advanced Intelligent Networks (JAIN) Service Logic Execution Environment (SLEE) API Specification. "The specification includes complete descriptions of all the interfaces, classes, exceptions and requirements to develop portable telecommunication services and application framework so that services once developed will run on any JAIN SLEE compliant execution environment."
I've returned from Munich. I only had one opportunity to check my e-mail while I was away, so my Inbox has gone from a svelte 485 messages to a bloated 1304, (and that's after spam filters have been applied) but I hope to catch up today. I suppose I could have checked my e-mail more often, but I preferred to spend my free time sightseeing, eating sausages, and drinking beer. :-). I have posted the notes from all three talks I gave at the OOP 2003 conference while I was there:
The Apache Commons Group has released Commons BeanUtils 1.6. This provides some easier-to-use wrappers around Java's built-in Reflection and Introspection APIs. Version 1.6 fixes bugs.
The Apache Jakarta Project has released
Tomcat 3.3.1a to fix two
security holes found in Tomcat 3.3.1 and earlier,
including Tomcat 3.2.4 and earlier.
(Later versions of Tomcat are not affected.)
Tomcat is an open source
servlet container/Java Server Page engine for the Apache web server.
The Apache Jakarta Project has released
version 2.0.7 of
jakarta-oro. This class library contains text-processing classes that provide
Java with Perl 5 compatible regular expressions, awk-like regular expressions, glob expressions, and utility classes for performing substitutions, splits, and filtering filenames.
2.0.7 is a maintenance release that contains
minor incremental improvements
and fixes for all outstanding bugs.
Bill Venners has released Artima SuiteRunner, an open source testing toolkit for Java that can run existing JUnit test suites as well as create new unit and conformance tests for Java APIs. The key difference between JUnit and Artima SuiteRunner is that:
in JUnit, the notion of results reporting is linked to the notion of running test suites. For example, to generate test results as text, you use JUnit's text runner. To generate graphical test results, you use JUnit's Swing runner. By contrast, Artima SuiteRunner separates the notion of running from that of reporting. In Artima SuiteRunner, we provide one runner that can be configured with multiple reporters. Each reporter presents customized test results: for example, a text reporter presents results as text, a graphical reporter presents results graphically.
Because JUnit links the concepts of running and reporting in the notion of a runner, we made Artima SuiteRunner a JUnit runner. You can use Artima SuiteRunner to run and report results of JUnit tests, just like you can use JUnit's text or Swing runners. The three main advantages of using SuiteRunner to run your JUnit tests are reporters, runpaths, and recipe files:
- A reporter collects and presents test results in a highly customizable way to the user. Examples are text, graphics, Web pages, database output, CSV files, XML, and email alerts.
- A runpath lets you load classes for your tests from anywhere with an easy- to-configure list of filenames, directory paths, and/or URLs.
- A recipe file captures and saves in a file the run properties of a particular suite of tests for easy reuse.
Sun has submitted Java Specification Request 204 Unicode Supplementary Character Support, to the Java Community Process (JCP).
Version 3.1 of the Unicode standard is the first one to define characters that cannot be described by single 16-bit code points and thus the standard breaks a fundamental assumption of the Java programming language and APIs. This JSR defines the necessary adjustments to the Java APIs to enable support for such characters and enables the Java platform to continue to track the Unicode standard.
This JSR contains numerous misstatements and factual errors.
For instance, it was never a first design priniciple of Unicode that
all characters were 16-bits wide. Honestly, I'm skeptical that this can be fixed
until Sun is ready to give up the idea that
char is a two-byte data type.
Still, I'm glad they're at least thinking about the problem.
I'm going to Munich this week for the OOP 2003 conference. I'm not sure what sort of Internet access I'll have while I'm there. In any case, updates are likely to be a little slow until I return.
I've posted version 1.0d9 of XOM, my open source, tree-based API for processing XML with Java. This release cleans up a few asymmetries in the API and fixes a couple of bugs. There are no major new features in this release. XOM is published under the LGPL.
Once again, I'll be chairing the XML track for Software Development 2003 East in Boston this September. The Call for Papers for is now live. Submissions need to be in by Valentine's Day (February 14).
For the XML track, we're interested in practical sessions covering all aspects of XML. This is not specifically an XML show, so we tend to find that our audience responds better to more practical, how-to, basic sessions as opposed to more theoretical, high-level sessions. For instance, a simple introduction to XQuery would go over better than a detailed comparison of XQuery optimization techniques. One thing previous attendees have told us is that they'd like to see more new sessions at each show, so we're going to be looking preferentially for talks that have not previously been given at SD East.
Oliver Burn has posted the first beta of Checkstyle 3.0, a lint-like tool that checks Java code for adherence to various coding standards. The major new feature in 3.0 is an architecture based around pluggable modules that enable users can to write their own checks. Several checks have also been added and various bugs have been fixed. Checkstyle is published under the LGPL.
Lorenzo Bettini's released GNU Source-highlight 1.6.2, a GPL'd tool for reading Java, C/C++, Prolog, Perl, PHP3, Flex, ChangeLog, and Python code and translating them into syntax highlighted HTML and XHTML. Binaries are available for Unix, and it should compile on Windows with the appropriate libraries. 1.6.2 is now compliant with C++ standard headers (iostream etc.) and no longer issues backward compatibility warnings with gcc 3.2.
Bug-Track.com is a web-based Bug and Issue Tracking System that runs on top of Struts. Features include full-text search, customizable e-mail notification, and XML export. Shared hosting on Bug-Track's servers costs from $30.00 to $125.00 per month (pricing depending on number of bugs). Private hosting on Bug-Track's servers costs $250.00 per month. Licenses for local use run from $800.00-$2000.00 depending on number of users
The first beta of BlueJ 1.3 has been posted. BlueJ is a free integrated development environment (IDE) for Java aimed at education. The major new feature in 1.3 is a project submission extension developed at the University of Kent in Canterbury that enables students to submit BlueJ projects via file copy, email, ftp or http.
The Ping Software Group has released version 1.4.0 of the Kiwi Toolkit, an open source (LGPL), Swing-based GUI class library that includes a TreeTable component, a DateChooser, an MVC charting package, a plugin framework, an application resource manager, and more. There's some useful stuff here. The obvious flaw is that it doesn't adhere to standard Java package naming conventions.
Version 0.8.3 of the Abbot GUI testing framework has been released. New features in this release include:
Comporsys has released version 1.5 of their Java Connector Architecture compliant Resource Adapter software for IBM CICS, IBM IMS and IBM MQSeries/WebShpereMQ. The products are now preconfigured for JBoss 3, Sun ONE 7, Oracle 9i and BEA Weblogic 6/7. Cost is EUR 3,500 + 16% VAT for a 1-CPU licence.
By now you probably already know that the Supreme Court ruled, 7-2, that Congress can retroactively extend copyright terms for as long as it wants, effectively making a farce of the constitutional requirement that Congress is allowed "To promote the progress of science and useful arts, by securing for limited times to authors and inventors the exclusive right to their respective writings and discoveries." In effect the Supreme Court has said that it's OK for Congress to grant unlimited copyright terms in order to retard or reverse the progress of science and useful arts. No big surprises here. The current court only adheres to the intent of the founders when it fits the result they want to get. No Justice is a strict constructivist when it's obvious that the founders were adamantly opposed to the decision they want to write.
Meanwhile, in New York State Court yesterday, there was a surprising victory for free speech. Justice Marilyn Shafer of State Supreme Court in Manhattan ruled that Network Associates may not require customers who purchase its software to ask permission from the company before publishing reviews of its products. She is also likely to impose significant fines on the company for including the sentence "The customer will not publish reviews of this product without prior consent from Network Associates Inc." in its licensing agreements. An increasing number of companies have been trying to use such clauses to stifle speech. Unsurprisingly, Network Associates has promised to appeal in order to protect its ability to muzzle informaiton it doesn't like. Congrats to New York State Attorney General Eliot Spitzer for this important decision. (And shame on the seven Supreme Court justices who believe that Congressional authority should only be limited when that authority inconveniences large corporations.)
Yesterday Sun announced a $2.28 billion loss, 72 cents a share, for the final quarter of 2002. In the same quarter in 2001 Sun lost $431 million, 13 cents a share. This year's loss included a $2.12 write off of "goodwill" from various acquisitions that have fallen in value and a $357 million charge for layoffs. Ignoring these one-time charges (but why would you?) Sun reported a small $10 million profit, slightly better than most analysts had predicted.
IBM has released the International Components for Unicode 2.4 (ICU). This is a cross-platform C, C++, and Java library working with Unicode data. Version 2.4 enhances regular expression support, adds build-time switches to prune library code for smaller distributions, improves the word/sentence break engines, and includes a new performance testing framework.
Michael B. Allen's posted jCIFS 0.7.1,
an SMB client library written in pure Java. It
supports Unicode, named pipes, batching, multiplexing I/O of threaded callers, encrypted authentication, full transactions, domain/workgroup/host/share/file enumeration, NetBIOS sockets and name services, the smb:// URL protocol handler, RAP calls, and more. The API is similar to
This release fixes a few significant bugs.
jCIFS is published under the LGPL.
U.S. District Judge J. Frederick Motz has ordered Microsoft to begin shipping Sun's Java with Windows within 120 days. Microsoft will likely appeal this ruling. Failing the appeal, we should start seeing Java in Windows in new copies of Windows by May.
The Apache Jakarta Taglibs project has released the Log Taglib 1.0. This enables Java Server Pages to use Apache's Log4j to write to application logs. Log Taglib 1.0 is published under the Apache license.
Apparently I wasn't clear enough yesterday. After my rant, I got numerous news submissions including not one, not two, but three separate announcements for payware that did not include the price (plus one open source announcement that neglected to mention it was open source, much less indicate its license). In two of the three cases, I couldn't even find the price on the company web site.
I am getting really sick of this. Hiding prices is deceptive and dishonest. It discourages potential customers. Some states even have laws that prohibit hidden pricing in grocery stores. Too bad software gets less consumer protection than canned spam and kitty litter.
Not knowing the price makes it impossible to fairly evaluate or consider the software. I will and do pay for software I need, as do most people I know. However, I have limits and if you exceed those limits, I'm not going to buy the software. If an IDE costs $5000, I know I'm not going to buy it, no matter how cool it is. This is fine. I'm probably not your target market, and other developers may have different limits. But don't waste my time and yours by not being upfront about the price.
The Enterprise Object Broker (EOB) 0.8 is an open source (Apache license) "application server that transparently distributes Java objects via their interfaces. It makes no distinction between Local and Remote objects. Because of these features, it is not J2EE compliant. The developer builds beans that implement normal Java interfaces and the deployer decides where the beans are in a cluster of servers. Apache's AltRMI is used in place of RMI. It publishes plain interfaces locally and remotely. The interfaces do not have to extend the java.rmi.Remote interface. Methods do not have to throw RemoteException. AltRMI delivers remoting for Java. EOB sits on top of Apache's Avalon-Phoenix server platform."
The JBoss Project JBossMX 1.1.2, an open source JBoss application server implementation of the Java Management Extensions technology. It is optimized for speed in the MBean server invocation bus, and will support many advanced features such as security, transactions, MBean server federation, and fail-over. This release adds the JBossMX Remoting package.
Today was a slow news day. I really had to hunt to find some tidbits worthy of posting here. A few things in my Inbox were rejected for some very common reasons. If you're sending me news announcements for posting here, it would help to keep these in mind:
I don't mind posting announcements for payware, but I
Be sure to include a URL for what you're announcing. I almost posted a paragraph about an open source project that's been trying to get me to mention them for months, but I couldn't find the right page for the version they were announcing, just older information.
Be sure to tell me what the product does. If it's a compiler, debugger, IDE, database, or something else traditional, I can probably figure it out. However, I've thrown away numerous announcements about software that was faster, better, cleaner, quieter, and more environmentally friendly. However, I wasn't able to decipher the PR-speak enough to understand what the product did. This problem is especially big for vendors of server-side frameworks of one kind or another.
On the reverse side, one of the most effective things you can do to get a lot of coverage here is a host a simple announcement-only list that describes new releases. I almost always miss new releases of JBuilder and Code Warrior because neither Borland nor Metrowerks bothers with a basic, text-only, low-volume, opt-in list that tells their interested customers when they've released something. This is such an easy thing to do, I am amazed more companies don't do it. Sun has a couple but they rarely announce anything until months after it's been released.
Hmm, looking at Metrowerks website they seem to have added such a feature recently. They do ask for a lot of personal information I don't want to give them, though. (You do not need to know my phone number to send me e-mail!) However, I left all that blank and the form didn't complain. Borland may have added one too. It's probably just more unintelligible press releases, but I'll give them a shot and see what happens.
It's funny that open source projects are so much better at announcing new releases even though most of them aren't trying to sell anything. Possibly this has something to do with the fact that in open source projects the developers communicate. Payware is normally announced by PR drones who've been trained to say nothing at great length. These companies desperately need to be whapped up side the head with a clue stick.
Excelsior has released JFCMark 1.0, a free-beer benchmark suite that purports to measure the performance of JFC/Swing and related APIs. JFCMark is partially based upon SwingSet2, a full featured Swing demo that comes with the Sun JDK. Java 1.3 or later is required.
PartNET's Quartz 1.0.3 is an open source "job scheduling system that can be integrated with, or used along side virtually any J2EE or J2SE application. Quartz can be used to create simple or complex schedules for executing tens, hundreds, or even tens-of-thousands of jobs—who's tasks are defined as standard Java components or EJBs."
Robert Oloffson's posted version 0.26 of his 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 implements various speed-ups. JMP is written in C and runs on Linux. This release adds Windows and FreeBSD support.
The eighth beta of Luxor, a GPL'ed XML User Interface Language (XUL) toolkit for Java, has been posted. Luxor includes a web server, a portal engine that supports RSS, the Velocity template engine, a Python interpreter, and more. Beta 8 adds tags for range, progressmeter, slider, statusbar, and statusbarpanel.
Eric Lafortune has released ProGuard 1.5, a free Java class file shrinker and obfuscator that can detect and remove unused classes, fields, methods, and attributes and rename the remaining classes, fields, and methods using short, meaningless names. The resulting jars are more compact and more difficult to reverse-engineer. ProGuard is published under the GPL.
Managing Gigabytes for Java 0.5 (MG4J) is a GPL'd Java implementation of inverted-index compression techniques. "Generating full-text inverted indices for very large sets of documents (say, beyond dozens of millions) is a nontrivial task. MG4J tries to make the techniques described by the authors above accessible without having to deal with bit-level operations in a clean, object-oriented environment. As a side effect, MG4J provides a number of general-purpose optimised classes, including fast & compact mutable strings, bit-level I/O, and (possibly signed) minimal perfect hashing."
IBM's released the Jikes Research Virtual Machine (RVM), an open source virtual machine that
runs on Linux/IA-32, AIX™/PowerPC™, and Linux©/PowerPC platforms and includes state-of-the-art virtual machine technologies for dynamic compilation, adaptive optimization, garbage collection, thread scheduling, and synchronization. A distinguishing characteristic of the Jikes RVM is that it is implemented in the Java™ programming language and is self-hosted i.e., its Java code runs on itself without requiring a second virtual machine. In contrast, almost all other virtual machines for the Java platform are either written in native code (typically, C or C++) or written in the Java programming language with a reliance on a second underlying virtual machine to execute its Java code. A Java implementation provides ease of portability, and a seamless integration of virtual machine and application resources such as objects, threads, and operating-system interfaces.
Version 2.2.0 mostly uses the GNU Classpath class libraries and introduces the Java Memory Management Tool kit.
Christian Grothoff has released JAMIT 2.0, the Java Access Modifier Inference Tool. Jamit can read Java .class files and determine which fields and methods can be changed from public to protected, private, or package protected, and so forth. JAMIT is published under the GPL.
Søren Bak has posted the second alpha of the Primitive Collections for Java 1.0, "a set of collection classes for primitive data types in Java. The goal is to provide an efficient alternative to the Java Collections Framework (JCF) when using primitive data types, such as int, boolean, or double."
koalaGML, the koala GUI Markup Language, "allows developers to rapidly generate graphical user interfaces by writing XML documents that define the layout and content of the interfaces. It is both a markup language and a toolset for generating the Java GUI code from the markup. Inspired by Java Server Pages (JSP), koalaGML consists of a rich and growing set of features, including: session beans, custom imports, exception handling, custom error forms, relative layout of elements (with tables ala HTML) and a huge set of widgets." The current version is 0.2.0_alpha2. koalaGML is published under the LGPL.
Slava Pestov's posted the eighth prerelease of version 4.1 of jEdit, an open source programmer's editor written in Java. This release fixes assorted minor bugs.
Michael Fuchs has posted version 0.3.3 of his DocBook Doclet that creates DocBook SGML and XML documents from JavaDoc. This release adds XInclude support and fixes various bugs.
Brad Cox has posted has released version 1.2 of his the Java+ Preprocessor. Java+ supports "long, multi-line strings with executable inclusions like Perl or Ruby, optionally segregates Java+ strings into ResourceBundle files, eliminates the need for JSP or ASP and their implied need for Java compilers on deployment servers (a security concern), and adds absolutely no overhead in either space or time. There are graphical and command line interfaces, and a simple, general, and recursive string syntax." Version 1.2 adds support for make and Ant, no longer requires Apple's help viewer, and adds a "Configuration class to unify settings handling across the three interfaces." Java+ is published under a BSD license.
Sun's posted the release candidate
of the Java Advanced Imaging Image I/O API 1.0 on the Java Developer Connection (registration required).
"JAI Image I/O Tools provides reader, writer, and stream plug-ins for the Java Image I/O Framework and Image I/O-based read and write operations for Java Advanced Imaging. Reader-writer plug-ins are supplied for the BMP, JPEG, JPEG 2000, PNG, PNM, Raw, TIFF, and WBMP image formats." This is all based on the
java.nio package in Java 1.4.
And speaking of the new I/O APIs, Sun didn't finish everything they hoped for in
java.nio in time for Java 1.4.
In particular, they did not get around to finally designing a decent interface to the file system.
They have now submitted
Java Specification Request 203
More New I/O APIs for the Java Platform,
to the Java Community Process (JCP).
The proposed specification will continue the work of defining a set of new and improved I/O APIs that was started in of JSR-51: New I/O APIs for the Java Platform. Its major components will be:
A new filesystem interface that supports bulk access to file attributes, escape to filesystem-specific APIs, and a service-provider interface for pluggable filesystem implementations;
An API for asynchronous (as opposed to polled, non-blocking) I/O operations on both sockets and files; and
The completion of the socket-channel functionality defined in JSR-51, including the addition of support for binding, option configuration, and multicast datagrams.
Bernhard Bablok has posted JavaReadline 0.8.0, a Java library that uses the Java Native Interface and GNU readline to provide UNIX-like readline functionality to Java console applications. It runs on Linux and probably on Windows. JavaReadline is published under the LGPL.
The Legion of the Bouncy Castle has released version 1.17 of the Bouncy Castle Java Cryptography API, an open source, clean-room implementation of the Java Cryptography Extension (JCE). It supports X.509 certificates, PKCS12, S/MIME, CMS, PKCS7, and lots of other juicy acronyms. It also includes its own light-weight crypto API that works in Java 1.0 and later, and does not depend on the JCE. Personally, I've always found the JCE to be a bit of a mess. Making it compatible with U.S. law made it a lot more complex than it otherwise would have needed to be. Thus, this lightweight API feels like a breath of fresh air. Version 1.17 supports S/MIME CompressedData and can encode multi-part objects in Enveloped and Compressed messages. RC2 parameter processing has been expanded to allow the CMS and S/MIME API to deal with a larger range of clients. Various bugs have been fixed.
Brian Westphal has released version 2.1.1 of his Java Parser/Parser Generator. It builds parsers from straight EBNF notation files. It's published under the GPL. This release fixes a few bugs.
I am very pleased to announce that Norwegian hacker Jon Johansen was acquitted of digital piracy in Oslo yesterday. Johansen had broken the CSS encryption scheme used on DVDs. Interestingly, he was acquitted not by a jury but by a three-member panel including a judge and two technical experts. At least in Norway, you are now free to play your own DVDs on your own hardware, whether the MPAA wants you to or not. (U.S. laws are a still a problem.) The most minor effect of this decision is that I may not have to mar the back side of my gorgeous new PowerBook with a "Free Jon Johansen" sticker like the one that's adorned my Dell laptop for the last couple of years. :-)
Unfortunately, in Norway the prosecution is allowed to appeal acquittals, so the case may not be quite over yet. A decision on whether or not to appeal is due within two weeks.
Sun's posted a beta of the Java 3D API 1.3.1 on the Java Developer Connection (registration required). Version 1.3.1 adds "new functionality to support dynamic video resize, specifically targeted for SUN framebuffer : XVR-4000, and a bunch of bug fixes to earlier release." It's available for Solaris/Sparc and Windows DirectX and OpenGL.
Yes, you did read that right. I am using Mac OS X now, though not for my primary work. My wife gave me a new Titanium PowerBook for Christmas to replace the Dell Latitude that almost died on me at SD Expo in Boston back in November. Hardware wise, it's nice. It is about a pound and a half heavier than the Dell notebook it replaces, which I don't like, and although the keyboard is full-sized, the keys aren't. I hate the half-sized arrow keys and the page up and page down keys that require a modifier key. There's plenty of empty space on the base. Why Apple couldn't provide full-sized arrow and page-up/page-down keys I don't know. Even my eight-year old PowerBook 5300C (which is not as wide as the TiBook) has full size arrow keys. On the plus side, it has a DVD burner, 802.11b, and a much larger 15" screen than my old Dell.
Software wise I'm much more impressed. Mac OS X is surprisingly easy to use. The Dock is not as bad as I feared, though I do miss the applications menu. I'm still trying to figure out some basic things that have moved to new locations in Mac OS X. Yesterday I finally figured out where the print monitor was hiding (It had been renamed Print Center). Just today I finally figured out how to get back to the Finder without closing all my application windows. I still can't automatically mount a network server; but I'll probably get that straightened out soon. The new menu organization took a little getting used to, but not that much. Having the application preferences in a predictable location is a big step forward. I still keep looking for the OK button after changing preferences, but I'll stop doing that eventually. (In Mac OS X applications save preferences automatically when you close the window. There's no OK or cancel button.)
I was extremely skeptical of the Finder not showing you the entire contents of the hard disk, but now that I've actually used it, I see that it works quite well. ITunes and IPhoto are nice, but not any better than what's available on Linux and Windows. I love having a terminal for doing Unix and Java things. Surprisingly Apple file sharing is flaky, but I've switched over to Windows file sharing and FTP, and that works flawlessly.
Oh, yes. I almost forgot. Far and away the most significant change in Mac OS X, much more important than the Aqua user interface and even more important than the Unix underpinning, Apple has finally done something they should have done since the very first Mac: the system as shipped from the factory includes free, professional grade compilers and other development tools necessary for writing software for this system. Supported languages include C, C++, Objective C, Perl, and Java. Old time Mac programmers remember the bad old days of Think C and MPW. Really old time Mac programmers remember having to buy a Lisa to develop for the Mac. The lack of quality, free-beer software development tools meant Apple got very little return out of their investments in the education market. The art students and English majors may have loved their Macs, but the CS students, engineers, and physics majors mostly used them to dial into the VAXs and Unix boxes where they did their real work. There's been an explosion of new, small, downloadable Mac OS software in the last year or two. Most observers attribute it to Unix. I don't. I think it has more to do with Apple finally committing to deliver decent, free development tools for their systems. If Apple had done this in 1984, the computing landscape would look very different today.
And speaking of Java, Mac OS X Java support is incredibly better than it ever was in Mac OS 9. LimeWire runs more smoothly on this system than it ever did on Windows, Unix, or Mac OS 9. The terminal is a huge help for simple apps. Java 1.4 is still MIA, but for now I can live with Java 1.3. (That may change if I succeed in convincing O'Reilly to do a second edition of Java I/O or a third edition of Java Network Programming which would require access to the latest software.) My own software all ran once I realized I needed to put the JAR files in Library/Java/Extensions instead of jre/lib/ext. Besides 1.4, the other big missing piece in Java support is SWT and Eclipse. (Update: Peter Herndon told me there's a beta of Eclipse 2.1 that supports Mac OS X.) IDEA requires Java 1.4 so it's also a non-starter on Mac OS X.
On the down side, I cannot believe how slow basic finder operations like opening a folder or launching an application are. The spinning beach ball cursor pops up very frequently. It feels absolutely ridiculous that my new 1GHz G4 PowerBook opens a folder slower than my 1988-vintage, 16MHz SE/30. Yes, the PowerBook screen is much larger and shows everything in millions of colors. Yes, the PowerBook can do things with graphics, sound, and video that the SE/30 never dreamed of. But shouldn't basic operations like opening a folder have reached the point of instanaeity by now? This isn't fundamentally different than it was 15 years ago.
I'm debating whether it might be time to upgrade the desktop to Mac OS X. Unfortunately this would require replacing a lot of software, and probably most of my hardware as well. My 300MHz G3 is way underpowered for Mac OS X. I did finally verify that I could drive my SGI flat panel display through an ATI graphics card and a multilink adapter. However, I have two displays and only one multilink adapter, so I'd need to find another one first. It's discontinued now, but eBay sells one or two a week, generally for more than the original purchase price. Apparently, there are a lot of people like me out there who bought the SGI 1600 displays with graphics cards that have been orphaned and now want to upgrade.
For now my main work is still on Linux and Mac OS 9. Still, there's enough work that's easier to do on the Mac OS X than either Linux or Mac OS 9, that I'm keeping all three systems running pretty much throughout the workday. (By comparison, my Windows laptop is only turned on these days when I need to look up a password in an old password storage program that won't export its data. I should probably write down all those passwords by hand before the laptop dies for the last time. ) If I had to pick just one system, it would be Linux, if only because it's more up-to-date with Java and likely to remain so. Otherwise, it just might be Mac OS X.
JPedal 1.82 has been released. JPedal is a pure Java library for extracting content from Adobe's PDF file format and rasterizing it. Text fragments are extracted as XML elements with font and location information. Images are extracted in both their raw formats and their clipped and scaled formats as TIFF, PNG, or JPEG files. Version 1.82 rewrites the rendering code. JPedal is published under the LGPL.
JavaWorld has announced that they're going to start charging $49.99 for access to back issues, which they define as anything more than a week old. It's probably a coincidence that this happens about a week after I cleaned all the old JavaWorld announcements out of my mailbox and linked to a whole bunch of their older articles in the recommended reading section. Since it normally takes me more than a week before I get around to checking out their new articles, I'm probably going to link to and quote from fewer of their articles now, if any.
And speaking of both charging for content and cleaning out my Inbox, I've noticed that a significant portion of the messages in my Inbox that I haven't responded to yet are requests for bundled copies of my Java course notes. Originally, these were adapted from my first book, The Java Developer's Resource; and I'd send an archive to any professor or trainer who adopted the book for their class and tell individuals to buy a copy of the book.
Unfortunately that book went out of print several years ago and seems unlikely to be republished anytime soon. I've been promising for a while now to make alternate terms available, and I think I've finally come up with some that make sense:
Payments can be made through PayPal to email@example.com. If you want anything other than the personal, printable notes, please e-mail me first at firstname.lastname@example.org with the details for the course you'll be teaching including school, semester, number of students, and your school contact information.
Note that the complete set of notes will remain here, freely available as they have always been, for anybody who wants to read them. You don't need to pay me anything to read them or learn from them. These prices only apply if you want me to send you an archive copy or if you want to reuse my content for your own course. The main reason I'm doing this is to make it worth my time to bundle up copies of the latest versions for those who want them. Looking at my inbox, there's clearly a need for this. So far it hasn't been filled. This should help me continue to update and expand the notes into the future, even without a new edition of The Java Developer's Resource. If this works out, I'll explore making more notes from other Java and XML classes available under similar terms.
Gaudenz Alder has released version 1.0.7 of JGraph, an open source graph component for Swing that requires Java 1.3 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. JGraph is published under the LGPL. 1.0.7 is a bug fix release.
Adrian Hon wrote in with a report about a Neal Stephenson lecture he attended at Cambridge a couple of months back. Apparently, Stephenson is deeply interested in the old Newton/Leibniz controversy.
Also according to this report, Quicksilver, the prequel to Cryptonomicon, is scheduled to be out in August. Amazon now shows it out in September 2003. It's already 1,727 in the Amazon ranks.
Paul Kinnucan has released version 2.3.2 of the Java Development Environment for Emacs (JDEE). JDEE is an Emacs-based integrated development environment (IDE) for Java programs that supports multiple code browsers, a JPDA-based debugger, method and field completion, template-based and procedure-based code generation, Java source code interpretation, and context-sensitive help.
Hibernate 1.2.2 has been released. Hibernate is an "object/relational persistence and query service for Java. Hibernate lets you develop persistent objects following common Java idiom, including association, inheritance, polymorphism, composition and the Java collections framework. To support a rapid build procedure, Hibernate rejects the use of code generation or bytecode processing. Instead runtime reflection is used and SQL generation occurs at system startup time. Hibernate supports Oracle, DB2, MySQL, PostgreSQL, Sybase, SAP DB, HypersonicSQL, Microsoft SQL Server, Progress, Mckoi SQL and Interbase." New features in 1.2 include a "normalized (table-per-subclass) mapping strategy for databases with ANSI-style OUTER JOIN and CASE". Hibernate is published under the LGPL.
Brad Cox has posted has released version 1.0 of his the Java+ Preprocessor. Java+ supports "long, multi-line strings with executable inclusions like Perl or Ruby, optionally segregates Java+ strings into ResourceBundle files, eliminates the need for JSP or ASP and their implied need for Java compilers on deployment servers (a security concern), and adds absolutely no overhead in either space or time. There are graphical and command line interfaces, and a simple, general, and recursive string syntax." This release "implements invariant keys for localized strings based on user requests. Bundle keys are now computed as the hash of the string contents, with collisions handled by appending a period and a unique number. Digraph characters can now be changed if desired." Java+ is published under a BSD license.
I've whittled my Inbox down below 800 messages, and I've reached April 2001. At this point I'm answering a lot of old e-mail about my books. Sometimes, I can answer an e-mail very quickly if it's about an obvious issue or a clear typo or mistake or some such, and generally those e-mails are responded to quickly. However, when the mail deals with a purported bug in one of my examples, it takes some time to remind myself exactly what the example does and how it does it, and then determine whether there is in fact a problem and if the problem is what the reader thinks it is. Sometimes I have to forward port the example to my current systems and VMs before I can even begin the bug hunt. In one case, JavaBeans, the technology has been so spectacularly unsuccessful and useless that I had to reread my own book to remember how the architecture worked before I could answer a reader's recent questions. (I'm still kicking myself for writing that book instead of the O'Reilly servlets book back in 1998.) Often, it's the complexity of the question that's caused it to remain in my Inbox for so long.
That said, I'm always glad to get the reports. Probably 80% of the time, I find a real problem that can be fixed in future printings or editions, even if the mistake is not always what the reader thought it was. It's not uncommon to notice a completely different problem when reviewing old code, even if it's unrelated to the alleged bug that was reported. However, I am beginning to get really annoyed with correspondents who can't keep a stable e-mail address. The number of bouncing e-mails I'm receiving lately has just sky rocketed. I can understand a few cases, like the one from an Arthur Andersen consultant, or the few messages it took me half a decade to finally resolve; but it's very annoying when responses to e-mails less than a year old bounce.
I've been email@example.com for almost eight years now. Although the site now prefers me to use firstname.lastname@example.org or better yet email@example.com for branding purposes, mail sent to the old address still comes through. firstname.lastname@example.org has worked for even longer. It will even reach me if you misspell the user name. And although I don't advertise it very much, email@example.com has worked for over 10 years.
The one thing you won't see me doing is publishing my ISP address. ISPs go out of business (firstname.lastname@example.org). They stop delivering reasonable service (email@example.com). They pull out of markets (firstname.lastname@example.org) and change their names (email@example.com). They simply aren't able to provide the new technologies I need (firstname.lastname@example.org). Consequently I haven't used an ISP owned address for years. As with many problems in computer science, the solution is an additional level of indirection. All my e-mail goes to an address that I have a reasonable amount of control over and that I can take with me when I move. The email addresses I publish all forward themselves to the mailbox I actually download the mail from. I can change the mailbox without changing the address.
There should be two and only two kinds of e-mail addresses on the Net today: those tied to a person and those tied to a job. A personal e-mail address moves with the person when they shift jobs, change ISPs, move to a different country, change their name, or do just about anything else short of joining the witness protection program (and maybe even then). A business e-mail address should live as long as the company or its successors live. If an employee leaves, that person's business e-mail should be redirected to the employee who replaces him. The best customers and partners tend to have established relationships with individual people behind the company firewall. These are the people who are directing their e-mails to email@example.com or firstname.lastname@example.org instead of email@example.com or firstname.lastname@example.org. You don't want to lose these e-mails just because Jim and Ann moved to France to join the Raelians and make little clone babies.
Of course, this does require that business and personal e-mail be separated. Most companies already have policies like this in place today, though they tend not to enforce them very strictly. Using business accounts for personal e-mail perhaps made sense ten years ago when public ISPs were few, Internet connections were limited, and web mail didn't exist. However, in 2003 we should all have e-mail addresses that we own and can maintain for long periods of time.
IntelliJ is having a sale on their IDEA refactoring Integrated Development Environment for Java. Until January 15, you can buy IDEA 3.0.1 for $200 instead of the usual $499. The sale continues through January 15th. Java 1.4 is required.
FirstSQL, Inc. has released version 2.0 of their namesake FirstSQL/J object-relational database. Improvements in version 2.0 include 2.0 include main memory mode and replication servers. FirstSQL/J 2.0 is $695.
Jim Menard's released version 0.6 of DataVision. DataVision is an open source "database reporting tool similar to Crystal Reports". Version 0.6 makes various and sundry bug fixes and feature enhancements. DataVision is written in Java and supports multiple databases including PostgreSQL, MySQL, and Oracle.
Brad Cox has posted version 0.4 of the Java+ Preprocessor. Java+ supports "long, multi-line strings with executable inclusions like Perl or Ruby, optionally segregates Java+ strings into ResourceBundle files, eliminates the need for JSP or ASP and their implied need for Java compilers on deployment servers (a security concern), and adds absolutely no overhead in either space or time. There are graphical and command line interfaces, and a simple, general, and recursive string syntax." This release improves localization, comment handling, and MD5 checksums. Java+ is published under a BSD license.
|January||January, 2002||January, 2001||January, 2000||January, 1999||January, 1998|
|February||February, 2002||February, 2001||February, 2000||February, 1999||February, 1998|
|March||March, 2002||March, 2001||March, 2000||March, 1999||March, 1998|
|April||April, 2002||April, 2001||April, 2000||April, 1999||April, 1998|
|May||May, 2002||May, 2001||May, 2000||May, 1999||May, 1998|
|June||June, 2002||June, 2001||June, 2000||June, 1999||June, 1998|
|July||July, 2002||July, 2001||July, 2000||July, 1999||July, 1998|
|August||August, 2002||August, 2001||August, 2000||August, 1999||August, 1998|
|September||September, 2002||September, 2001||September, 2000||September, 1999||September, 1998|
|October||October, 2002||October, 2001||October, 2000||October, 1999||October, 1998|
|November||November, 2002||November, 2001||November, 2000||November, 1999||November, 1998|
|December||December, 2002||December, 2001||December, 2000||December, 1999||December, 1998|