Saturday, December 16, 2006

CroftSoft Slideshow

CroftSoft Slideshow presents a slideshow of your pictures. It is a conversion of the CroftSoft Savor Pix screensaver to an applet and a desktop application. It requires Java 6. Take a peek at the source code.

Tuesday, December 12, 2006

Java 6

Java 6 was released today. You can download it here.

In the past I would always switch to the latest release of Java as soon as it was out of beta. For Java 5, however, I waited a year or so until there was also a Java 5 implementation for the Mac since we did not want to exclude any of our users. I think that proved to be a mistake for a number of reasons. This time I am upgrading immediately.

Sunday, December 10, 2006

Slideshow Screensaver

I created a slideshow screensaver for Windows, CroftSoft Savor Pix. It displays the images in your "My Pictures" directory and subdirectories in random order. You can configure the slideshow speed and turn on a display of the filename path. Pressing the spacebar skips to the next image.

I know that there are screensavers that come installed with Windows that already do this sort of thing but I wanted to create one that I could customize. Here is the source code.

Tuesday, November 28, 2006

Program D Client

I have created a Java user interface client for the Program D chatbot server, CroftSoft Client. It comes in three flavors: applet, desktop application, and desktop application with speech synthesis.

I also started a new tutorial, Program D Setup on JBoss.

Thursday, October 26, 2006

A.I. Chatbots

I just signed a short contract with Terasem Movement to create an A.I. chatbot web application. The goal is to enable users to create chatbots representing themselves by uploading customized Artificial Intelligence Markup Language (AIML) files. I have already had some success installing and testing Program D, an Open Source Java A.L.I.C.E. interpreter.

If I have time, I hope to add speech synthesis for output. At my previous job, we were able to combine an Open Source Java text-to-speech (TTS) engine FreeTTS with the Speech Synthesis Markup Language (SSML). This was a favorite feature of my children as they delighted in typing in text to make the computer say whatever they wanted. This promises to be a fun project.

It is wonderful to be able to combine all of these Open Source components to create a new application. Fortunately I will be able to contribute this effort to the Open Source community as well. Look for the source code to start appearing in the CroftSoft Code Library in the days ahead.

Sunday, October 01, 2006

Savor Screensaver

I wrote my first screensaver, CroftSoft Savor, using the early access SaverBeans Screensaver SDK version 0.2. So far I have only deployed it on Windows but since the SaverBeans SDK is Java-based it should be cross-platform. After you have a chance to download and install it, take a peek at the source code.

Tuesday, September 26, 2006

Interface APIs

Last night I started the Java 3D Interfaces (J3DI) API. J3DI is an "interface API". An interface API provides interfaces for the concrete and abstract classes of another API. The purpose is to be able to program your applications to the interface API so that you can swap out the underlying implementation at compile-time or run-time without additional coding. Applications and libraries programmed to manipulate instances of the interfaces will work with any of the implementations. Wrapper classes are used to adapt implementations to the interface API. They also shield application code from changes in the implementation APIs as they evolve over time.

J3DI is based on the Java 3D scene graph API. Sun Microsystems provides a public source reference implementation. Xith is an Open Source implementation of the Java 3D API with a few deviations. I developed a COLLADA loader for the Xith API. I also created a multiplayer game prototype and a 3D browser based on Xith. I am modifying the COLLADA loader, the game, and the browser to work with J3DI instead so that they can use either Java 3D or Xith as the underlying implementation.

Using J3DI also gives me the flexibility to experiment with a new implementation under development while retaining compatibility with working implementations. I am toying with a J3DI implementation (JIMP) that will render using another interface API, JIGL. No wrapper classes will be needed as the concrete classes will implement the J3DI interfaces directly. You can take a look at what I have so far in the project source code repository for J3DI, JIMP, and JIGL.

Monday, September 18, 2006

JIGL demo

Please see the JIGL demo applet and documentation that I created today.

Friday, September 15, 2006


I am having some success in creating a JOGL-compatible wrapper API for jGL, a pure Java implementation of OpenGL. I am calling it the Java Interface to OpenGL (JIGL) because it lets you "jiggle" between JOGL-based hardware rendering and jGL-based software rendering at run-time. You can see what I have so far by browsing the library and the test application in the CVS repository.

The purpose is to be able deploy Whoola Cyberspace as an unsigned applet and still have it run when the JOGL native libraries are not pre-installed. I do have a prototype where it is deployed as a signed applet with the native libraries installed on demand but this is less than satisfactory as it brings up a window requesting that the users grant the applet full access to their machines.

Friday, September 08, 2006


I am at the Austin Game Conference where the focus is on online and multiplayer games. The most exciting thing I have seen here is Multiverse, a website that provides you with the software to build your own massively multiplayer online game (MMOG). The really unique bit about it is that they only charge you to use their tools if you are charging your users to play. That means academicians and hobbyists can use it for free. Is this the beginning of the 3D equivalent to the blogosphere?

Thursday, August 10, 2006

Microsoft Update as IE Homepage

I use Mozilla Firefox as my default web browser so I do not use Internet Explorer (IE) except when I am forced to by an IE-only webpage. I set my IE homepage to the Microsoft Update webpage so that I when I do use IE every now and then I am reminded to check for operating system updates and security patches. The Department of Homeland Security just issued an advisory recommending the installation of the latest security patches for Windows so you might want to head over to the Microsoft Update webpage now, especially if you do not have "Automatic Updates" running.

Saturday, August 05, 2006


I just got back from ACM SIGGRAPH 2006, a computer graphics conference in Boston. I was pleased to receive a book I had ordered a few weeks before just before I left, Foundations of 3D Graphics Programming: Using JOGL and Java3D by Chen and Wegman. I had feared it would be delivered to my home the day after I left for the trip.

When I got to the conference, I was also pleased to purchase COLLADA: Sailing the Gulf of 3D Digital Content Creation by Arnaud and Barnes. COLLADA is a new non-proprietary open standard for 3D content in XML that I am using. The authors were kind enough to sign my copy.

I was mainly at the conference to demonstrate the Whoola COLLADA Library, an Open Source Java library that I wrote to import and export 3D graphics in COLLADA. I am excited about these two book as I think they will help me improve my code considerably. I am going to add them to the CroftSoft Book List.

Saturday, July 01, 2006

COLLADA and Google

For awhile now, I have been updating my Open Source 3D web browser Whoola Cyberspace to use the new XML-based 3D format COLLADA. To my pleasant surprise, I recently discovered that the free 3D modeling tool Google SketchUp exports to the Google Earth format and that the Google Earth format is based on COLLADA. This means that it should be possible to load Google Earth formatted 3D files into Whoola Cyberspace, including the growing collection of free 3D models in the Google 3D Warehouse. I am very excited about this and I have already had some limited success in getting this to work.

Free Software Updates

The free Open Source office suite OpenOffice has been updated to version 2.0.3. I read that it includes security fixes.

Version 9 of the free web browser Opera is now available.

Java 6 Beta 2 is out.

You can find a list of additional free and Open Source software on the CroftSoft Links webpage.

Thursday, June 22, 2006

Enumerated Type Message

Recently I have been using what I am calling an "Enumerated Type Message" for internal messaging between the model, view, and controller. Please see my template class for an example.

The Enumerated Type Message is basically a wrapper around an enumerated type with an extra field for arbitrary content. The extra field is necessary because you will often have messages of the same type instantiated at the same time with different content. For those messages with content that stays the same, e.g., null values, I create singleton instances.

I have added the creation of an Enumerated Type Message class as a new step in my Advanced Java Game Programming Checklist.

Tuesday, May 30, 2006


Evolve is an evolution simulation which I wrote as a Java applet back in 1996. Last week I fixed a bug in it that was causing it to crash in Java 5. Today I updated the documentation webpage.

Wednesday, April 05, 2006

First Year Project Report

I have uploaded my doctoral studies first year project report, entitled Real-time Simulation and Processing of Peripheral Nerve Spike Activity. My research advisor, Dr. Cauller, contributed a few lines to the "Introduction" section.

The anonymous reviewer feedback had some comments but suggested I did not need to revise if I did not plan to publish. I am putting this aside now to focus on writing a grant proposal for "Neuroprosthetic Training Software". This will combine the features of CroftSoft Newt Cyborg with Whoola Cyberspace.

Tuesday, March 21, 2006

CDBurnerXP Pro

To install the operating system Fedora (a.k.a. Red Hat Linux), you need to burn ISO files to CD-ROM or DVD. Unfortunately, many of the Windows CD and DVD burners require a paid upgrade for the ISO support feature. If you want to do it all for free, it is sort of a catch-22: you need to be running Fedora to burn the Fedora ISO's so that you can install Fedora.

Finally after much searching and experimentation, I have settled on the free Windows application CDBurnerXP Pro version 3.5. I notice that other people I know use it too.

It did what I needed; now I can install Fedora. In writing this now, I am mildly annoyed to discover that after finally creating a set of Fedora Core 4 CD's a couple of days ago, Fedora Core 5 came out the very next day.

For a list of more free tools, please see the CroftSoft Links webpage.

Windows Defender

The free anti-spyware program from Microsoft is now called Windows Defender. Yesterday I installed it on a work computer that had been used previously by a number of different employees. I found over a dozen remote access, trojan, and spyware programs.

I also used the free Yahoo Toolbar anti-spy program and caught a couple more. I see it has been upgraded to support Mozilla Firefox 1.5.

For good measure, I also ran Windows Update. It prompted me to install a security update.

See a list of more free tools on the CroftSoft Links webpage.

Friday, March 10, 2006

Public Domain Photos

I recently discovered that Yellowstone National Park offers a collection of thousands of Public Domain images of natural scenes and animals from their Yellowstone Digital Slide File website.

I've added a link to this site to the list on my Public Domain and Royalty-Free Media webpage.

Monday, February 27, 2006

Eclipse Compiler Restrictions

I learned something useful today from this EclipseZone article on Project Compiler Restrictions. Read more in my updated tutorial Eclipse Setup.

Sunday, February 19, 2006

Newsfeed Intelligence

I do not like forums because you have to poll the website to see if there is anything new posted. I prefer mailing lists because they are event-driven: when new content is posted, it is e-mailed to you.

Sometimes, though, I get overwhelmed by my mailing list subscriptions and I end up just filing the e-mail in a folder instead of actually reading it. For example, the Accelerating Intelligence News e-mail newsletter is great stuff but I often do not have time to read it when it arrives. Most of the newsletters I receive from this source sit unread in my ever-expanding "read someday" folder.

Fortunately you can also get this same e-mail newsletter via an RSS newsfeed. Whenever I have the time to do a little reading, I can simply click on an icon and my Sage newsfeed reader will immediately poll all my favorite newsfeed sites for me. It has the advantage of forums in that the content does not clog up your e-mail but it does not have the disadvantage of necessitating that you poll each of the forum websites manually.

The Yahoo Groups electronic mailing lists are great in that you can now access the content via e-mail subscription, the website, or an RSS newsfeed. Is this an example of convergence?

Friday, February 10, 2006

Spike Simulation

Today I presented a talk on "Real-time Simulation and Processing of Peripheral Nerve Spike Activity" at a meeting of the Dallas Area Neuroscience Group. The slides are available in OpenDocument ( format from the Documentation link on the CroftSoft Newt Cyborg webpage.

Tuesday, January 31, 2006


Previously I had been using System.out.println() and my own logging package for debugging. I had heard about the java.util.logging package back when it was introduced in Java 1.4. I did not look into it as I had read comments from other programmers saying that they preferred alternative logging packages such as log4j.

Recently the Open Source Java project Xith switched from log4j to the Commons Logging API. The Commons Logging API appears to be an adapter API to allow you to choose a logging implementation at run-time.

This got me thinking about logging again so I learned how to use the java.util.logging package today. The Java Logging Overview got me started. I could not find a logging tutorial in the Java Tutorial but the java.util.logging Examples from the Java Developers Almanac gave me what I needed.

I had never stumbled across the Java Developers Almanac example source code before. I do not know if the book is any good but the online examples sure are helpful. You can search for code examples by core package name. I am going to add a link to it from my list of developer resources.

Thursday, January 26, 2006

Javadoc LinkSource

I just used the javadoc linksource option for the first time, available in Java 5.0 and Ant 1.6. It generates links in the javadoc to the corresponding source code listings. I think it is very convenient to be able to click on a class or method name while browsing the javadoc and see what the code actually does, especially if there is no description or the description is not up-to-date.

The javadoc source code listings are not color coded like those on but they do include line numbers. Take a look at the updated CroftSoft Javadoc and the linked source code listings. I am particularly fond of package Exemplar.

Tuesday, January 24, 2006

Continuous Design

I have been preaching the software design methodology where you release early and release often. After each release, you add just one new feature at a time and then release again. This ensures that you always have a recent working demo available online while you work on the next feature. This is ideal for Open Source projects.

I have seen this called the "spiral", "component assembly", or "incremental release" design lifecycle. From what I can tell from this recent article, it is also called "evolutionary", "emergent", and "continuous" design. Is it all the same thing or are there subtle differences?

Regardless of what it is called, I think it is a good way to go.

Tuesday, January 17, 2006


In the past I used Info-Zip for GUI-based file compression and decompression. Today I switched over to 7-Zip. I have added it to my list of free and Open Source tools.

Saturday, January 14, 2006

Eclipse Preferences

I have exported my configuration preferences for my favorite integrated development environment (IDE), Eclipse.

Tuesday, January 10, 2006

Input Device for Infants

I created a webpage for one of my new programming projects, CroftSoft Infant. This software will present infants with visual and auditory stimuli and react to their responses via a pacifier connected to a pressure transducer.

Friday, January 06, 2006

Exemplar Game Code

I updated the Advanced Java Game Programming Checklist to include new exemplar source code. I am quite proud of it as it includes my new philosophy about model-view-controller (MVC) architecture plus some Java 5.0 tricks. The next time you sit down to write a Java game, you might want to consider starting from this template.

Thursday, January 05, 2006


I am a big fan of using free software development tools, especially if they are written in Open Source Java. Recently I had some success with GanttProject, a project management tool that supports Gantt charts. The webpage has an animated demo to help you get started. I am happy to report that it did what I needed.

Here is a list of more free and Open Source software development tools that I use:

Sage for Firefox

To track blogs such as this one, I recently started using Sage, a newsfeed reader for the Mozilla Firefox web browser. I like Sage because it is simple to use and it is always accessible as a Firefox sidebar just by pressing ALT-S. You can click on the magnifying glass icon to search the current webpage for newsfeed links. Once you get it installed, try it on this page.

List Archive

I am switching the CroftSoft Update from a Yahoo Group mailing list to this blog. The old list archive is available here: