Archive for September 2004
The Software Concepts Group of Xerox Palo Alto Research Center (PARC) has been working on the problem of how to give users access to large amounts of computing power. We have concentrated our efforts on the study of software systems, rather than on the creation of specific hardware packages. Our method has been to develop a software system called Smalltalk, to create applications in that system, and then, based on our experiences developing the applications, to design the next system. We have developed and used three major Smalltalk systems over the last 10 years, as well as a few minor variations.
There are lots of changes. The most interesting to me are:
- “Convert to ASCII” is now available on the Text menu, as well as a Text Factory action.
- The window menu now lists the individual documents contained in a multi-document window on a hierarchical sub-menu from the main window’s entry.
- The algorithm for aging saved document state has been modified such that you won’t be likely to notice it happening. (To keep storage requirements and performance at reasonable levels, aging still occurs, but is unlikely to be noticeable except in pathological circumstances.)
- When “Search Invisible Folders” is turned off for multi-file searching, folders whose names begin with a period (.) are now skipped.
I’ve been using the NetNewsWire beta for a few days now, and I think it’s excellent. It’s interesting how NetNewsWire 2 and PulpFiction both persist old posts, but they store the data in completely different ways. MarsEdit, the new external blog editor, seems well done but doesn’t really excite me. For whatever reason, I’m happy just entering my posts using BBEdit and Safari.
Carsten Blüm’s free BBClick is a handy utility that lets you pull down BBEdit’s function pop-up or marker pop-up using the keyboard. (It does this by simulating a mouse click.) Once the menu is activated, you can navigate it using the arrow keys or by typing the first few letters of the function or marker name.
Trac was inspired by CVSTrac, and is similar to it in many ways, but there are also differences. CVSTrac tickets have Description and Remarks fields. When you edit one of these, the new version of the field replaces the old version, and CVSTrac saves the old version and displays it below. Trac has a single Description field, and you cannot edit it, only append new comments. Generally, this means you must read through more of the ticket history to figure out what needs to be done before the ticket can be closed. Some of the other fields don’t line up, either, but it was easy enough to use the sqlite tool to attach both databases and migrate all the ticket data that I cared about.
Installing Trac, while not difficult, is a pain. You have to build and install multiple Python packages and edit Apache’s config file to feed Trac some paths that it needs. Users and permissions are handled using an .htaccess file, which is fine, but for some reason I have to re-enter my login information between sessions. Support for multiple projects isn’t built-in, but requires more Apache rewrite rules. Likewise, where CVSTrac has a series of Setup pages in the browser, configuring similar options in Trac entails using the trac-admin command-line tool.
On the plus side, Trac has much nicer-looking Web pages. It colors code and displays diffs well, and it’s easy to tweak the fonts by editing the CSS files. The reports are more configurable.
I ran into two problems with Trac. First, in various places it doesn’t URL-encode the names of files in the repository. I have lots of files whose names contain #, and these weren’t accessible using Trac’s Subversion browser until I made some quick changes to Href.py.
Second, I kept getting errors where either (a) Trac didn’t have permission to access the repository, or (b) after using Trac, Subversion claimed that the repository was damaged. The problem was that I modify the local repository using the svn and svnadmin tools, running as user mjt. Trac accesses the repository through Apache, running as www. It seems that even reading from the repository requires write access, and new database log files in the repository weren’t being created with the proper permissions.
The solution was to use NetInfo Manager to create a new svn group, with mjt and www as members. (For some reason, I wasn’t able to use this group with chgrp until after restarting.) I assigned all the files in the repository to this group, and set the set-GID bit on the repository’s db folder. In addition, each process accessing the repository must have the proper umask. To make this happen, it was necessary to modify trac.cgi and use trampoline svn and svnadmin scripts. All this ensures that new database files in the repository get the proper ownership and permissions.
The Daily WTF is a snarky collection of those pearls of bad programming we all encounter from time to time. They’ve got one per day, covering a broad range of real-life abominations against the coding commandments.
Then you play with it, and just before the reality of It’s just Webmail sets in, you get six invites. Why six? I don't know, maybe seven is a magical GQQ Posse number.
OCMock is a new framework for testing Objective-C code using mock objects. Its trampoline-based interface is extremely simple:
- A trampoline records the message to expect, and the mock later checks to see whether your test code caused the same message to be sent to it. (It doesn’t seem to check the order or number of the messages, and unfortunately messages with non-object arguments don’t seem to be supported.)
- Using two trampolines, you can add a stub method to your mock object and set its return value.
From the user’s perspective, OCMock is not really any better than EasyMock (for Java), and it has considerably fewer features. However, it does fill a need in Objective-C, and it is a good example of what you can do in that language with relatively few lines of code.
Nat! shows how to use manual IMP caching to quickly send the same messages to heterogeneous objects in an array. He demonstrates this technique by implementing a faster autorelease pool class.
Certainly schools should teach students how to write. But due to a series of historical accidents the teaching of writing has gotten mixed together with the study of literature. And so all over the country students are writing not about how a baseball team with a small budget might compete with the Yankees, or the role of color in fashion, or what constitutes a good dessert, but about symbolism in Dickens.
The BBC is producing a new series of radio shows of the Hitchhiker's Guide to the Galaxy with most of the familiar actors
The September issue of ATPM is out.
- The Candy Apple: Integration Is Kind of Sneaky
- The Desktop Muse: This Song Belongs to You and Me
- Machine Language: Almost Just As I Predicted, Sort Of
- About This Particular Web Site
- Cartoon: Cortland
- Cartoon: iTrolls
- Desktop Pictures: Renderings
- Review: DEVONnote 1.0b
- Review: Hardware Hacking: Have Fun While Voiding Your Warranty (book)
- Review: iRac
- Review: MicFlex
- Review: The Spam Letters (book)
- Review: Tactile Pro
- FAQ: Frequently Asked Questions