James' Conference Notes

By: James Reynolds - Revised: 2006-06-22 devin


These are the notes James Reynolds took at WWDC 2001, held May 21st - 25th.


WebObjects is Apple's secret weapon. It is an application that makes web application development easier than anything I have ever seen. Having tinkered with web application serving a little, I was completely blown away at how powerful and easy WebObjects is. Basically, the more I learn about it, the more I fall in love with it. The only qualification is that it has a steep learning curve. But as one of the developers said: a steep learning curve just means you learn a lot very quickly.

In a paragraph, WebObjects separates data from interface. So, if you have an existing Oracle database, you can instantly create an interface. WebObjects queries the database to discover everything about it, and then it builds a customizable interface. The interface can be a Java Client application, or a set of webpages. If you decide to switch to a different database application, such as OpenBase, you can just switch. The interface does not depend on the database.

There are two versions: WebObjects 4.5.1 and WebObjects 5.0. WebObjects 5.0 is so different from WebObjects 4.5.1, that WebObjects 4.5.1 is still around. WebObjects 5.0 is written in Java, WebObjects 4.5.1 Objective-c. The rest of these notes are about WebObjects 5.0.

System Requirements:
  • Development platforms
    • Mac OS X v10.0
    • Windows 2000 Pro
  • Deployment platforms
    • WebObjects applications are designed to work with any Java 2 Platform, Standard Edition 1.3 runtime environment, using JDBC 2.0 for universal database connectivity.
    • The following platforms are fully qualified and supported:
      • Mac OS X Server v10.0
      • Windows 2000 Pro
      • Solaris 8
  • Supported data sources
  • Unsupported data sources (they work but aren't "official")
WebObjects development tools are available on the Mac OS X Developer Tools CD that were released at WWDC 2001. Earlier versions of the CD do not include the tools.

Here are some cool things about WebObjects.
  • Deployment of a WebObjects application can be a very small operation (few servers with no extra hardware), or you can spend lots of money and make it really nice:

  • WebObjects can be locked down very securely. It can be configured to use SSL, query for passwords only on pages that are necessary (some pages are public, some are private), prevent the browsers from going "back" to a page that would compromise data integrity, etc.,.
  • One company made an application (using Direct to Java Client Application) with 6 developers when the project would have normally taken 60.
To build a WebObjects 5.0 application, you use a variety of tools. If you have Mac OS X with the current development tools, you can follow along and make a database.

First off, you create a database. If you already have one, you can create a database with the OpenBaseManager tool (located at /Applications/OpenBase/OpenBaseManager). The development tools comes with some example databases.

Second, you need to have an EOModel (Enterprise Object Model). EOModeler is the tool which generates the EOModel (EOModeler located at /Developer/Applications/EOModeler). If you have an existing database, EOModeler will query the database and build the model for you. If you just created a database, you can model it in EOModeler and EOModeler will create the tables and entities for you. If you ever switch database applications, the EOModel is where that is done. You have to have the URL, something like "jdbc:openbase://localhost/databaseName".

To try this, open EOModeler and select the menu "Model" - "New". Select the JDBC adapter (Java DataBase Connectivity) and click next. In the URL field type "jdbc:openbase://localhost/WOMovies" (leave the username, password, and other fields empty). Click finish (make sure all query options are selected). It automatically generates the model for you. Save this file and you can use it in the next step.

Thirdly, you create the application with Project Builder (note: ProjectBuilderWO is for WebObjects 4.5.1). You can create a variety of WebObject applications: direct to java client, direct to web, java client, and web client. The two easiest (and still powerful) are direct to web and direct to java. You point this to your EOModel and you pick a look. It will then build the entire application for you and even launch it.

To try this, open Project Builder and select the menu "File" - "New Project". Scroll down to the WebObject project types, and select "Direct to Web Application". Give it a name. Click "Next" on the "Choose Frameworks" page. Add an EOModel. You can add the one you created above (it will produce an error when run from the web though--OK, so it isn't THAT simple), or an example that is included: /Developer/Examples/JavaWebObjects/JavaClientMovies/Movies.eomodeld. Pick a look (Basic, Neutral, or WebObjects). Select "Finish" on the next page (make sure build and launch is selected).

Lastly, you customize it, adding your own graphics, the layout, the fields displayed (all will be displayed at first), etc., with the RuleEditor and other tools.

Important note: the above is only a description of the development process. Once developed, deploying the application is just as involved, thus the "steep learning curve" means that there is just ALOT to learn before a finished product can be deployed.

Learn more about WebObjects:

Email announcement list:
  • WebObjects 5 for Java: A Developer's Guide with CD-Rom by Jesse Feiler
  • WebObjects Web Application Construction Kit by George Ruzek
  • WebObjects Overview by Apple Computer Inc.


About the audio format:
  • Mulit-channel audio I/O.
  • Both PCM and non-PCM formats.
  • Float32 is generic audio format.
  • Fully specifiable sample rates.
  • Has timing info.

About the above image:
  • Sound manager and audio toolbox are client processes.
  • HAL is the hardware abstraction layer.
  • I/O Kit (part of Kernel)
Core MIDI architecture:
  • provides complete representation of MIDI devices.
  • virtual end-points for inter-application communication of MIDI info.
  • same time stamping structures as core audio frameworks.
Apple currently supports audio drivers for:
  • Built in hardware
  • USB audio-class driver
  • Firewire audio
  • Some others...
I/O theory of HAL (Hardware Abstraction Layer):
  • Takes advantage of threading and sharing.
  • Data is passed to/from hardware via a ring buffer.
  • Data is time stamped at the wrap point.
  • Each device has an I/O thread. The tread is a mach realtime thread.
There is an audio test application in /Developer/Examples/CoreAudio/HAL/Daisy.pbproj (you will need to build it).

  • By default, playing audio will prevent the OS from sleeping.

OS X Programming Tools

Apple's tools
Third party tools
  • Pro Fortran
  • CodeWarrior
    • CodeWarrior is now owned by Motorola, and so they now make their compiler to be very CPU specific - one reason to buy it instead of just using Apple's Project Builder.
  • REALbasic
    • 60-80% of PC apps are VisualBASIC, hint hint...
    • REALbasic
      • Compiles applications to run on 68k, PPC, OS X, and Win32.
      • IDE (Integrated Development Environment) for Mac (OS 9.x and earlier, and OS X).
      • Object Oriented programming.
      • Direct access to the Mac Toolbox and PPC Shared libs, SQL, AppleEvents, AppleScript, QuickTime.
      • Why the heck haven't I been using this!? - I am learning it now...
Installers and utilities
Java Tools
More Tools


Mac OS X supports Java 1.3 (J2SE), Hotspot 1.3 VM and Swing. Sun released Java 1.3.1 on May 17, and Apple will release it for Mac OS X in July, making them the first 3rd party to port it.

Apple wants to be THE Java platform.

Features of Java in Mac OS X:
  • All Java applications are rendered with Quartz, and have all the Aqua look.
  • All Java applications automatically take advantage of Mac OS X multi-threading and hardware multiple processors, making it very fast, sometimes faster than applications written in other languages.
  • QuickTime for Java in every install.
  • Apple's IDE, Project Builder, will create/edit/debug 100% java Applications.
  • Moneydance by Appgen Personal Software - this is a full fledged desktop application. The author originally wrote it on a different platform, ported it to Mac OS X, realized how nice it was and switched his main workstation to Mac OS X.



There are tons of free development tools for QuickTime, for QTVR, cubic VR, panoramas, effects, etc.,.

Movies can now be given media skins, so that instead of the normal QT window, it can look like anything (even the movie can be enclosed in non-rectangular shapes).

QuickTime and Flash 4. Can have mp3, text input, load movie/load variable, multiple flash tracks, new wired actions (trigger a flash button with a wired action). Flash 4 added export to QT movie, still works well. Quicktime plays Flash 4 movies fine.

  • Chatter - a chat application (link dead)
  • Sydney Opera House
  • The Great Bear Rainforest (link dead)


Each window can have a unique print dialog--the application is not limited to one open print dialog.

CarbonLib uses Classic printer driver's dialogs.

Each printable document has to be formated for printing. In Mac OS 9, when you open the Page Setup dialog, it says "Format for:" and "Paper:". Apple created a "generic printer" so that document formating is independent of the printer selected. Thus the current printer and default printer is only relevant when printing. Or something... (OK, I did not exactly understand what was talked about).

It is possible to print in Mac OS X from the command line using lpr, lpd, lpq, lprm, lpc, but they aren't well integrated. They use NetInfo printer settings. They don't know about the Print Center queues.

A better lpr is at /usr/sbin/Print. Print [-P printer] [-M mimetype] [-S server] filename

see its man page for more info.

lpd for remote printing works if you know how to set it up. Not a long term solution...

Whenever an lpr printer is set up in Print Center, a NetInfo entry is created that only applies to the user who sets up the printer.

Creating global NetInfo printers requires NetInfo Manager and the right privileges.

see man printcap.

To troubleshoot printer problems use cplutil. Type "cd /Developer/Tools;./cplutil help" for a list of options.

Can no longer print PostScript to disk (pdf replaces this...). There is a PostScript error handler to print errors just like in LaserWriter 8.

Color: there is no way to turn off color management (ColorSync). EVERYTHING requires a profile. There should be a tech note on this soon.

  • Apple's printer page (link dead)

Spelling Services

Spelling services are built into Mac OS X. That means that the OS uses a global custom dictionary, and any application that uses words can very easily add spell checking and control-click on misspelled words to get a list of possible correct words (like in Word or Eudora, except that it is GLOBAL).