Archive for February, 2009

Aggregate Map Tools, Part 1: GlobalMapTiles

Thursday, February 26th, 2009

My fourth open source release this week comes from work I’ve done for my employer, The Bivings Group. Today, we are releasing a set of code that assists with aggregating markers on a Google Map. Our clients wanted to be able to display markers on a map reflecting the locations of people who provided their location (city, state, zip, and in some cases, street address), but with tens of thousands of expected sign-ups, it’s not feasible to display all the points on the map at once.


Week of Open Source Releases: xarfs 0.2

Wednesday, February 25th, 2009

This week’s third piece of software is xarfs, a proof-of-concept MacFUSE-based filesystem that mounts xar archive files as a read-only filesystem.

I wrote xarfs because I wanted an easy way to be able to inspect Mac OS X Installer package files, which as of Mac OS X 10.5, began to be xar archives. In particular, I wanted to be able to lsbom the package manifest in order to see what files were being modified. (In retrospect, it probably would have been easier, though less satisfying, to have written a simple tool that extracts only the package manifest and lists its contents.)

Although xarfs provides easy access to view the contents of a xar archive, it has some pretty significant limitations. Besides having a rather clumsy user interface, and presenting only a read-only interface to xar files, it handles large files spectacularly poorly, decompressing them entirely into memory regardless of how much of the file is being accessed. (This is a limitation in the xar API.) It’s also written in Objective C using MacFUSE’s framework. This rather limits its portability; an implementation using the regular FUSE API would probably allow xarfs to work on Linux.

If anyone’s interested in this, it’s probably possible to resolve some of its deficiencies and make it a lot more useful. Let me know if you find it helpful.

xarfs is licensed under the three-clause BSD license. For more information, or to download, see the xarfs page.

Week of Open Source Releases: slow 1.0

Tuesday, February 24th, 2009

The second piece of software I’m releasing this week is a unix command line tool called slow. Slow is a tool that makes it easy to cause another process to run slowly.

Slow does this by taking advantage of two signals, SIGSTOP and SIGCONT, which respectively stop and re-start a unix process’ execution.

I’ve used this tool to prevent long-running cpu-bound processes from consuming an entire cpu to improve performance of other processes on the machine. I’ve also used it to slow part of a two-part data import process where temporary data files could be created much faster than they could be processed and removed, running the risk of low disk space conditions.

Slow is released under the GPL v3. For documentation, more information, and download links for slow and its source code, please see slow’s web page.

Safari 4 beta and WebKit release analysis

Tuesday, February 24th, 2009

Earlier today, Apple released a beta version of Safari 4, with the version number 528.16.

As is common knowledge, Safari is based on the open-source WebKit rendering engine, which releases nightly builds. For reference, the current WebKit version is 520.1+.

Because WebKit is open source, using WebKit’s version history tracker, it’s possible to determine the following interesting information:

* The Safari-6528 branch was created on January 29th based on the state of the WebKit trunk at r40289, from January 27th.

* There have been 75 merges of code (presumably bug fixes) into the 6528 branch since then. The last of these merges was r41097 (merging r41091) on February 19.

* The release is tagged in WebKit svn as r41182, the/releases/Apple/Safari 4 Public Beta tag.

This means that the Safari 4 beta is based roughly on the state of WebKit as it was at the end of January, one month behind current development. Considering the importance of WebKit to Safari in general, and Mac OS X as a whole, a one month delay for QA purposes is probably pretty good.

Kudos to all of the people working on WebKit! Keep up the good work!

Week of Open Source Releases: Unlockupd 1.0.2

Monday, February 23rd, 2009

The first piece of software I’m releasing this week is an updated version of Unlockupd. Unlockupd is a Mac OS X daemon that works around a bug in lookupd, a system service which is required for proper operation of Mac OS X 10.0 – 10.4. If lookupd fails, the system quickly becomes unusable. Unlockupd periodically checks lookupd’s status and forces it to restart should it fail.

Fortunately, the bug has been fixed in Mac OS X 10.5, which does not have a lookupd service, but it was present in Mac OS X 10.3 and 10.4.

Unlockupd was first released in 2004, and it really should have been released under an open source back then. Better late than never, though. At this point, it’s really more of an historical relic than a useful program, but hopefully someone will find some use with the code.

More information is available on Unlockupd’s web page, including download links for Unlockupd and its source code. Unlockupd is licensed under the GPL v3.

New Blog

Sunday, February 22nd, 2009

Hi! I’m John Bafford, and welcome to my website.

Long overdue, this new website and blog are now live. I’ll be talking mostly about PHP and related technology — I’ve spent the last almost ten years writing PHP (and JavaScript) code, as well as a smattering of Perl, Python, and other languages, after many prior years writing in C/C++. Expect some Mac talk as well, on occasion.

To “celebrate” the new website, throughout this week, I’ll be doing a number of (in some cases, very belated) open source releases of some software I’ve worked on over the years. There will be a somewhat Mac focus to some of these releases, but even it you don’t have a Mac, hopefully, you’ll still find them interesting enough to follow along, and I’ll get to the PHP-related content soon enough.

If you have questions or comments, feel free to comment here, or send me an email from the feedback form via the button at the bottom of the page.