Category: tools

Bulk process RAW image files

Recently I had to convert about 250 RAW image files to PNGs. For neatness, I wanted to convert the upper-case filenames the camera assigned with a lower-case name.

A little bash script-fu is all it took:

clean_pics.sh

#!/bin/bash
# Extract from SD Card
for i in /Volumes/SDCARD/DCIM/100ND40X/DSC_0*; do
 filename=$(basename "$i")
 lower_file="$(echo $filename | tr '[A-Z]' '[a-z]')"
 # verify it doesn't already exist
 newfile="${lower_file%.*}.png"
 echo -e "Processingnt$i tont$newfile"
 if [[ -e $newfile ]]; then
  echo "****SKIPPING"
 else
  convert "$i" "$newfile"
 fi
done

echo -e "Detoxing..."
find . -iname "*.png" -exec detox "{}" ;

echo "Procedure complete."

(“SDCARD”, etc is the path to the source files)

Once the script was up and running, it took about 1/2 hour to process all the files. Meanwhile, I was off doing something else!

How to prevent duplicate directories in your path

Forest Path image
What happens with the Path

The path is set via a myriad of config files. It is very easy to accidentally add the same directory to the path, and there is no built-in mechanism to bash/zsh from preventing this situation.

While duplicate entries generally have no impact on performance, they do make reading and editing the path more difficult. If you need to remove a directory from the path, you may miss removing the duplicate(s), resulting in unexpected behavior.

Easy Fix

The easiest fix is prevention, which can be accomplished by using a function to add directories to the path.

Throughout your shell’s configuration files, you may see things like:

export PATH=/fizz/buzz:$PATH

This line appends /fizz/buzz to the PATH, which is separated from the other directories by a colon (:). The $PATH is the variable of the existing path.

Finally, the export command ensures the PATH variable changes are available after the configuration file finishes executing.

Directory-Adding Function

Edit your /etc/bashrc to make the function available to all accounts on your machine, or ~/.bashrc to make it available only for your account. Add this function:

pathmunge () {
  if ! [[ $PATH =~ (^|:)$1($|:) ]] ; then
    if [ "$2" = "after" ] ; then
      PATH=$PATH:$1
    else
      PATH=$1:$PATH
    fi
  fi
}

Now you can call this function wherever you need to add a directory to the path and it will add it only if it doesn’t already exist on the path. There are two ways to do this, depending upon where you want to add the directory.

Insert at the beginning of the path

To add a directory to the beginning of the path (directories are searched in the order they appear in the path):

pathmunge /path/to/dir

Append to the end of the path

To add a directory to the end of the path, you add the after keyword:

pathmunge /path/to/dir after

Cleanup

Go through your configuration files and update every line that adds directories to the path to use  pathmunge instead.

⚠️ Caveat: only add one directory at a time, otherwise you may end up with duplicates.

export PATH=/foo/bar:/fizz/buzz:$PATH

❌ Don’t:

pathmunge /foo/bar:/fizz/buzz

✅ Do:

pathmunge /foo/bar
pathmunge /fizz/buzz

Note: other shells use other files; be sure you know what you’re doing before you go around mucking with these, especially the files in the /etc directory!

Technique credit: Sam Halicke and Christopher Cashell at Serverfault.

Updated 2025.02.13 – cleaned up and made some minor corrections.

Installing Internet Explorer on Mac

Edit (2014-07-11): Fixed URLs

When you need to develop/design a solution for the majority of corporate users, you will need to test it on Internet Explorer. If you have a Mac, setting this up on your machine is easy.

The original source for this information was OSXDaily. I cleaned it up and added additional information.

Intended Audience

TerminalIf you’re unfamiliar with using the terminal, these instructions will not help you. The point is to allow you to install Internet Explorer on Mac for the purposes of testing and developing web applications and sites. Ideally, you are one of the following:

  • Web Developer
  • Web Designer
  • QA Tester

If you plan on running Internet Explorer for other purposes (such as working with an IE-only site), then this is probably not the best solution for your needs.

Required software

  1. Oracle VirtualBox
  2. curl (from Mac Ports or other)

Procedure

Be aware, this process can take HOURS to do, may crash in the middle and cause you to start over, take up inordinate amounts of disk space, etc.

Install IE7 Only

curl -s https://raw.githubusercontent.com/xdissent/ievms/master/ievms.sh | env IEVMS_VERSIONS="7" bash

Install IE8 Only

curl -s https://raw.githubusercontent.com/xdissent/ievms/master/ievms.sh | env IEVMS_VERSIONS="8" bash

Install IE9 Only

curl -s https://raw.githubusercontent.com/xdissent/ievms/master/ievms.sh | env IEVMS_VERSIONS="9" bash

Install IE7, 8 and 9

curl -s https://raw.githubusercontent.com/xdissent/ievms/master/ievms.sh | bash

Notes

Once you have the virtual machines installed, fire them up, set up the Windows instance (install drivers, etc.), then take a snapshot. This is the one you will always use.

When you get a ‘you must activate’ notice, open a Windows cmd line and run

slmgr –rearm

You can rearm two times before it won’t work anymore. At that point, roll back to your snapshot and you can rearm again when you get the message. Obviously, when you roll back to your snapshot all changes will be discarded (that’s the point), so make sure you save any data on your host’s drive.

FAQ

Q. Where is the command line on my Mac?
A. It is not recommended that you use these instructions; instead try another solution such as Apple Boot Camp.

Q. How do I install/uninstall Oracle Virtual Box?
A. You can try looking for information on the Oracle Virtual Box website or contact the Genius Bar at your local Apple Store for assistance.

Q. Where are the windows snapshots stored?
A. In ~/.ievms/

Q. The download stalls or crashes.
A. If it stalls, check your internet connection; you may have to restart the install. In the event of a crash, examine the error message to determine the cause of the problem.

Q. Can you just install it for me?
A. Sorry, no.