Archive for August 2004

Monday, August 30, 2004

BBEdit 8

BBEdit 8 is now shipping, and there are copious release notes, far too many to discuss. If I don’t mention one of the new features, it doesn’t mean that I dislike it (or that like it), just that I didn’t have anything in particular to say about it.

BBEdit’s interface, long derided as behind the times, has been re-done using Nib files, and it uses sheets and drawers—where they make sense—as well as the font panel. The spelling checker is now non-modal. Although under the hood the changes were likely major, on the surface the differences are minor. Overall, BBEdit 8 still feels like BBEdit, only better.

There is one major interface change, though: BBEdit can now open more than one document in the same window. This is similar to how Xcode and tabbed browsers work, and I’ve never really been a fan of this kind of interface. I think that’s because I’ve never seen it done right. BBEdit 8 gets it almost right, though, and as a result this feature has been growing on me. I often have many different documents open in BBEdit, from different projects, and grouping them into a few windows makes them easier to manage. There’s less overhead than in using BBEdit’s File Groups, and as a result I am using the Documents drawer more often. The main problem is that the resulting window arrangements are too ephemeral. They should be saveable, along with the palette positions, in Workspaces, or else someone should write an AppleScript that saves and restores window states. Also, I can’t tab into the Documents drawer; I have to click in it, which almost defeats the purpose of type-selecting.

Codeless Language Modules are here at last. There is already a module for Apache Configuration Files. BBEdit still uses its code-based language modules for most of the built-in languages, and so it kind of offers the best of both worlds: speed and accuracy for the common and difficult-to-parse languages, and easy extensibility for languages with standard tokenization. However, we’re not quite there yet, because the codeless language modules are a little under-powered. They don’t support regular expressions so, for example, the Apache module can’t color the pseudo HTML tags. Only one set of keywords is supported per language. And there is no way to take advantage of BBEdit’s existing language modules, e.g. to embed your new language (or one of the built-ins) into HTML. Language modules are still limited to coloring and the function pop-up; there is no language-sensitive indentation or navigation assistance, as in Emacs.

Other notes:


The move to Subversion was pretty smooth (though I haven’t yet switched to Trac), and I am in general very happy with it. I was finally able to do some folder and file restructuring, which I had been putting off because of CVS.

One of my favorite features of Subversion is that it stores checksums of each revision of each file in the repository. It can actually verify the contents of the repository, and I’ve written a little shell script to do this regularly. Sounds pretty basic, but I’ve had problems with parts of CVS repositories going bad, and not noticing until months afterwards.

In order to speed up network operations, Subversion keeps pristine copies of the checked-out files in its .svn/text-base folder. When you commit a file, it sends the database the differences between the pristine file and the one that you’re checking in. It seems like this could lead to repository corruption if the pristine copy gets damaged, but Subversion protects against this by not letting you check in a file if its pristine copy has the wrong checksum.

The one snag I ran into is that the default settings of cvs2svn corrupted some of my Localizable.strings files and that I was later unable to check in changes to these files. When committing, I would get this error message:

Transmitting file data .svn: Commit failed (details follow):

only Subversion wouldn’t print any further details. The problem was that, by default, cvs2svn sets the svn:eol-style property on text files, and that it thought my UTF-16 .strings files were text. From now on, when I use cvs2svn, I will invoke it with these options:

cvs2svn --no-default-eol --keywords-off --cvs-revnums

Wikipedia Defense

Morbus Iff:

There are just as many sites out there that don’t have disclaimers on them, yet are used for reference far more often than not.…I’d much rather be able to correct an error right now then to contact a supposedly or admittedly authoritative site, inform them of an error, and receive no response, lackluster hubris, or worse yet, blanket acceptance

SpamSieve 2.2

SpamSieve Icon SpamSieve 2.2, released last week, includes many improvements.

Monday, August 23, 2004

Java Regex Speed

Tim Bray:

There are all sorts of variations around I/O and so on, but my finding is that for this problem, the Java 1.4.2 regex processing is somewhere around twice as fast as Perl 5.8.1. Frankly, I’m astounded.

Friday, August 20, 2004

Fixing Bugs

Brent Simmons discusses NetNewsWire 2.0 and mentions that he prefers fixing bugs:

This, luckily for me, is my favorite part of software development. I enjoy fixing bugs much more than I enjoy adding big new features, probably because I can fix a bunch of bugs in a few hours. It’s like eating chocolates throughout the day instead of eating one big steak once a week.

MD5 Collision

Ned Batchelder:

Looks like the venerable MD5 cryptographic hash has developed a crack: A real MD5 collision. A team has published two different input streams which hash to the same MD5 value. Of course, because of the pigeonhole principle, everyone knew this had to happen. But no one had ever found a pair before.

Update (2024-03-22): Marc Stevens (via Hacker News):

Here is a 72-byte alphanum MD5 collision with 1-byte difference for fun[…] This is the first md5 collision with only printable ascii that I know of.

David Buchanan (via Hacker News):

The image in this tweet displays its own MD5 hash.


This was particularly tricky to make work because the image data in a PNG needs to have a valid adler32 checksum, and a valid crc32 checksum.

Thursday, August 12, 2004

Subversion and Apache

Adam Swift writes about how to set up a Subversion server using Mac OS X’s Apache (via Bill Bumgarner). I opted instead for the simpler client installation, and for the past week or so I’ve been getting ready to migrate to Subversion. It’s a rather involved process, because cvs2svn requires a newer version of Berkeley DB than ships with Mac OS X, and newer Python bindings to go with it. CVSTrac doesn’t work with Subversion, so I will simultaneously switch to Trac, which is considerably more complicated to install and has no import script for CVSTrac.

Wednesday, August 11, 2004

WordPress Search Results

Raena shows how to make WordPress search results more user-friendly.

Monday, August 9, 2004

Parrot Implementation Notes

Dan Sugalski has posted annotated slides from his recent Boston ACM talk.

Monday, August 2, 2004

The Early History of Smalltalk

Lambda links to a scan and an HTML conversion of Alan Kay’s paper, written while he was at Apple.

Sunday, August 1, 2004

ATPM 10.08

The August issue of ATPM is out.