Never Type This As Root

I was working on a shell script this morning to make my life easier on some trivial task. The last few lines looked a little like this.

somedir=/mnt/tmp
mv $somedir/*.txt ~
rm -rf $somdir/*

Obviously I meant to remove all the files in the directory, however a typo in the variable name led to the deletion of /. I caught it before it got to the home folder, but bin and dev were gone resulting in a broken system that needed to be reinstalled.

Never delete * as root unless you are sure you know what you are doing….

UTF-8 Converter


The other day at work, I needed to batch convert about one or two hundred files formatted in MACROMAN format to UTF-8. Well, it turns out there is a command line utility to do just this called iconv. I was very pleased when I found that because it was going to save me a lot of time. Then I ran it and got confused. It turns out that iconv does convert text format, but it doesn’t write it back out to a file, it just spits the results back into the terminal window. Mildly frustrated, I decided to take matters into my own hands and write a script that would take the output and put it back into a file with the same name. These are the results:

#!/bin/bash

for f in $1/* ; do
o=`basename $f`
if file $f | grep Unicode ; then
cp $f $2
else
iconv -f MACROMAN -t UTF-8 $f >$2/$o
fi
done

I went further and added options,  a debug mode, verbose mode, and the like, and even a man page! The syntax is:

# roman_to_utf8 [options] <input> <output>

The input and output can be either directories or individual files.

#!/bin/bash

usage() {
echo Usage: $0 "[-v | --verbose] [-d | --debug] [-e | --encoding <encoding>] <input> <output>"
exit 1
}

VERBOSE=false
ENCODING=MACROMAN
DEBUG=false

while true; do
case $1 in
-v | --verbose) VERBOSE=true;;
-d | --debug) DEBUG=true;;
-*) echo "Bad option $1"; usage;;
*) break;;
esac
shift
done

SOURCE="$1"
DESTINATION="$2"

if [ $DEBUG = true ]; then
echo VERBOSE = $VERBOSE
echo SOURCE = $SOURCE
echo DESTINATION = "$DESTINATION"
echo ENCODING = "$ENCODING"
exit
fi

if [ "x$SOURCE" = x -o "x$DESTINATION" = x ]; then
usage;
fi

convert() {
INPUT="$1"
OUTPUT="$2"
FILENAME=`basename "$INPUT"`
if file "$INPUT" | grep Unicode ; then
cp "$INPUT" "$OUTPUT"
$VERBOSE && echo "Successfully copied $FILENAME"
else
iconv -s -f $ENCODING -t UTF-8 "$INPUT" >"$OUTPUT/$FILENAME"
$VERBOSE && echo "Successfully converted $FILENAME"
fi
}

if [ -d "$SOURCE" ]; then
for INPUT in "$SOURCE"/* ; do
convert "$INPUT" "$DESTINATION"
done
else
convert "$SOURCE" "$DESTINATION"
fi

exit

Please excuse the poor tabbing due to wordpress. In any case, it worked and saved me a ton of time. All you need to do is copy this script into a file and make it executable. Enjoy!

Chromium for Mac

So, I’ve stated how I feel about web browsers. Very few are devoid fatal flaws that bug me to the point of being unable to use them. To that end, I decided to take matters into my own hands by downloading and compiling my own version of Chromium.

As previously stated, Chromium has proven to be an excellent browser. It is minimal, functional, fast, expandable. The only issue I could find with it was it’s lack of conformity with the rest of Mac OS X in terms of handling selections in the location bar. The developers of Chromium decided to follow the convention of single click selects all in the location bar, following the cue of Internet Explorer. This however is contrary to the functionality of similar text fields in pretty much every other place in the Mac OS, including that of Safari. This incongruity was beyond my ability to cope, rendering the browser useless to me.

I pleaded my case, along with many others, at the Chromium developer forums, however they said it was a non-issue, and marked the bug as “WontFix.” So, I decided to make my own version with this deliberate behavior remedied. So I downloaded the source. 6.4 GB later I located the 6 offending lines of code, spent 1.5 hours making a cool Mac-themed icon, and spent 2.5 hours compiling on all 8 processors. The outcome? Success! Now, I will offer this for download, and as long as it continues to be usable and a good browser, Chromium  may very well replace FireFox for the first time in 10 years as my browser of choice.

© 2007-2015 Michael Caldwell