April, 2008


15
Apr 08

Magic format changes; no more magic.mime

The problem with unofficial, de facto standards, like magic.mime? What happened late last month, when the Unix file(1) command development team, led by Christos Zoulas, released version 4.24, a minor revision that changes the entire magic format and no longer generates a magic.mime file.

Many programs rely on the magic format in order to identify a file’s MIME type (for example, returning “video/quicktime” for a QuickTime movie or “image/jpeg” for a JPEG image). With MIME detection being merged into magic.mgc, a compiled file, programs that rely on this functionality must be modified in order to use the latest changes.

According to Christos the new format yields more accurate results:

[N]ow mime detection is more precise as it depends on the full magic specification of each magic type, not just a single magic/offset.
—Christos Zoulas

And indeed, in testing this appears to be the case, e.g., MP4 videos are detected more often than they were in 4.23. But to use these latest changes, many developers must make system-level calls directly to the file command until extensions are updated.

The PHP extension Fileinfo, for example, is a thin wrapper around the library version of file (libmagic), but yet does not understand the new format. In PHP, calling the Unix file(1) command on a fast machine via exec() is about 16 times slower than using Fileinfo (0.128 seconds versus 0.008).

Of course, there is a standard specification, but neither file(1) nor Fileinfo use it, unfortunately.

Like this post? You might also like Coalmine, my centralized error tracking service for your apps. Coalmine captures errors and all kinds of helpful debugging information, notifies you, and makes it all searchable. Check it out!

14
Apr 08

Using Quick Look from the terminal

Leopard users know how useful Quick Look can be, but using it from the command line is harder than it should be. After looking at other people’s solutions, I decided to write my own.

#!/bin/bash

# ql(1)
#
# Quick Look command for terminal use

if [[ $# -lt 1 || $1 == '-h' || $1 == '--help' ]]; then
  echo -e 'Usage: ql [options] <file>'
  echo -e "\t-t\tForce text mode"
else
  if [[ $1 == '-t' ]]; then
    shift
    qlmanage -p -c public.plain-text "$@" >& /dev/null &
  else
    qlmanage -p "$@" >& /dev/null &
  fi
  pid=$!
  pid_in_use=1
  while [ $pid_in_use ]; do
    pid_in_use=`ps | awk '{ print $1 }' | grep $pid`
    read -sn 1 -t 1
    if [[ $? -eq 0 && $pid_in_use ]]; then # user quit via GUI
      kill $pid
      exit 0
    fi
  done
fi

Besides saving on typing, this script has a few other advantages over the qlmanage command:

  • It automatically returns the command line to you if you close Quick Look with the GUI (after a short delay)
  • You can force plaintext mode for text files that don’t have generators configured (for example, CSS files by default) with the -t option.
  • You can hit any key to close the Quick Look window.

Download ql here.

Like this post? You might also like Coalmine, my centralized error tracking service for your apps. Coalmine captures errors and all kinds of helpful debugging information, notifies you, and makes it all searchable. Check it out!

5
Apr 08

A match made in hell: Windows XP, Boot Camp 2.0, and NTFS

Feel like wasting several hours? Try installing Windows XP with Boot Camp 2.0 (the version released as part of Mac OS X 10.5 Leopard) using NTFS, the file system required for partitions larger than 32 GB. Then watch as it fails miserably, again and again.

Windows could not start because the following file is missing or corrupt:
<Windows root>system32hal.dll.
Please re-install a copy of the above file.

Sound familiar? You didn’t do anything wrong—this is actually Apple’s fault. Hal.dll, the “hardware abstraction layer”, doesn’t have any particular significance; it just happens to be the first file that Windows looks for as it’s loading. Attempting to replace this file with the copy on disk won’t work, and your boot.ini is probably fine.

So how do you fix it, then? The solution is a bit involved, but not too bad all things considered. Here are the steps:

  1. If you haven’t already removed the bad installation, you’ll need to do so. In OS X, open Boot Camp, click Continue, select “Create or remove a Windows partition”, click Continue, and then click Restore.
  2. Create a new partition as you did before, and start the installation.
  3. After the computer has rebooted and it’s booted from the CD, type “R” to go to the console. You should be dumped to the C: prompt.
  4. We’re going to reformat the drive as NTFS ourselves instead of letting the Windows installer do it. Type the following and hit Return:
    format c: /q /fs:ntfs

    Then type this to reboot the computer:

  5. Hold Option after it restarts, then boot to the Windows installation CD again (I believe it boots to the CD by default at this point, but this is just to be sure).
  6. Install to C: (be careful not to select your OS X volume!), but—and this is important—choose NOT to reformat. Leave the file system as is.
  7. Continue the installation process as you would normally.

That’s it! If things went well, the lovely 256-color Windows logo should load and you’ll be looking at Napa Valley in no time.

Like this post? You might also like Coalmine, my centralized error tracking service for your apps. Coalmine captures errors and all kinds of helpful debugging information, notifies you, and makes it all searchable. Check it out!