Archive for February, 2004

Subversion, Xcode projects, and Diffs

Saturday, February 28th, 2004

Subversion defaults to treating all files as text, including XML files, unless the mime-type of the file is not text/*. Unlike CVS, Subversion will not expand “magic keywords” unless you explicitly tell it to do so and, therefore, that Subversion may treat a binary file as text will not lead to eventual file corruption as it often does with CVS.

Xcode writes a user.pbxuser file into the project directory that contains many useful bits of information like the user’s window layout, breakpoints, custom executables and other information that isn’t shared across all users on the project.

Since the pbxuser file tracks window positions, file scroll positions, and other information that tends to change often, the differences between any two revisions of the pbxuser file tends to be large. In the context of automatic change notification emails, this tends to be really annoying in that it is this huge chunk of completely irrelevant noise that obscures the useful bits within the notification email. Given that pbxuser is XML, the changes between two revisions aren’t really readable in diff form anyway.

Easy fix: tell Subversion that the file is binary. This is simply a matter of setting the mime-type appropriately.

cd *.xcode
svn propset svn:mime-type application/octet-stream *.pbxuser
svn commit -m 'Set mime-type of pbxuser to application/octet-stream to binary.'

Once done, the diff will be reduced to one line indicating that the binary file changed. Subversion’s conflict resolution subsystem will continue to work as expected. See section 7.4.1 of RFC 1521 for the definition of the application/octet-stream mime type. It is basically just an arbitrary byte stream.

In other news, the SCPlugin now has a project page at Tigris. In the repository, one will find svnopendiff which appears to be a Subversion aware tool for opening differences in FileMerge.

iSeek a cocktail recipe

Friday, February 27th, 2004

If you happen to have iSeek installed, clicking on this link will add WebTender to iSeek’s set of sites.

Subversion for OS X

Tuesday, February 24th, 2004

Fred has built a set of Subversion 1.0 packages that can easily be installed on OS X. The packages include all the other random gack necessary to install both the client and server. That includes:

  • Apache HTTP Server (httpd)
  • Apache Portable Runtime (apr)
  • APR Utility Library (apr-util)
  • Berkley DB (db)
  • GD Graphics Library (gd)
  • GNU Privacy Guard (gpg)
  • expat (expat)
  • libxml (libxml)
  • Neon (neon)
  • PHP (php)
  • Subversion (subversion)
  • SWIG (swig)
  • TCP Flow (tcpflow)

All of the packages are tarballs and can be installed by doing something like:

cd /
sudo gnutar xfvzp swig-1.3.21.tgz

Fred Rocks! Thank you!

Fred’s public iDisk is named wsanchez. Alternatively, mount the URL

in Finder (which can also be added to favorites in the mount window).

A README file stating dependencies is included.

If someone were to want to write a Cocoa GUI for Subversion, I would recommend having a look at the Python bindings and possibly using PyObjC…. but that’s just me.

If you want to run subversion server, you’ll probably want to configure Apache 2.0 to run on a different port than 80 (say, 8080). Trivial. You’ll also want a block in your Apache config that looks something like:

<Location /svn>
DAV svn
SVNPath /my/svn/repos

### basic auth
#AuthType Basic
#AuthName "Subversion repository"
#AuthUserFile /my/svn/user/passwd/file

### separate read/write access
#AuthGroupFile /my/svn/group/file
#Require group svn_committers
#Require group svn_committers
#Require group svn_readers

Finally, if you don’t know what the hell Subversion is, read the book or the FAQ. It is a really well engineered piece of software and runs circles around CVS (not that that is saying much).

Subversion 1.0 Released

Monday, February 23rd, 2004

Subversion 1.0.0 is ready! Grab it from:

The MD5 checksums are:

32f2c6e8c7f97587f19275c4e3219363 subversion-1.0.0.tar.gz
ee14f19960c7fa9f2640ff04acdce804 subversion-1.0.0.tar.bz2

Subversion is the work of many volunteers from around the world. It
would be impossible to thank them all by name here, though they
certainly deserve it. If you see a Subversion developer, documenter,
or tester in the street, buy ’em a beer — they’ve earned it.

Thanks also to CollabNet, which started the Subversion project and
continues to pay for three (and sometimes four) full time developers.

Praise, blame, questions, and bug reports are all cheerfully accepted

-Karl Fogel

With this release, I will never choose to use CVS again (though I’m sure I’ll use CVS for years to come). Subversion is vastly superior to CVS.

If anyone is interested, I made a start at patching such that it can convert CVS repositories that use wrappers. It works mostly right for repositories that just have wrapped NIBs, but is less stable for those unfortunate repositories that wrapped resources whose inventory of contents changed regularly (EOModels). Additions aren’t a problem. Removed files are.


Sunday, February 22nd, 2004

I can make a mean margarita, can pull of a good G&{T,S} and can generally come up with something tasty given enough random fruit juices and some combination of Vodka, Tequila (none of that Cuervo crap), and/or Rum.

But, beyond that, I’m at a loss. Until now:

[The Webtender]
Search The Webtender drink database:

Advanced search |
Browse drinks |
Forum |

Reporting Bugs Redux

Sunday, February 22nd, 2004

I apologize for deleting the post and comments outright. The comments quickly turned in a direction where I could not comment without potentially ramming foot and leg down my throat. If I can find out anything more concrete, it will be posted.

Parking in Monterey Sucks!

Friday, February 20th, 2004

I hate it when I have an experience that leaves me feeling as if I have just been ripped off and there is not a thing I can do about it.

Today, we drove down to the Monterey Bay Aquirium with family that is in town for the weekend. Parking was, as expected, non-existant. Normally, I wouldn’t mind parking in a lot somewhere for some silly amount of money, but the house guests were not up for a lot of walking up and down hills.

As luck would have it, I found a metered spot close to the aquarium. After dropping $5 in quarters into the meter, it had 3 hours on it. We were at the aquarium for 2 hours.

Yet, when I got back to the car, there was a $25 ticket on the windshield and the meter was expired. The ticket was written up 30 minutes after I had dumped $5 into the meter.

I would like to believe that it is just a broken meter, but I can’t help but feel taken. Especially since a number of cars around where I were parked all had tickets, too. Except for a couple, both of which looked to be local (tags, stickers, etc… that would indicate a resident).

So, if you are going to Monterey, be careful where you park. Not that being careful will help. It is hard to predict that the meter next to your car will drop from 3 hours expired in less than 45 minutes.

Opening w/the Interface Builder team

Friday, February 20th, 2004

A recent posting (#2101931) on Apple’s job site:

Join the team responsible for Interface Builder–Apple’s industry-leading GUI Builder. We are looking for a motivated and experienced software engineer to continue improving Interface Builder pushing it in new and exciting directions. The chosen candidate needs to be capable of working on a large existing code base, and of helping to design and implement new functionality. Responsibilities will include supporting both the Cocoa and Carbon frameworks in Interface Builder.

If I wasn’t already working at Apple, I would jump on that one…

Good Design.

Thursday, February 19th, 2004

Apple is not the only company that understands that good design is a key part of creating great products.

The New York Times wrote a neat article documenting the evolution of the TiVO’s distinctive remote.

I have been a TiVo owner since September of 1999, not long after the TiVo was released. I can’t imagine watching TV without a TiVo. Correction, I simply don’t watch TV without a TiVo.

From the installation instructions to the on-screen User Experience to the implementation of the feature-set to the remote, the TiVo is just one really well designed, cohesive, product.

TiVo is also a company that has been a lot of fun to watch over the years. The company is one of the rare corporate entities that both knows how to produce good technology and survive in a very difficult business environment (not the dot-bomb stupidity, but dealing with the likes of the big media houses).

Clearly, TiVo has some big challenges ahead now that the cable companies are gradually adding PVR like functionality.

In any case, a hearty thanks to all involved in the TiVo’s design!

Crabs Revisited

Thursday, February 19th, 2004

Tonight, my wife and I decided to finally cook the leftovers from our V-Day Crab Feast. In particular, we decided to make crab cakes. As it turns out, crab cakes are not only incredibly easy to make, these particular crab cakes were really yummy, too.

Basic prep instructions. A bit imprecise because that’s just the kind of cook I am.

1. Cook some live crabs or otherwise obtain a bunch of crab meat

2. Refrigerate the meat for a day or two

3. Put 1 lbs+ of crab meat into a bowl

4. Toast 3 or 4 slices of good bread (we used whole wheat) and make fairly finely ground bread crumbs

5. Mix bread crumbs with:

– 5 or 6 eggs
– Old Bay Seasoning (or salt, if you don’t like Old Bay)
– Mustard Powder
– Worcestesire Sauce
– Fresh Parsley
– Mayonnaise
– White Pepper

6. Mix all of the above in with crab. Mix thouroughly. The end result should be a mixture that sticks together well (i.e. can be made into cakes). If it doesn’t stick, add more bread crumbs and eggs.

7. In a hot cast iron pan, add white wine (about 1/4″ or so), a quarter stick of butter and a bunch of fresh lemon juice. Let heat until the wine is barely boiling and all the butter is melted.

8. Make patties out of the crab, not too big, not too small.

9. Carefully put four or so crab patties in the pan

10. Cook until golden brown, dark brown (nearly burnt), in spots. It will take close to 10 minutes and the wine will be gone. The pan might even smoke a bit (turn down the heat, if it does!).


Worked for me.