Make Poverty History - 2005 - Abolissons la pauvreté
Paying the bills with my mad programming skills...
Today | RSS | RDF | Atom | Other


... and so will pretty much everyone else in Canada.

The Canadian DMCA as recently tabled this week in the House of Commons will make criminals of us all. Share files online? Get ready to pay or go to jail. Unlocking the cell phone you paid for? Get ready to pay or go to jail. Encrypt your e-mail to have some semblance of privacy? Get ready to pay or go to jail. Buy a CD or DVD and then copy it to your iPod? Get ready to pay or go to jail.

The DVD player in my house is on a Linux-based computer that uses an open-source DVD player. Soon, everytime I watch a DVD (that I legally bought from a store and OWN) in my house I'll be committing a Federal crime.

Please help stop this insanity. Write your MP and join the Facebook group. I've done both - it takes two minutes.

Read more at Copyright for Canadians.

P.S. - Strike two, Mr. Harper.

A lot of people ask me for advice when they buy computers, or ask me for advice after they have already bought one when it's too late. "Windows, Linux, or Mac?" they say.

I say buy whatever you want - the OS is a total commodity. Apple probably makes the best ones, but you'll pay for it - almost double the cost of a PC. Don't believe me? Check this article out:

In unit sales, Macs represented 14 percent of sales last month, up from 9 percent for February 2007. The dollar share, however, is a full 25 percent of the market.

Yep, that means they are twice as expensive. I'll stick with Linux, thank you very much! All of the functionality with none of the price (or the proprietary bullshit).

One of the first things I'm trying to get going in 2007 is a way to be more productive while at the same time not losing my mind with all the stuff I have to do, which is the mental state that I'm in right now. I just finished reading a fantastic book on the subject, Getting Things Done, and have decided to get started with it. One of the key concepts of the approach is to have a place where all your projects and tasks are stored, and for me, it makes sense that that place be an electronic one.

I tried getting the GTD template for Lotus Notes going since I use Lotus Notes at work, but it didn't work out for me since I'm using a pre-Beta of the next version of Notes, Hannover, and I'm experiencing unrelated problems at the moment. I did some searching and found an application called Tracks that also might be able to help me out. I thought it was interesting because I had heard about it before and it was also based on Ruby on Rails, the so-called latest and greatest web development platform.

As it turns out, my first experience with Ruby on Rails has been pretty much brutal. As with all things geek-related, it's hard to install and use. Below what I did to get it going on my Fedora Core 4 web server, but VMMV. For the record, this document assumes you already have Apache and MySQL installed and running.

  1. Get Tracks and prepare it and your database

    I started with the installation manual and tried following the steps. First, download Tracks and unzip it where you want it to be stored. In my case, I'm keeping it in /srv.

    [root@eloise]# cd /srv
    [root@eloise srv]# wget http://www.rousette.org.uk/projects/files/tracks-1.043.zip
    [root@eloise public]# unzip tracks-1.043.zip 
    
    I like to make the whole folder owned by the webserver:
    [root@eloise srv]# chown -Rf apache:apache tracks-1.043
    
    Next, get your database set up.
    [root@eloise srv]#mysql -u root -p
        mysql> CREATE DATABASE tracks104;
        mysql> GRANT ALL PRIVILEGES ON tracks104.* TO yourmysqluser@localhost \
         IDENTIFIED BY 'password-goes-here' WITH GRANT OPTION;
    
    Copy the file config/database.yml.tmpl to config/database.yml, config/environment.rb.tmpl to config/environment.rb and log.tmpl to log.
    [root@eloise srv]# cd /srv/tracks-1.043/config
    [root@eloise config]# cp database.yml.tmpl database.yml 
    [root@eloise config]# cp environment.rb.tmpl environment.rb 
    [root@eloise config]# cd .. 
    [root@eloise tracks-1.043]# cp -rf log.tmpl log 
    
    Open the config/database.yml file, and enter your username and password details for the database you just set up under the 'production' and 'development' sections.
    [root@eloise tracks-1.043]# vi config/database.yml 
    
    Open the file config/environment.rb and look at the last line which should read: SALT = "change-me". Change the word change-me to something else of your choosing.
    [root@eloise tracks-1.043]# vi config/environment.rb 
    
    It's at this point that the default instructions pretty much fall apart for us Fedora Core users.

  2. Install Ruby and put it on Rails

    I found a great part of the well-written guide Installing Ruby on Rails with Lighttpd and MySQL on Fedora Core 4 that really helped me out. A lot of the steps below are based on it, except I am using Apache and not Lighttpd.

    First, install the necessary libraries:

    [root@eloise]# yum install ruby ruby-libs ruby-devel irb rdoc
    
    Looks simple, doesn't it? Well ... surprise! It's not! Now you have to download the "Ruby" platform installer and do a bunch of stuff from there:
    root@eloise]# cd /tmp
    root@eloise tmp]# wget http://rubyforge.org/frs/download.php/11289/rubygems-0.9.0.tgz
    [root@eloise tmp]# tar -zxvf rubygems-0.9.0.tgz
    [root@eloise tmp]# cd rubygems-0.9.0
    [root@eloise rubygems-0.9.0]# ruby setup.rb
    
    You should see a message like this:
     Successfully built RubyGem
    
    Now you can clean up and install Rails:
    [root@eloise rubygems-0.9.0]# cd ..
    [root@eloise tmp]# rm ruby* -drf
    [root@eloise tmp]# gem install rails --include-dependencies
    
    You should receive a message indicating that rails has been installed successfully.

  3. Set up Tracks

    Here's where we continue with the installation manual. It says to execute the following command in your tracks installation folder:

    [root@eloise tracks-1.043]# rake migrate
    
    Unfortunately for us, it's probably going to fail with a message similar to this:
    No such file or directory - /tmp/mysql.sock
    
    I had a look at the Debian installation guide and it had the fix there. What you need to go is edit the database.yml file again and add a reference for the MySQL socket file, which is in a different location in Fedora.
    [root@eloise tracks-1.043]# vi config/database.yml 
    
    What you want to do is add a "socket" line as follows for your development and production environments:
    development:
      adapter: mysql
      database: tracks104
      host: localhost
      username: yourdbusername
      password: yourdbpassword
      socket: '/var/lib/mysql/mysql.sock'
    
    production:
      adapter: mysql
      database: tracks104
      host: localhost
      username: yourdbusername
      password: yourdbpassword
      socket: '/var/lib/mysql/mysql.sock'
    
    Then, you can execute the migrate command again:
    [root@eloise tracks-1.043]# rake migrate
    
    Unfortunately (again), it's probably going to fail with a different error message:
    [root@eloise tracks-1.043]# rake migrate
    (in /srv/tracks-1.043)
    rake aborted!
    Mysql::Error: Lost connection to MySQL server during query: SELECT version FROM schema_info
    
    (See full trace by running task with --trace)
    
    Now, I'm not sure what I did to resolve this, but I think the basic thing was that there is some kind of version compatibility in the way MySQL stores privileges or passwords because of an upgrade I did in the past or something. I did a few things to get it going. First, I edited the /etc/my.cnf file and changed the old_passwords line:
    [root@eloise tracks-1.043]# vi /etc/my.cnf
    
    I commented out the previous line and created a new one with a different value:
    #old_passwords=1
    old_passwords=0
    
    That didn't seem to work so I tried to flush the privileges:
    [root@eloise tracks-1.043]# mysql -u root -p
        mysql> flush privileges;
        mysql> exit
    
    That didn't seem to work either so I executed a script that tries to resolve the problem:
    [root@eloise tracks-1.043]# mysql_fix_privilege_tables --password=yourdbpassword
    
    I restarted:
    [root@eloise tracks-1.043]# /sbin/service mysqld restart
    Stopping MySQL:                                            [  OK  ]
    Starting MySQL:                                            [  OK  ]
    
    Now I decided to overwrite the password for my database user just to make sure it was stored correctly:
    [root@eloise tracks-1.043]# mysql -u root -p
        mysql> SET PASSWORD for tracks@localhost=PASSWORD('yourdbpassword');
        mysql> exit
    
    I restarted and ran the script again, this time it seemed to work:
    [root@eloise tracks-1.043]# /sbin/service mysqld restart
    Stopping MySQL:                                            [  OK  ]
    Starting MySQL:                                            [  OK  ]
    [root@eloise tracks-1.043]# rake migrate
    

  4. Set up Apache

    To get it going in Apache, the easiest way is to create your own app-specific configuration file:

    [root@eloise tracks-1.043]# vi /etc/httpd/conf.d/tracks.conf
    
    Populate it as follows:
    Alias /youraliasname/ "/srv/tracks-1.043/public/"
    <Directory /srv/tracks-1.043/public/>
          Options ExecCGI FollowSymLinks
          AllowOverride all
          Allow from all
          Order allow,deny
    </Directory>
    
    You will notice that I used an alias because that's just how I roll. If you use an alias, you will have to modify the .htaccess file accordingly.
    [root@eloise tracks-1.043]# vi public/.htaccess
    
    Add this line around where the comments tell you to:
    RewriteBase /youraliasname
    

    The application should now be available for you to access at http://yourservername/youraliasname. That doesn't mean you can use it, though, 'cause it will probably be horribly slow!

    To try to fix this, you can change the environment to "production". By default, it's set to "development" which has a bunch of debugging stuff on that you don't need. To change it, edit the environment.db file:

    [root@eloise tracks-1.043]# vi config/environment.rb 
    
    Change the environment by changing the line as follows:
    ENV['RAILS_ENV'] = 'production'
    

    Now that you've tried again, you'll probably notice that it's still super slow. In that case, there's even more work to be done!

  5. Improve performance (slightly) with FastCGI

    First, you need to install the FastCGI development libraries and the Ruby FastCGI bindings.

    [root@eloise tracks-1.043]# cd /tmp
    [root@eloise tmp]# wget http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz 
    [root@eloise tmp]# tar -zxvf fcgi-2.4.0.tar.gz 
    [root@eloise tmp]# cd fcgi-2.4.0 
    [root@eloise fcgi-2.4.0]# ./configure 
    [root@eloise fcgi-2.4.0]# make 
    [root@eloise fcgi-2.4.0]# make install 
    [root@eloise fcgi-2.4.0]# cd ..
    [root@eloise tmp]# rm fcgi* -drf
    
    [root@eloise tmp]# wget http://sugi.nemui.org/pub/ruby/fcgi/ruby-fcgi-0.8.6.tar.gz
    [root@eloise tmp]# tar -zxvf ruby-fcgi-0.8.6.tar.gz 
    [root@eloise tmp]# cd ruby-fcgi-0.8.6 
    [root@eloise ruby-fcgi-0.8.6]# ruby install.rb config 
    [root@eloise ruby-fcgi-0.8.6]# ruby install.rb setup 
    [root@eloise ruby-fcgi-0.8.6]# ruby install.rb install 
    [root@eloise ruby-fcgi-0.8.6]# cd .. 
    [root@eloise tmp]# rm ruby-fcgi-0.8.6* -drf
    

    Now you need to get it going with Apache. I found a guide called Red Hat Enterprise Linux 4 + RT 3.4.2 + FastCGI 2.4.2 Install Guide that helped me get through figuring out how to install this. In order to compile the needed Apache module, you have to download the Apache development kit:

    [root@eloise public]# yum install httpd-devel
    
    Then, download and extract the module source:
    [root@eloise tmp]# wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.2.tar.gz
    [root@eloise tmp]# tar -xzvf mod_fastcgi-2.4.2.tar.gz
    
    You'll need to edit some files before you can compile.
    [root@eloise tmp]# cd mod_fastcgi-2.4.2
    [root@eloise mod_fastcgi-2.4.2]# cp Makefile.AP2 Makefile
    [root@eloise mod_fastcgi-2.4.2]# vi Makefile
    
    Change this line as follows to match up with the Fedora environment:
    top_dir      = /etc/httpd
    
    Then you can compile, install, and clean up:
    [root@eloise mod_fastcgi-2.4.2]# make
    [root@eloise mod_fastcgi-2.4.2]# make install
    [root@eloise mod_fastcgi-2.4.2]# cd ..
    [root@eloise tmp]# rm mod_fastcgi* -drf
    
    You need to make some directories available to the module for it to use:
    [root@eloise tmp]# mkdir /etc/httpd/logs/fastcgi
    [root@eloise tmp]# mkdir /etc/httpd/logs/fastcgi/dynamic
    [root@eloise tmp]# chown apache:apache /etc/httpd/logs/fastcgi
    [root@eloise tmp]# chown apache:apache /etc/httpd/logs/fastcgi/dynamic
    
    Now you need to set up the app to use FastCGI. First, edit .htaccess again:
    [root@eloise tmp]# vi /srv/tracks-1.043/public/.htaccess
    
    Comment out the existing line below and add your own to point to the dispatch.fcgi file:
    #RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
    RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
    
    Now, edit your tracks.conf file:
    [root@eloise tmp]# vi /etc/httpd/conf.d/tracks.conf
    
    You need to add a line to the top and to the bottom so the file reads as follows:
    LoadModule fastcgi_module modules/mod_fastcgi.so
    Alias /youraliasname/ "/srv/tracks-1.043/public/"
    
          Options ExecCGI FollowSymLinks
          AllowOverride all
          Allow from all
          Order allow,deny
    
    FastCgiIpcDir /tmp
    
    Restart the server:
    [root@eloise public]# /sbin/service httpd restart
    
    The restart will probably fail with an error like this:
    FastCgiIpcDir /tmp: can't create dynamic directory "/tmp/dynamic": access for se
    rver (uid -1, gid -1) failed: read not allowed
    
    I found a bunch of info on this page that helped. You'll need to make a directory that FastCGI just created accessible to it:
    [root@eloise public]# chmod 777 dynamic
    
    Now, restart Apache and you should be set!
    [root@eloise public]# /sbin/service httpd restart
    

You now have a fully functioning installation of Tracks that is somewhat fast but probably feels sluggish. You've also just wasted a couple hours of your time. The steps involved to get this going just amazed me. If anyone has any suggestions on a better way to do it, please let me know! What a huge pain in the ass!

It's been a long time, sweetie ...

Okay, okay, a very long time. Not only that, but I still don't feel like writing complete thoughts, so here's a bunch of point-form about the summer and what I've been up to:

  • Summer means Big Brother in the Burt household, and I've watching every season for almost seven years now. My lady Jedi Janie almost made it to the end, so I'm content with the way things went down. I really wish there was a Canadian version of this show, because I would seriously own it.
  • The 8th Annual GREAT CANADIAN CABIN PARTY was another success. The new hot tub at the cabin was a fantastic addition! Everyone was pretty lame, with most folks going to bed and getting up early, but at least I had an excuse - I found out later that I had a throat infection. This year I stayed at the cabin almost an extra week afterwards, but it was a brutal time because I spent most of the time in bed or eating ice cream.
  • As I mentioned earlier, I made the switch to Linux on each and every computer I use at work and at home, and I haven't looked back. Windows sucks.
  • I got a new laptop with gobs of RAM at work and it's pretty awesome. It has a huge battery and seemingly lasts forever. I do have one problem, though - the screen resolution is incredibly high (1400x1050). It gives me a new appreciation for web design, because lots of sites either look bad or are hard to read, and they are sometimes both.
  • The word of the summer was wedding.
    • I MC'd my buddy Janson's wedding, and it went like clockwork. We had a blast for the remainder of the reception as well. Good times.
    • Sofi and I drove all the way to Sundre, AB for my friend Christine's wedding. It was also good times. I went up early to Banff to meet up with Colby and Shannon and then later picked up Sofi at the airport in Calgary and we all had a great weekend in Sundre. It was super awesome to visit with lots of folks from Assiniboia and surrounding area that made it up for the wedding. I'm looking forward to our 10 year high school reunion next year!
    • We drove down to the Boodlini wedding in Carlyle in August and stayed at my sister's in Redvers in between the festivities. Not only was it quite possibly the coolest wedding I have ever been to, but we had a great time to match. How many weddings can you think of that involve gorilla suits, cookies, Angel Sombrutski, rave music, baseball games, hay rides, and mandatory shots at the receiving line. I can't begin to describe how fantastic every minute of it was - just perfect and a perfect reflection of the happy couple. I also got to ride in a combine for the first time in my life at my sister's b/f Clayton's farm. Small town Saskatchewan rules.
    • I just got back from an amazing week in Toronto that culminated in Nick's wedding to Allison. I am very proud to say that Nick asked me to be a member of his wedding party, and I accepted. He is a true friend, unlike some others that come to mind. I won't get into all the debauchery over the week, but sufficed to say, it was a good way to cap off the summer. I would, however, be remiss if I didn't mention a few vague keywords and highlights:
      • "What makes you think I won't cut you?" - fun with weapons
      • ...at Degrassi High!
      • Tryin'a catch me ridin' dirty!
      • "What's 'homer-red' mean?"
      • The glass floor
      • The Grey Goat
      • Boodlini pizza
      • Gibson's Finest
      • Hojo Aurora
      • Lunch with Candace in Greektown ... "Do you want to have Greek or ... Greek?"
      • The theme from "The Golden Girls"
  • I spent a lot of my spare time this summer work on a new website for CIPS Regina. It turned out okay and I'm pretty impressed with the CMS system we got going on the backend.
  • I bought a set of golf clubs and immediately improved my game by about twenty strokes. Too bad I likely won't improve much further ;)
  • I had an omnipresent feeling of unease all summer, and I'm not sure why. I think I'm over it now, though. The good news is that for me, unlike Blair, if something bad does happen to me, something twice as good will happen shortly thereafter. Speaking of Blair, his website is back up and running - you should have a look and leave him a nasty comment ... it's really fun.
  • I received my professional designation this summer, so I am now officially Derek Burt, I.S.P.
  • This summer was a pretty active one for me. I started running outdoors pretty seriously and was racking up some decent daily and weekly distance until I put my program on hold for holidays. I am getting X-rays soon for a possible stress fracture in my leg, but it hasn't stopped me running, playing soccer in the park, or playing slo-pitch with my work team. We had a great season weather-wise and I made the most of it.
  • Over the last four months or so I've had the opportunity to watch some decent movie movies:
  • "Interestingly, frequent Internet use is associated with a decline in local knowledge and interest in living in the local area." - I'll say. This summer I finally admitted to myself deep down inside that living in this province is starting to eat me up inside. I've lived in this province my entire life, and the grass keeps getting greener and greener everywhere else. There isn't a day that goes by that I don't think to myself that I live in a socialist wasteland of sloth and selfishness. Don't get me wrong, this is a fantastic place to live, but the economic, social, and physical safety we enjoy comes at a big price - our future. Hundreds of thousands of people have left this province, why haven't I?
  • I finally broke down and switched almost all my banking to PC Financial. It just got to the point where I couldn't take any more fees. The moment I switched I immediately saved $150 a year and they even gave me $10 just for setting up a payroll deposit. They also pay obscene amounts of interest. I used to be the biggest advocate of credit unions in the world, but now Conexus is so big they couldn't give a flying fuck about me or any other of their customers. It's amazing that after decades of loyalty they would treat me worse than most banks would if I just walked off the street. I still have my mortgage and car loan there, but eventually they will be gone, too. Why put up with impersonal service from them when I can go to a bank and get impersonal service for less?
  • My hair is way too long. It's insane.

P.S. - I might not have come back from the dead if it weren't for the many folks I ran into over the course of the summer, some I hadn't seen in literally years, who told me they keep up with me via this site, even if it's only once in a while. To you I say this: I write here because you don't call.

Why Windows takes so long to shut down

We all have been there. It is 4:55 and you want to get out of work...But you want to make sure your system is shutdown for the night. You dutifully close all of your applications and start shutting down

5 minutes later it *finally* powers off

If you happen to be using Windows and that ever happens to you, click on the link above to find out how you can get Windows to shut down in seconds instead of minutes.

H/T: Erik

Note: this tip no longer applies to me - I gave Windows the boot on my last remaining machine (my work laptop) a few weeks ago. I am officially Windows-free! :) If I could have gotten Windows to start in less than 10 minutes I might have kept it around longer ...

I had the e-mail below typed and ready to send when I re-read it one last time and realized that while I had tested some of my video cables when I first experienced the problem, I had not tested all of them. I did so and, sure enough, I found a cable that had gone bad. I replaced it with a new one today and - poof! - the system works just fine again.

To: mythtv-users@mythtv.org
Subject: dark picture on recordings from PVR-350
Date: Sat, 27 May 2006 18:55:53 -0600

Hi all,

When I am watching live TV or viewing recordings, the picture quality is very dark and somewhat blurry. This behaviour began sometime between May 13 and May 15, because when I bring up a list of recorded programs in MythWeb, the difference in brightness is quite obvious. When I play recordings recorded May 13 or earlier (or any videos, DVDs, etc.) the picture is bright and the quality is superb. If I watch live TV or a program recorded after May 14, the picture is dark and the resolution seems somewhat poor. I have tried plugging my input (a Bell ExpressVu standard def. satellite receiver) directly into the TV rather than through Myth and the picture quality is great.

I am using Fedora Core 4 with a PVR-350 for my input. I did not make any changes to the system; this behaviour seems to have happened on its own. I was previously running version 0.18.2.20051227-1 from atrpms which I installed in early January and made very little modification to the system after that, other than updating the kernel and IVTV drivers to 0.4.3.

The only thing I could find my logs from between May 13 and 15 that was anything other than regular log messages from my system was this:

DB Error (KickDatabase):
Query was:
SELECT NULL;
Driver error was [2/2002]:
QMYSQL3: Unable to execute query
Database error was:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

DB Error (KickDatabase):
Query was:
SELECT NULL;
Driver error was [2/2002]:
QMYSQL3: Unable to execute query
Database error was:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

DB Error (Error in JobQueue::GetJobCmd()):
Query was:
SELECT cmds FROM jobqueue WHERE id = 586;
Driver error was [2/2002]:
QMYSQL3: Unable to execute query
Database error was:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

DB Error (KickDatabase):
Query was:
SELECT NULL;
Driver error was [2/2002]:
QMYSQL3: Unable to execute query
Database error was:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

DB Error (KickDatabase):
Query was:
SELECT NULL;
Driver error was [2/2002]:
QMYSQL3: Unable to execute query
Database error was:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

DB Error (Error in JobQueue::ChangeJobComment()):
Query was:
UPDATE jobqueue SET comment = '3% Completed @ 37.382 fps.' WHERE id = 586;
Driver error was [2/2002]:
QMYSQL3: Unable to execute query
Database error was:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

It's my guess that there are settings somewhere related to the channel settings or to recording properties that create the poor quality picture, since I can still playback good quality recordings without any difficulty.

I recently upgraded to the latest *everything* about a week ago but while the system is running solid (including 0.19.20060121-2 from atrpms and the latest IVTV drivers), the picture quality is still terrible. I deleted and recreated the capture card, video sources, and input, but no luck. I have also played with the picture controls with MythTV and the IVTV drivers themselves with no luck. I am beginning to think the only way to solve this problem would be to re-create the entire box from scratch.

Can anyone point me in the right direction as to where I might start looking for a resolution to this problem? I've tried searching the lists and Googling but haven't found anyone describing these symptoms yet and I just don't know what to try next.

Thanks,

Derek

--

I am an idiot.

So I finally broke down and bought an iPod:

iPod Shuffle

Why did I buy one? Simple - I needed an MP3 player for the gym and saw a refurbished one on sale. I got all of the style without paying the Apple tax :)

One problem, though: most iPods need software called iTunes to work. iTunes, however, sucks. Any songs you buy from their store have DRM all over them, which means any songs you buy you don't really own:

  • Want to listen to your songs on anything other than your computer or an iPod without burning a CD? Too bad!
  • Want to edit or change any songs you purchased? Too bad!
  • Want to burn more than half-a-dozen copies of your favourite mix disc? Too bad!
  • Want to use Linux instead of chronically-insecure and virus-ridden Windows or chronically-expensive Mac OS X? Too bad!
  • Bonus: if your computer gets fried you can't just re-download all the songs you've already purchased, you get to pay for them all over again!

Now my iPod isn't perfect. It's like all the other iPods out there in that it won't play certain file formats from competing vendors, but it does play MP3s, which is all I need. It also has a special feature that other models of the iPod don't have: I don't need iTunes to use it! If you are like me and don't like to be forced into using software you don't want or need, then download the iPod shuffle Database Builder. It's easy to download, install, and use. Plus, you will feel good giving Apple the big FU.

P.S. - Did I mention that the Shuffle also doubles as a USB key that works with any operating system, so you can put other files on it, too? It does.