Recently in Free/Open Source Software (F/OSS) Category

So you fell for Sandisk's marketing line about "supporting Linux." The full truth is they are Linux-tolerant and their device behaves well with Linux. Expect that you'll be doing a lot of the leg work on your own. I've pulled together resources I've found and created to put all the pieces in one place so you can at least start where I've left off.

Preparing your Fuze
First, update your firmware to the latest version and be sure you set your Fuze to connect in MSC mode.
From Fuze menu: Settings -> System Settings -> USB Mode -> MSC
(everytime you upgrade your Fuze you'll have to re-set the USB Mode.)

Re-labeling your Fuze
The VFAT label of your Fuze controls the name of the mountpoint when your Fuze is automounted at. It will be mounted in /media/VFAT_LABELNAME/ (/media/SANSA FUZE/ by default.) You can re-label the VFAT filesystem of your Fuze to eliminate the space character (an inconvenience), give your Fuze a more meaningful name, or give your Fuze a differentiating name if you use multiple Fuzes.

  1. You need to have the 'mtools' package installed and configure a .mtoolsrc file in your home directory.
    sudo apt-get install mtools

  2. run 'mount' and note the /dev/ name of your mounted Fuze (default will look something like "/dev/sdc on /media/SANSA FUZE type vfat") in this case "/dev/sdc" is the value to note, your device name may vary.

  3. Create a .mtoolsrc file in your home directory:
    gedit .mtoolsrc

    with the following contents:
    drive f: file="/dev/sdc"
    mtools_skip_check=1

    (please substitute your device name from step 2 above for "/dev/sdc" above when you type it in...)

  4. Then run the 'mlabel' command as root to re-label your Fuze:
    sudo mlabel f:

    You'll be prompted to create a new label, choose one without spaces, perhaps choose a unique label for if you use multiple Fuzes.

Content Management
I've configured scripts to replicate all (MSC) files from the Fuze (and microSD card on-board the Fuze) to my home directory on my primary computer. This creates a complete backup of all content on the Fuze (and microSD) and allows me to manage files either on the Fuze or to the local directory in my home directory. I can add songs into the directory on the computer when the Fuze is absent (left at work, etc.) and re-sync the files onto the Fuze when it is back at home...

This is done using a set of simple scripts calling the Unix rsync command to mirror two sets of files. It is very efficient and only transfers files that have changed, so even a large dataset transfers quickly if you've only changed a couple files. I

Example rsync script:
script goes here in the near future

Music
Not a lot to note here, the Fuze supports a wide range of music files from MP3, AAC, FLAC, OGG and seems to be fairly tolerant (I haven't seen any "Unsupported Media Format" errors for music files.)

Podcasts
Choose your favorite Podcatcher and point it at your /

FM Radio

Voice Recording

Slot Radio
I haven't sprung for a Slot Radio card yet (and I don't want to displace my microSDHC card) but I'm wondering what sort of DRM has been implemented on them. The marketing materials say you get 1,000 songs, but they play in a random (or at least randomized) order, you can skip forward but not backwards. Apparently you can add more media to the Slot Radio card if it has free space remaining.

Images
The Fuze will downsize your JPGs if you, but there's not much point in putting large .JPG files on your Fuze just to eat up storage. I prefer resizing the images appropriately before putting them on the Fuze. video4fuze is the easiest option for properly resizing images for display on the Fuze. (Note this is the same tool as the "Video" section below.)

Video
The Fuze is very strict about video. Deviating from the standard will result in "Unsupported Media Format".

The easiest general solution for Video currently is video4fuze which provides you a easy GUI interface to video transcoding (using mencoder). You can combine this tool with the rsync technique mentioned above to transcode videos offline, then sync onto your Fuze later.

Miscellaneous Useful Specs
From the owner's manual:
Screen resolution: 220x176

Notes:
3:2 aspect ratio = 219x146 or 171x114
4:3 aspect ratio = 220x165 or 176x132
16:9 aspect ratio = 208x117 or 176x99

Shortfalls:
There doesn't seem to be anyway to sort or arrange files using subdirectories (especially photos and videos.) You can create subdirectories, but the Fuze flattens the filespace out and sorts them all alphabetically.

I'm considering some different approaches to organizing my MP3s to make them easier to browse through. Sansa has a lot of room for improvement in this area.

My hardware:
  • Canon Rebel XTi (uses Compact Flash (CF) memory)
  • Inland USB multi-format SD/CF card reader ($12 at Micro Center)
  • Dell PowerEdge 1800 running Fedora Core 11
My goal is to start out with files like this on the Compact Flash card::
[CF Card]/dcim/102canon/img_9999.CR2
[CF Card]/dcim/102canon/img_9999.JPG
[CF Card]/dcim/103canon/img_0000.cr2
[CF Card]/dcim/103canon/img_0000.jpg
run the script, and end up with the same files, transferred to the server and renamed like this:
[server photo repository]/2009/200902/20090215/img_1029999.cr2
[server photo repository]/2009/200902/20090215/img_1029999.jpg
[server photo repository]/2009/200902/20090215/img_1030000.cr2
[server photo repository]/2009/200902/20090215/img_1030000.jpg
Removal of files from CF card is performed manually by the Format function on the camera, once I'm sure all the files have survived the trip from CF to hard drive.

The (re)naming convention assures unique file names for photos coming from my camera until I get to 10,000,000 photos. At my current rate of taking pictures, that would be several thousand years. It also allows me to easily manage my photos by year, month, or day (and eventually decade) as I choose.

I've written a script to automatically copy and rename my files from the CF card to an appropriate directory on the server when it is run.

#!/bin/ksh
startdir=`pwd`
cfsourcedir="/mnt/usb"

# make sure to use your device name here, check output of 'dmesg' \
# on your server with card reader connected.
cfdeviceid="/dev/sdc1"
canondir="${cfsourcedir}/dcim"
datepath="/photos/raw/`/bin/date +%Y/%Y%m/%Y%m%d`"

sudo umount $cfsourcedir

sudo mount $cfdeviceid $cfsourcedir
result=$?;

if [ $result -eq 0 ];then

   if [ -d $datepath ]; then
      echo "Directory $datepath exists"
   else
      mkdir $datepath
   fi
   #echo "canondir: $canondir"
   #echo "datepath: $datepath"

   rsync -az $canondir/* $datepath --stats --progress | \
   tee -a /tmp/loadfromcf.out
   cd $datepath
   for i in `find -type d |sed 's/^.\///g' |grep -v ^\.$`
   do
      cd $i
      directorynumber=`echo $i | sed 's/CANON//g' |sed 's/canon//g'`
      for j in `ls -1 *`
      do 
         k=`echo $j |sed "s/img_/img_$directorynumber/g" |\
   sed 's/IMG_/IMG_${directorynumber}/g' |sed 's/JPG/jpg/g' |sed 's/CR2/cr2/g'`
         mv $j ../$k
         chown speed:speed ../$k
         chmod 0544 ../$k
      done
      cd ..
      rmdir $i 
   done
fi

sudo umount /mnt/usb

if [[ $result = 0 ]];then
   grep -i Number /tmp/loadfromcf.out | tail -2
   pwd
fi
I've also contemplated modifying this script so it would automatically (cron) check for a CF card in the reader, then automatically start the copying process. If I make this modification, I'll post it here as well.

I'll be adding code/comments as I improve this script.

I've been working with variations of Unix for a long time now and thought I'd jot down some of my favorite tips and tricks. They are mostly OS/distribution/shell/language independent (unless I indicate otherwise...)

  1. Get rid of blank lines in a file
    grep . inputfile > outputfile
    This matches (and thus prints) only lines that contain some text, not blank (empty) lines.

  2. comm
    Many people never cross paths with the comm command, but it is very useful. I works similarly to diff, but outputs the contents of two compared files into three columns. The first column is content only in the first file, second column is content only in the second file, and third column is content that is in both files (matches between the two files.) While this may not seem useful at first, you can select which columns to output, so if you only want to know what is in both file1 and file 2 (column 2) you'd suppress columns 1 and 2, by running:
    comm -12 file1 file2
    Don't forget that your input files must be sorted.

  3. paste
    Systems administrators frequently use the cut command to parse files, but many people I run into have never used the paste command. The paste command will concatenate two files line by line (as opposed to file by file, like cat.)

  4. less instead of more
    This is not available on all Unix-based OSes, but the less command works very similar to more, but will let you move through a file forwards and backwards more easily. Want to jump to the end of the file, type Shift-G Depending on the version of less you are running, it will provide context highlighting when you search for a pattern.

  5. Jump to vi from more
    While paging through a file in more, press "v" to jump to editting the file in vi at the current position in the file.

  6. Jump to a line number when editing a file with vi
    vi +linenumber filename
    will open up the file with the cursor automatically moved down to the specified line. This is useful when you get an error that indicates "syntax error on line 2047." You can jump straight to the problem without fumbling around.

  7. Invisible characters become visible
    Sometimes you'll end up with carriage returns on each line in a file originally created on a DOS/Windows system, or filenames with spaces, tab, or other control characters in them, but you can't see them typically.
    The cat command provides three useful options -v, -e, and -t that will let you understand these invisible characters
    -v (displays non-printing characters)
    -e (prints a "$" at the end of each line to indicate a NL character)
    -t (prints "^I" for each Tab in the file)
    cat -vet filename |more

  8. Remove DOS ^M from ends of lines
    The "^M" characters are visible when editing in vi but here are two approaches to remove the characters.
    sed 's/<Ctrl-V><Ctrl-M>//g' -i filename

    or in vi: <Esc>:%s/<Ctrl-V><Ctrl-M>//g

If you ever do end up with me interviewing you, I'll likely work one or two of these into the discussion to explore your level of knowledge about Unix. If you need more information, remember: man pages are your friend.

About this Archive

This page is a archive of recent entries in the Free/Open Source Software (F/OSS) category.

Find recent content on the main index or look in the archives to find all content.