It’s MacHack time again, and Adam reports from Dearborn about Mac OS X’s acceptance at the annual developer gathering. Read on to find out which hacks took home the top honors at the MacHax Group’s Hack Contest, and then tune in for the second part of Jonathan Rentzsch’s look at WebObjects, Apple’s industrial strength Web application development kit. In the news, Mac OS X 10.0.4 solves a number of problems, and Extensis releases Suitcase 10.
Mac OS X 10.0.4 Update Released — Apple has updated Mac OS X to version 10.0.4, improving USB support, the Classic environment, and adding support for the new 17-inch Apple Studio Display monitor (see "The Flatter the Better" in TidBITS-581). The update is available via the Software Update control panel, or in two forms as separate downloads: a 12 MB package that updates Mac OS X 10.0.3, or a 19.3 MB one that updates any version between 10.0.0 and 10.0.3.
We’re happy to report that, unlike previous Mac OS X updates, Apple has documented what’s changed with 10.0.4. Highlights include improvements when accessing shared FileMaker Pro 5.0 documents via TCP/IP in the Classic environment, better PowerBook battery conservation in sleep mode, and iTunes compatibility with more third-party USB CD-RW drives. There are still a few frustratingly vague items in the notes, such as "a later version of SSH is included," when it wouldn’t have been difficult to say which version was included and what it fixed. [JLC]
Suitcase 10 Delivered — Extensis has released Suitcase 10, adding a number of features to the long-standing font management tool. The new version adds the capability to create application sets, which can automatically activate fonts when launching many popular programs; a QuarkXPress XTension also opens any font used in a QuarkXPress document (including fonts embedded in graphics). Suitcase 10 also supports Multiple Master fonts, includes the utility FontBook for previewing typefaces, adds a module for working with font sets from the Control Strip, tracks corrupt fonts, and handles font conflicts. Suitcase 10 requires a PowerPC-based machine running Mac OS 8.6 through 9.1, and costs $100. Upgrades from previous versions or competing font management programs are available for $50. Owners of Suitcase 10 will receive a free copy of the Mac OS X version when it ships later this year. Suitcase 10 is an 8.2 MB download. [JLC]
This year’s MacHack developers conference marked what I thought might be a pivotal point in the Macintosh industry. Mac OS X has been out for about 90 days, so developers have had some time to become familiar with it, and experienced users have started to identify Mac OS X’s omissions and problems. I was curious to see how many people would be using Mac OS X, how many hacks would be done for Mac OS X, and what the general tenor regarding Mac OS X would be. Although MacHack was tremendously enjoyable as usual, trying to treat it as a Magic 8 Ball about Mac OS X elicited only "Future murky. Try again later."
MacHack started off with the traditional midnight keynote as a panel discussion with seven members of the team that originally created the Macintosh. At first glance, it seemed an odd decision. Why would you invite people whose contributions to the Mac happened as many as 20 years ago to a conference where one of the major topics was bound to be a version of the operating system that shipped 90 days ago? Aside from the general entertainment value, as the members of the panel told stories and bantered with one another, I gradually realized that the keynote worked on a deeper level – a symbolic passing of the torch from the early Macintosh creators to the developers of today’s Macintosh world. Technology tends not to have a long lifespan, but in the Mac world, and particularly at an event like MacHack where attendees return year after year, there’s a strong sense of history. Bringing people like Andy Hertzfeld, Bill Atkinson, Caroline Rose, Randy Wigginton, Donn Denman, Jef Raskin, and Daniel Kottke to reminisce provided a connection with the past at the same time we’re moving forward into the future of Mac OS X.
The second night’s keynote by Apple co-founder Steve Wozniak was even more enjoyable, because Woz in the flesh turns out to be truly warm, personable, and playful. He regaled the audience with tales of his hacks, pranks, and practical jokes (a number of which revolved around perforated sheets of $2 bills he uses whenever there’s an opportunity for some fun, since many Americans don’t recognize $2 bills, and far fewer realize you can buy them in perforated sheets). Interestingly, Woz said that he basically never played jokes on Steve Jobs; I came away with the impression that Jobs simply wasn’t the sort of person one did that too, and even an inveterate prankster like Woz recognized that.
Reflections of Personality — Meeting these people was interesting not just from a historical standpoint, but also because it enabled us to see the reflections of their personalities in the Macintosh. Andy Hertzfeld imbued the Mac with his enthusiasm and said that he explicitly tried to bring Woz’s sense of playfulness to the Macintosh project. Bill Atkinson brought passion to the Mac, Jef Raskin gave it his intellectual rigor and desire for elegance, and Caroline Rose’s contributions added clarity and attention to detail.
There’s no question many others put their mark on the Mac, the most important of whom was undoubtedly Steve Jobs himself. Without the ways he challenged others to do what seemed impossible and the support he gave the project (particularly during the first few lean years), there’s no question the Macintosh would never have succeeded. Many of the stories we heard were about Steve Jobs, and even accounting for the speakers’ different opinions, the picture that emerged was of a man who needs to control as much of the world around him as possible.
Mac OS X’s Challenge — Jobs’s need for control has seemingly increased over the years; as a small example, he’s gone from insisting that programmers were artists who should sign their work to eliminating credits from About boxes in current Apple software. Herein lies a significant problem for Mac OS X. Like the original Macintosh, it’s the work of many people, and yet, the pretty face that Mac OS X presents to the world doesn’t seem to reflect those people. Instead, it’s about Steve Jobs and his lieutenant, Avie Tevanian. All too often, when there’s something about Mac OS X that is arguable at best (such as the level to which it uses filename extensions for linking documents to their applications), the reason for the decision comes down to "because Avie said so" or "because Steve wants it that way." Steve and Avie may be brilliant, and they may be necessary for Mac OS X’s success, but neither means they aren’t capable of making huge mistakes.
For the most part, I didn’t detect significant enthusiasm for Mac OS X among the MacHack developer community. Few people were using it on their primary work machine, and only about 10 percent of the hacks submitted to the hack contest required Mac OS X. The people who were the most excited about Mac OS X were, unsurprisingly, those who like and use both the Mac and Unix, and even then it was Unix that made the difference, not the Macintosh aspects of Mac OS X. Woz and the members of the original Mac team concurred with this basic attitude – they too liked Mac OS X’s Unix underpinnings but made negative comments about the Aqua interface. Woz was particularly blunt, saying that he felt Mac OS X "wasn’t ready for prime time."
As a friend put it, right now Mac OS X feels like an art project, not an operating system with innovative human interface design and rigorous usability testing. If the MacHack demonstration and discussion of Microsoft’s forthcoming Windows XP from some ex-Macintosh programmers is indicative, Microsoft has embraced some of the design attitudes that made the Macintosh great. And if that’s true, Apple will need to set its sights ever higher or risk being beaten at its own game.
Apple is cognizant of this concern. At one session, the MacHack attendees had no trouble working up a Top 100 Issues with Mac OS X list, but at the next day’s Apple feedback session, Apple’s Steve Glass and Tim Holmes were able to brush off almost all minor criticisms with "yes, we know, and we’re working on it." That answer is deceptively important, because the other very real possibility for some of the glaring omissions and mistakes in Mac OS X was that Apple didn’t see a problem at all. The question that remains is exactly when Apple will address any given annoyance, but the four bug fix releases of Mac OS X that have arrived in the last 90 days are indicative of forward motion. The obvious date for a more major release is July’s Macworld Expo in New York City, and after that, Macworld Expo in San Francisco next January.
What Apple has going for it – and what I think Microsoft can never replicate with Windows – is the hyper-informed and interested Macintosh user and developer community. We care about what happens to Apple and to the Macintosh, and only by continuing the kind of feedback that flooded into Apple during Mac OS X’s beta cycle can we help ensure that Mac OS X evolves an interface we want to use in favor of anything else.
Although much happens at the MacHack developers conference, the heart of the event is the MacHax Group’s annual Hack Contest, which gives the programmers a chance to code without worrying about utility, stability, or even usability. And yet, the hacks that emerge every year show more than the playful side of the Macintosh – a number of them have later been turned into shareware or even commercial products. Of course, such hacks risk cries of "Useful!" from the audience, but that’s never stopped a programmer with a good idea at MacHack before.
My Hacks — I was in no danger of "Useful!" cries with my first hack. Last year, the prize for my hack revealing Eudora’s auto-correction capabilities was a four-foot wooden stake, complete with splinters. Why the hack contest organizers chose to give me such a prize is immaterial, but it was in part to see how I’d get it home, since a four-foot wooden stake is going to take some explaining in the airport. As I was leaving, I had a brainstorm, and I wedged the stake securely under the bathroom sink in my room and put a note on my calendar to request room 323 the next year. This year, when I checked in, I asked for the room, got it, and was overjoyed to find that my stake was still there. For the hack, I donned leather gloves and retold that story while brandishing the stake. To make it relevant to the audience, I cast the hotel as a storage device and the stake as data that I wrote out under the sink, then later asked the file system for the address to the block holding my data (the room number). Access time to my data was poor, but I did get a laugh from peering closely at the stake and announcing that there hadn’t been any data corruption. Oh, and just in case you’re wondering, this year I’m seeing if my data can be copied to another location and, if so, I’ll edit it with the sandpaper prize I won this year.
I also participated in another hack with Leonard Rosenthol and Richard Ford to design and implement a statistics server so we Eudora users could compare our usage statistics with others (Eudora 5.0 and later can keep detailed usage statistics in an XML file). The idea was for Leonard to write a Eudora plug-in to extract numbers from the XML file and upload them to a set of Perl scripts Richard wrote to group and sort the results. I set up my iBook to run the Perl scripts under Mac OS X’s Apache Web server, and I worked on the HTML interface as well.
The only problem was that since we started after dinner on Friday, with the hack contest starting at midnight, we just didn’t have enough time, even with working through much of the contest. Mac OS X stymied many of our efforts with a crash while installing the developer tools, wacky permissions problems, and other annoyances caused by its rigid directory structure. But it was still neat to be run Leonard’s application fresh from the compiler, enter its output into a Web page I created in Mac OS X’s TextEdit, and see the results served by Apache from Perl scripts that Richard was editing remotely on my machine until the last minute before I started talking.
Yoot Hacks — Many of this year’s 93 hacks came from the large contingent of "yoot" hackers still in school, the youngest of whom was only seven years old. One yoot hack from Justin Christie and Paul Scandariato was even useful – a REALbasic application called iWake that runs items in a Wakeup Items folder whenever the Mac comes out of sleep. A yoot team of Mark Johns, Justin Lee, and Charles Melby-Thompson wrote Chia Windows X to restore the Mac OS 9 zooming window rectangles to Carbon applications under Mac OS X. Daniel Fox wrote an AppleScript called Hackable AirPort Network Seeker, which was designed to alert you verbally if you drove into range of an AirPort network. Finally, Andy Furnas hacked a copy of iTunes to make it scriptable by copying several resources from iTunes predecessor SoundJam MP back into iTunes. It was an impressive showing from the yoots this year, and it’s great to see the MacHack experience helping these kids learn and grow year after year.
My poor efforts and the yoot hacks aside, here are the top five hacks of 2001 as chosen by the developers who watched all of the contest demonstrations.
Fifth Place: Palm Finder 2 — Although most of what goes on at MacHack revolves around the Macintosh, alternate platforms are generally welcome, and the Palm OS often receives strong support in the hack contest. This year, Lucius Kwok’s Palm Finder 2 took fifth place with its uncannily accurate representation of the Macintosh Finder on the tiny Palm screen. It could have been even scarier if it had been combined with Jesse Donaldson’s HFS-, which took advantage of Palm OS 4.0’s new capabilities for accessing files and external storage cards to use an iBook’s hard disk as a 10 GB storage card.
Fourth Place: Crrrhaaack — Inspiration was born of misfortune for Jon Gotow, author of Default Folder, Screen Catcher, and other shareware utilities. Jon accidentally dropped his PowerBook the first day of the conference, cracking the screen and rendering the bottom two-thirds unusable. Rather than crying over a cracked LCD, Jon wrote Crrrhaaack, an extension that resizes the screen to just the usable part (1024 by 260 in his case). An application provides an interface for choosing the functional part of the screen, and if Jon had mentioned during his presentation that he also wrote the hack on his broken PowerBook, he might have placed even higher.
Third Place: AirPort Radar — Three years ago at MacHack, every table in the hotel atrium where the hackers congregate was adorned with an Ethernet hub. Most of those disappeared last year, because many people had AirPort cards and could use the wireless network instead, and this year, all but a very few people relied entirely on six AirPort Base Stations scattered around the hotel. Taking advantage of the wireless network setup, Mike Neil and Eric Traut wrote AirPort Radar, which used the differing signal strengths from multiple AirPort Base Stations to triangulate and display the location of a PowerBook, even while it was moving.
Second Place: AquaShade — Mac OS X’s "genie effect" when minimizing windows into the Dock makes for a good demo, but lots of Macintosh users have bemoaned the loss of Mac OS 9’s windowshade feature, which causes a window to roll up into its title bar. Nicholas Riley and Avi Drissman set out to fix this problem with their AquaShade hack, which brings back the windowshade functionality to Mac OS X’s minimize button, at least in Carbon applications. Holding down Control when clicking the minimize button does a normal minimize to the Dock, holding down Option toggles the windowshaded state of all open windows, and holding down Shift makes the windowshade action move more quickly. Derisive cries of "Useful!" were rampant during their demo, but that didn’t stop the applause nor the votes that gave AquaShade second place.
First Place: Apple Turnover — In the grand tradition of almost useless hacks, Mac Murrett’s Apple Turnover took home first place with its technically impressive dynamic rotation of the live screen image. Different modifier keys caused Apple Turnover to rotate the screen clockwise and counter-clockwise, or to jump to specific angles of rotation. Apple Turnover made good use of the Velocity Engine, but perhaps the deciding factor was its demonstrated compatibility with asciiMac, a hack from a few years ago that displayed the entire Macintosh interface in ASCII graphics.
Although details weren’t available when I wrote this, CD-ROMs containing all the hacks (many with source code) are usually made available for purchase at the MindVision store. Check the MacHack Web site for details.
Last week, we talked about the fundamentals of application servers and how they’ve evolved over the years, ending with the Information Age approach used by Apple’s WebObjects. Let’s look more closely at what WebObjects actually provides.
WebObjects Architecture — A typical WebObjects application sits between two adapters. The first adapter connects the application to a Web server, while the second connects it to a database:
Web server <-> WebObjects application <-> Database
The Web server receives and responds to HTTP requests from users on the Web – it handles transferring your application’s interface, which consists of Web pages seen by the user. Apple provides an adapter which enables the Web server to pass requests to the desired WebObjects application. (A single server can run many WebObjects applications simultaneously.) WebObjects comes with two types of Web server adapters: a slower, portable Common Gateway Interface (CGI) adapter and a set of faster adapters for specific Web servers such as Apache or Microsoft’s Internet Information Server. WebSTAR also ships with a WebObjects adapter.
The WebObjects application communicates with the database via another adapter. The database adapter is responsible for generating SQL, sending it to the database, receiving the textual results, and parsing the results into objects. Because the SQL generation is done at the adapter level, the SQL can be optimized for the particular database.
This architecture enables WebObjects to separate the data access, the interface, and the logic of an application by using different tools to deal with each aspect. None of these components have to live on the same machine: a Mac OS 9 Web server running WebSTAR can talk to WebObjects on a machine running Mac OS X Server 10, which in turn can connect to databases on a Windows 2000 system.
Data Access: EOModeler — At the core of WebObjects lies something unlike anything else included with otherwise competitive tools: Enterprise Objects Framework (EOF). This amazing technology gives programmers the capability to access databases via easily manipulated software objects (instead of low-level textual SQL,which could be database-specific).
The first step is to create a database model using a powerful application named EOModeler which creates and manages database models. A model is a file that contains information about how a database is laid out. It includes information such as table names, column names, data types, and more. This is tricky work, but EOModeler offers straightforward ways to create a new model or derive a model based on an existing database (which is a magical thing to me).
With the model in hand, EOModeler then automatically generates Java code to create, update, and delete objects within a database. Database tables become Java classes, columns become class fields, and rows become class instances. These manufactured classes use EOF to control the database. EOF, in turn, uses an adapter to communicate with the database. The adapter generates SQL code, sends it to the database, and parses its replies.
This may sound confusing, but the bottom line is the specific Web application being developed never needs to deal with low-level SQL – it deals only with high-level objects. EOF and the database adapter handle all the yucky SQL generation and parsing. Also, since EOF uses adapters to communicate with databases, EOF is not tied to any particular database. For example, there’s no need to modify the Web application if you move from FrontBase to Oracle.
Interface: WebObjects Builder — Affectionately known as "WOBuilder," this tool is a WYSIWYG HTML editor much like FileMaker Home Page, the defunct Symantec Visual Page, or Adobe PageMill. Although WOBuilder is an older editor and isn’t completely up-to-date (for example, it lacks support for Cascading Style Sheets), it does offer capabilities that no other HTML editor has.
WOBuilder knows about objects. For example, it’s trivial to use graphical tools to create a dynamically generated HTML table that displays every record in a database. Although that’s common with other tools, what’s unique is that creating such a table requires absolutely no typing – it’s just click, drag, and drop.
WOBuilder also makes it easy as drag & drop to control how information flows into an application. For example, it’s simple to create a Web page that contains an editable text field where the user can type her name. Upon pressing the page’s Submit button, WebObjects magically places the information exactly where the programmer wants it. All the response parsing, text decoding, object discovery, and actual copying of data is done for the programmer by the WebObjects framework, leaving the programmer free to concentrate on the application’s unique functionality.
The WebObjects intrusion into a page’s HTML is minimal: it adds only one start/stop tag pair for each component added to a page. The tag is a minimalist placeholder declaring a component’s existence and name. All other information necessary to the component’s task is stored in a separate "bindings" file.
Logic: Project Builder — Project Builder is a multi-language (C, C++, Objective C, and Java) Integrated Development Environment. It is industrial-strength, and is roughly comparable to Metrowerks’s CodeWarrior. Apple uses Project Builder to build large chunks of Mac OS X – it won’t stand in the way of a project, no matter how demanding its logic processing needs.
Each of these tools is impressive, but they’re written to work together. You can drag a database object from EOModeler to a Web page in WOBuilder. WOBuilder parses your Java code from your Project Builder project file and generates code for you. Double-clicking a model file or a Web component in Project Builder launches EOModeler and WOBuilder, respectively.
WebObjects Sore Points — I don’t want you to walk away from this article thinking WebObjects is all sweetness and light. First off, unlike an increasing number of tools, WebObjects is not free or open source (although Apple’s $700 flat pricing is considerably more appealing than the previous $50,000 license for unlimited connections). Nonetheless, this in itself can be a deal-breaker for many smaller organizations.
Although WebObjects demonstrations show how it can build working database-backed Web applications without any code, non-trivial use of WebObjects requires programming. And WebObjects has a very steep learning curve, even for experienced programmers. Although the Information Age’s design (which we examined in the first part of this article) separates interface, logic, and data, the WebObjects design breaks these basic concepts into hundreds of small classes which interoperate. Complexity is compounded by the fact WebObjects uses the framework model of application design, which requires programmers locate and override specific points of functionality to customize an application. WebObjects documentation is better than average, but it’s often unclear how to accomplish a particular task.
One feature WebObjects lacks that some other application servers offer is automatic session fail-over. That means an application can crash, and another application will transparently take over the user’s session. The user is unaware a crash even took place! The backup application could even be on another server altogether, so if a power supply failed, a redundant machine could take up the slack without interruption of service.
Although you can develop WebObjects applications on both Windows NT/2000 and Mac OS X (and Mac OS X Server 10), the tools on Windows have been left behind at version 4.5 and will not be updated. This is a serious blow for many WebObjects developers working within companies that do not allow the purchase of Apple hardware.
The recently released WebObjects 5.0, written entirely in Java, definitely feels like a "point-oh" release. You must enable the root account and then log into your system as root to install the software (you can disable root after the installation). Worse, there is no uninstall option – to remove WebObjects, you must wipe the drive. Some features of version 4.5 have mysteriously disappeared (like the FlatFile and LDAP data source adapters). The promised Linux deployment option hasn’t arrived, leaving only Mac OS X (and Mac OS X Server 10), Windows NT/2000, HP/UX, and Solaris as supported deployment platforms. EOModeler 5 often chokes on EOModeler 4.5 model files, and is generally easy to crash, taking unsaved changes with it. Unless you’re a veteran early adopter, I’d wait until Apple releases the first bug fix update before spending time and money on WebObjects 5.
Why WO is Me — WebObjects has its share of warts; nonetheless, I find the act of building an application using WebObjects almost pure joy. Once you get your mind wrapped around WebObjects fundamentals, you slip into a zone where you build pages in hours that would take days using other tools. The best way to describe it is that feeling you get driving a high-performance car though a curvy, tree-lined stretch of road. You appreciate the features of the machine that allow you to navigate quickly towards your ultimate goal.
[Jonathan "Wolf" Rentzsch is the embodiment of Red Shed Software, and runs a monthly Mac programmer get-together in Northwest Illinois.]