I recently wrote about how I dislike case insensitive file systems because they lead to sloppy coding. I have since found some more evidence.
Exhibit A. I decided to try Optimism to keep track of my RA symptoms. It wouldn’t run on my machine, which I tracked down to it asking for
Carbon.Framework when the file I have is
Carbon.framework. So, I pulled an Ivan, and opened it up in Emacs and lowercased it. Interestingly, the string
Carbon.framework was in there as well, so I don’t know exactly what was going on. Apparently it fixed the problem though and it now works fine. (Note to kids at home: Do not try to change strings in an executable unless you keep the exact same number of bytes in the string. In fact, unless you understood why I told you that, don’t do it.)
Exhibit B. I have been working a little on a Cocoa GUI for Sage and so I thought I would put together a binary distribution with the new GUI. I did so, but got feedback that it couldn’t copy onto a case insensitive filesystem. It turns out that during the build process
Singular is copied to
singular for convenience. They are exactly the same file, and on a case insensitive filesystem the copy will fail, but the desired effect is still there since it can be called as either
singular. This and a few similar things mean that it’s not possible to build on a case sensitive filesystem and run on an insensitive one or vice versa. To do this we would at least have to audit the code and see whether Singular is called as Singular, or singular and convert to one, potentially breaking people’s code at home.
If you ever find the man who thought case insensitive filesystems (or languages—I’m looking at you LISP, and you too AppleScript) let him know I have a bug with his name on it.
Read Full Post »
As you may know, Steam recently released an OS X version. This would probably not have prompted any immediate action on my part if it weren’t for the fact that, until May 24, Portal is free! Unfortunately, I was treated to the following dialog on launch:
Steam requires that /Applications/Games/Steam.app/Contents/MacOS be created on a case insensitive filesystem, with read-write access.
Really!? It seems very odd to me that case insensitivity would be a requirement for any semi-decently written program. I hope they get this fixed soon, but until then you can try what I did (though the instructions below come with no guarantee, blah blah blah). I have now successfully played Portal on my computer, so it works to some degree.
- Open Disk Utility and create a disk image (Cmd-Opt-N).
- Name it anything, say Steam-insensitive.
- For the name (of the mounted volume) I chose Steam.
- Make it large (games are big). You can resize later with hdiutil, but why?
- Keep the default Mac OS Extended (it’s case-insensitive).
- Keep the defaults No Encryption and Single Partition.
- I chose a sparse disk image so that it only take up as much actual disk space as is used on the image.
- Create the image.
- Mount the volume (double-click the disk image file).
- Copy Steam.app onto it the volume (named Steam in my case).
- Open Terminal.app and run the following (with appropriate changes if any).
# In case you ran Steam already...
rmdir ~/Library/'Application Support'/Steam
rmdir ~/Documents/'Steam Content'
# Case insensitive versions
ln -s /Volumes/Steam/$USER-app-support/ ~/Library/'Application Support'/Steam
ln -s /Volumes/Steam/$USER-steam-content/ ~/Documents/'Steam Content'
echo "Feel smug that you haven't sold your soul. Yet."
ln -s /Volumes/Steam /Volumes/steam
echo Shudder visibly
sudo ln -s /Volumes /volumes
echo Commit ritual suicide for such a hideous affront to nature
- For bonus points create an alias to Steam.app (Cmd-Opt-drag). This should mount the disk image and launch the application in one go.
- Launch Steam and enjoy.
I suspect it may be necessary to create the Steam -> steam link every time you login or shutdown. If so it sounds like a job for Folder Action Scripts!
If you still have problems, you may want to launch it from Terminal.app as
/Volumes/Steam/Steam.app/Contents/MacOS/steam.sh which is how I noticed that it was trying to create
//volumes [sic]. Of course, if you don’t know how to do that, then the clues it gives you may not mean much either.
Read Full Post »