<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sector 930</title>
	<atom:link href="http://www.sector930.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sector930.com/blog</link>
	<description>EVERYBODY WRITES, NOBODY QUITS.</description>
	<lastBuildDate>Fri, 13 Aug 2010 13:34:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Into the Void</title>
		<link>http://www.sector930.com/blog/2010/08/12/into-the-void/</link>
		<comments>http://www.sector930.com/blog/2010/08/12/into-the-void/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 02:59:59 +0000</pubDate>
		<dc:creator>Joseph</dc:creator>
				<category><![CDATA[930posts]]></category>
		<category><![CDATA[Fun Stuff]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.sector930.com/blog/?p=1772</guid>
		<description><![CDATA[I really wanted to make a &#8220;we can&#8217;t stay here, this is bat country&#8221; reference in this post, but I didn&#8217;t want to piss Edwin off and I&#8217;m falling a little short. The first thing I remember was the light. &#8230; <a href="http://www.sector930.com/blog/2010/08/12/into-the-void/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I really wanted to make a &#8220;we can&#8217;t stay here, this is bat country&#8221; reference in this post, but I didn&#8217;t want to piss Edwin off and I&#8217;m falling a little short.</p>
<p>The first thing I remember was the light.</p>
<p>It wasn&#8217;t bright or blinding, like one would expect from the desert sun; it was cool and blue.  My head buzzed with questions and the remnants of the previous evening.  Where had I gone?  What had I done?  My memories were clouded by drink, a hodgepodge of flashing lights, ringing bells, and spotty memories of recalling the TCP/IP stack.</p>
<p>I glanced out the window from my hotel bed, then looked at the clock on my phone.  5:30.  I sat up, groaned, my head in a funk.  I remembered the drinks, the Cisco party &#8211; a plate full of spring rolls, sushi, and fried shrimp &#8211; and another 3 gin and tonics.  Life seemed so good then.  Zombie pirates.  Free food.  Free drinks.  A Cisco dogtag swung freely around my neck as I stood up.  It had been the five nines of uptime.</p>
<p>And now&#8230;system failure.  The drunk screen of death.</p>
<p>I went to the bathroom and looked in the mirror, still in my boxers.  I felt like a fraud.  What did I know?  The 7 layers of the OSI model?  The difference between star-hub and token ring?  RARP?  Child&#8217;s play.  I rinsed my face and shuffled back into the room.  I picked up my phone and started looking through SMS logs and my &#8220;sent mail&#8221; folder.  Shit.  Resigned to the damage, I cleared them away.  Today would be a new day &#8211; it was registration day for DEFCON.  It was 5:45; I scrambled to find some gym shorts and quietly left the hotel room.</p>
<p>I needed to flush my cache, and there was a drugstore across the street with a wall of sports drinks.  Down in the hotel lobby, I snaked my way through the casino floor.  Vegas takes its gloves off in the wee hours of the morning.  The cheerful dings and dongs of slots, video poker, and auto-roulette screeched a devil&#8217;s chorus; the victims still hanging from the limbs of the one-armed bandit.  Shaking, drunk, it would only take one more quarter.  One more bet.  You can look for whatever you want here, but you can&#8217;t deny seeing the wasteland.  I had a headache.  I had to get out.  When I did, I found the air outside to be cool and dry.  The streets were soulless, empty.  I inhaled deeply and walked to the deserted Walgreens.  I bought a large bottle of gatorade and a two-pack of asprin  before downing it all  on the spot.  I went back and bought two more large bottles of the stuff.  Back in the hotel, I fell back asleep, headache fading, hoping it was just a bad dream.</p>
<p>When I awoke, it was almost time to leave.  The headache was back, and my stomach pained.  We took a taxi to the faded &#8220;North Strip&#8221; about a mile away.  More wasteland here.  The Riviera &#8211; or &#8220;Riv&#8221; &#8211; looked like it was on Vegas death row.  It had aged beyond its years, and stood out like an antique among the other, newer properties.  Our taxi rumbled its way past the Riv and began a descent into the hacker underworld.</p>
<p>Here, underneath the relic from a better past, was the reason we&#8217;d come.  DEFCON.  The lower level doors slid open with a hydraulic hiss and we pushed our way through a seemingly endless crowd of technists on the casino floor.  A quick glance at some of the t-shirts, and you knew this wasn&#8217;t your standard &#8220;Women in Red Hats&#8221; party.  The &#8220;I void warranties&#8221; shirt on the lanky kid with the goggles and long hair, the &#8220;I &lt;3 My Geek&#8221; shirt on a young woman who looked terribly out of place, and the &#8220;NINJA&#8221; shirt over a 40-pound cheetos belly.  It was a pretty impressive mix of people.  Young, old, men, more men, young men, the awkward 16-year-old MIT kid, also male, and the occasional girl-next-door in a corset.  No, really.</p>
<p>And then, of course, there were the &#8220;GOONS.&#8221;  A Goon at DEFCON is basically an official, something of a cross between a police officer, a malignant dictator, and Dennis Nedry.  The Goons wore red shirts which clearly disclosed their position of power, and they loved to yell at people.  I don&#8217;t really know what it takes to become a Goon, but I imagine the training program consisting of watching THX 1138 and making fart jokes &#8211; they were that distinctive.  In fact, I imagine you could tell who the Goons were even if they weren&#8217;t wearing GOON shirts, because they&#8217;d be the only ones wearing Camelbaks and Boonie hats indoors, while sweating as if they were out in the desert sun.  Goons are basically like mom and dad leaving the house and saying &#8220;while we&#8217;re gone, you&#8217;re in charge,&#8221; except it&#8217;s to the little brother with too many legos.</p>
<p>After enduring watching some Goons yell at some unsuspecting plebian, I scoped out the registration line.  It wrapped around the back of the hotel, almost swinging outside into the sweltering parking lot.  Sam and Charlie, who apparently do not feel the effects of MASSIVE quantities of alcohol as I do, said they wanted to hit the buffet for breakfast.  I considered it, still feeling woozy from the night before, before looking at the sign on the wall which finally convinced me.</p>
<div id="attachment_1773" class="wp-caption alignleft" style="width: 610px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/08/photo.jpg"><img class="size-full wp-image-1773 " title="finedining" src="http://www.sector930.com/blog/wp-content/uploads/2010/08/photo.jpg" alt="Yeah, I bet." width="600" height="450" /></a><p class="wp-caption-text">Yeah, I bet.</p></div>
<p>So, there I was, at the back of the line, iPhone low on battery, waiting it out.  I met a couple of guys in line who were pretty cool &#8211; a guy who was in the same shape (mentally) as I was at the time, a lanky, over-energized network engineer, and his cute  wife, who had a tattoo on her chest that screamed &#8220;hey, look at my chest, there is a tattoo on it.&#8221;</p>
<p>The line went by more quickly than I thought.  Sam and Charlie, full of powdered eggs and soylent green, met me back up at the front of the line.  We were still in a daze, but managed to work our way to the registration desk, where we got our infamous DEFCON badges, marking the beginning of our voyage to the void of the nerd.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sector930.com/blog/2010/08/12/into-the-void/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DEF CON: The story so far</title>
		<link>http://www.sector930.com/blog/2010/07/30/def-con-the-story-so-far/</link>
		<comments>http://www.sector930.com/blog/2010/07/30/def-con-the-story-so-far/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 05:35:24 +0000</pubDate>
		<dc:creator>Sam</dc:creator>
				<category><![CDATA[930posts]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[def con]]></category>
		<category><![CDATA[drinking]]></category>
		<category><![CDATA[vegas]]></category>

		<guid isPermaLink="false">http://www.sector930.com/blog/?p=1749</guid>
		<description><![CDATA[Night 0 Our planes landed close to 2300 Pacific Daylight Time, and we took a Town Car straight to our hotel, the Treasure Island. Even though we were all exhausted, we decided to venture out for some food. For some &#8230; <a href="http://www.sector930.com/blog/2010/07/30/def-con-the-story-so-far/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>Night 0</h3>
<p>Our planes landed close to 2300 Pacific Daylight Time, and we took a Town Car straight to our hotel, the Treasure Island. Even though we were all exhausted, we decided to venture out for some food. For some reason, a strange girl invited Joe to say hello to her friend because it was her 21st birthday. Now he&#8217;s in their pictures.</p>
<p>We finally retired after 0100 PDT, which for us was 0400 EDT.</p>
<h3>Day 1</h3>
<p>We woke up from our jetlag comas and caught the view from the hotel. Sadly, it is not of the strip.</p>
<div id="attachment_1752" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/07/IMG00067.jpg"><img class="size-medium wp-image-1752 " title="Treasure Island View" src="http://www.sector930.com/blog/wp-content/uploads/2010/07/IMG00067-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Yes, that is a Trump tower.</p></div>
<p>While Edwin was at his fancy Black Hat conference, Joe, Charlie, and I killed time by soaking up skin cancer rays and blowing perfectly good money on slot machines. Then we blew even more money on lunch.</p>
<div id="attachment_1751" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/07/IMG00068.jpg"><img class="size-medium wp-image-1751 " title="Vegas Sandwich" src="http://www.sector930.com/blog/wp-content/uploads/2010/07/IMG00068-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">This sandwich cost me $15.</p></div>
<p>After Edwin was done being professional, we rested up for a night out.</p>
<h3>Night 1</h3>
<p>It all started with a drink called the Zombie Pirate. Two of them. Some even had three. We shouted to each other about work, women, and Ron Paul. We toasted the Old Dominion, Las Vegas, and Ron Paul. Amazingly, we did not get kicked out of the bar.</p>
<div class="wp-caption aligncenter" style="width: 310px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/07/DSC00065.jpg"><img title="Zombie Pirate" src="http://www.sector930.com/blog/wp-content/uploads/2010/07/DSC00065-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">There were three different types of rum in this bad boy, including 151.</p></div>
<p>After thoroughly getting smashed, we stumbled over to a Cisco private party. Somehow Edwin and his work buddy managed to talk their way in, and luckily for us, it had an open bar and catered hors d&#8217;oeuvres. We went from smashed to hammered and back to smashed again.</p>
<p>While there, we got a front row seat to the bizarre pirate show with accompanying laser lights and hip hop music. Then we hung out at the party and hotel casino and bars before retiring to our rooms.</p>
<p>THE END</p>
<p><strong>Update:</strong> The night was pretty wild. Joe stripped down to his underwear, found a guitar from Lord-knows-where, and tried to pick up chicks. One of those chicks wasn&#8217;t happy:</p>
<div id="attachment_1765" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/07/DSC00060.jpg"><img class="size-medium wp-image-1765" title="Vegas Guitar" src="http://www.sector930.com/blog/wp-content/uploads/2010/07/DSC00060-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Just kidding, we found this on the strip while walking around.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.sector930.com/blog/2010/07/30/def-con-the-story-so-far/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>No, DynDNS, you&#8217;re on your own</title>
		<link>http://www.sector930.com/blog/2010/07/24/no-dyndns-youre-on-your-own/</link>
		<comments>http://www.sector930.com/blog/2010/07/24/no-dyndns-youre-on-your-own/#comments</comments>
		<pubDate>Sat, 24 Jul 2010 15:46:37 +0000</pubDate>
		<dc:creator>Joel</dc:creator>
				<category><![CDATA[930posts]]></category>
		<category><![CDATA[dyndns]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[marketing]]></category>

		<guid isPermaLink="false">http://www.sector930.com/blog/?p=1691</guid>
		<description><![CDATA[I came back from vacation the other day to one of the funniest vendor emails I&#8217;ve ever received. DynDNS, a free Dynamic DNS provider, sent me a request for a survey with the subject &#8220;C&#8217;mon, seriously, help us help you.&#8221; &#8230; <a href="http://www.sector930.com/blog/2010/07/24/no-dyndns-youre-on-your-own/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I came back from vacation the other day to one of the funniest vendor emails I&#8217;ve ever received. <a href="http://www.dyndns.com/">DynDNS</a>, a free Dynamic DNS provider, sent me a request for a survey with the subject &#8220;C&#8217;mon, seriously, help us help you.&#8221; If that&#8217;s not bad enough, they went on to accuse me of ignoring them (which is hilarious since they hardly send me emails at all) and then declared the obvious fact that they&#8217;re bad at communicating with their customers. </p>
<p>Honestly, DynDNS if this is how you&#8217;re going to word your emails from now on I&#8217;m not surprised your communication skills are poor. I also noticed that every link that was posted (including the youtube and twitter plugs) routed through a 3rd party marketing firm, SendLabs, which just told me that DynDNS probably had little involvement with this email anyway. So no, Dyn, Inc., I will not be helping you and if you&#8217;d like to communicate with me as part of our vendor-customer relationship; please write me an email yourself and not through a marketing firm. They&#8217;re not cool and did an atrocious job. </p>
<div id="attachment_1729" class="wp-caption aligncenter" style="width: 645px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/07/dyndns_can_suck_it.png"><img src="http://www.sector930.com/blog/wp-content/uploads/2010/07/dyndns_can_suck_it.png" alt="" title="dyndns_can_suck_it" width="635" height="696" class="size-full wp-image-1729" /></a><p class="wp-caption-text">You're not that funny</p></div>
<p>[<a href="http://marketer.sendlabs.com/display.php?M=14631746&#038;C=d4e5354b136396868206c1e37e583fc1&#038;uid=298&#038;S=5932&#038;L=1447&#038;N=3158">Source email</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sector930.com/blog/2010/07/24/no-dyndns-youre-on-your-own/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Steam Summer Sale: The Aftermath</title>
		<link>http://www.sector930.com/blog/2010/07/04/steam-summer-sale-the-aftermath/</link>
		<comments>http://www.sector930.com/blog/2010/07/04/steam-summer-sale-the-aftermath/#comments</comments>
		<pubDate>Sun, 04 Jul 2010 19:54:16 +0000</pubDate>
		<dc:creator>Sam</dc:creator>
				<category><![CDATA[930posts]]></category>
		<category><![CDATA[Gaming]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[Steam]]></category>
		<category><![CDATA[summer]]></category>
		<category><![CDATA[vacation]]></category>

		<guid isPermaLink="false">http://www.sector930.com/blog/?p=1664</guid>
		<description><![CDATA[Now that the dust has settled, the children have stopped weeping, and we&#8217;ve started the process of replacing our soiled underpants, let&#8217;s take a look at the damage I suffered through the Steam Perils of Summer Sale. June 23 &#8211; &#8230; <a href="http://www.sector930.com/blog/2010/07/04/steam-summer-sale-the-aftermath/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Now that the dust has settled, the children have stopped weeping, and we&#8217;ve started the process of replacing our soiled underpants, let&#8217;s take a look at the damage I suffered through the Steam Perils of Summer Sale.</p>
<ul>
<li>June 23 &#8211; Counter-Strike: Source, $6.80 (Even though this occurred before the sale, the game went for the same price during the sale a few days later)</li>
<li>June 24 &#8211; Commandos Pack, $5.09 (This went a few days later for $3+change. Damn you Steam!)</li>
<li>June 24 &#8211; FarCry, $6.69</li>
<li>June 24 &#8211; RollerCoaster Tycoon 3: Platinum, $10.19</li>
<li>June 25 &#8211; Aliens vs. Predator Classic 2000, $1.25</li>
<li>June 28 &#8211; Oddworld Pack, $2.50</li>
<li>June 28 &#8211; Operation Flashpoint: Dragon Rising, $4.50</li>
<li>June 29 &#8211; Grand Theft Auto IV, $4.99</li>
<li>July 1 &#8211; Grand Theft Auto: San Andreas, $3.74</li>
<li>July 1 &#8211; Bioshock, $4.99</li>
<li>July 1 &#8211; X3: Gold, $10.19</li>
<li>July 1 &#8211; Thief: Deadly Shadows, $2.99</li>
<li>July 2 &#8211; Star Wars: Empire at War Gold, $4.99</li>
<li>July 2 &#8211; Day of Defeat: Source, $2.49</li>
<li>July 2 &#8211; Tropico 3, $7.49</li>
<li>July 3 &#8211; World of Goo, $5.00</li>
<li>July 3 &#8211; Freedom Force Pack, $1.87</li>
<li>July 4 &#8211; Borderlands DLCs, $10.17 (I missed these on July 2, which made me very sad. Luckily they lowered the price again!)</li>
</ul>
<p>Grand Total: $95.93 (!). Maybe I went a little overboard, but considering the amount of games I got, I think I did pretty good.</p>
<p>Most of this I did while I was at the beach. Heaven knows when I&#8217;ll actually be able to play these games. I have a bathroom to rebuild. Some of the other Sector 930 members bought a lot of these, too, along with other games that I didn&#8217;t buy. Hopefully we can add some of these to our Game Night™ rotation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sector930.com/blog/2010/07/04/steam-summer-sale-the-aftermath/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Look Mom, I contributed to society</title>
		<link>http://www.sector930.com/blog/2010/06/28/look-mom-i-contributed-to-society/</link>
		<comments>http://www.sector930.com/blog/2010/06/28/look-mom-i-contributed-to-society/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 20:27:02 +0000</pubDate>
		<dc:creator>Sam</dc:creator>
				<category><![CDATA[930posts]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[iTunes]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://www.sector930.com/blog/?p=1642</guid>
		<description><![CDATA[Before I head to the beach for the rest of the week (I won&#8217;t be at Game Night™), I thought I would unleash unto the world some code I wrote a while back. My brothers and I like to share &#8230; <a href="http://www.sector930.com/blog/2010/06/28/look-mom-i-contributed-to-society/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Before I head to the beach for the rest of the week (I won&#8217;t be at Game Night™), I thought I would unleash unto the world some code I wrote a while back. My brothers and I like to share a modest music library. I encoded my library in Apple&#8217;s AAC format using iTunes, while my brothers wanted everything to be in MP3 format to be able to play it on their portable devices. So I wrote a Perl script to combine the powers of <a href="http://www.audiocoding.com/faad2.html">faad</a>, <a href="http://lame.sourceforge.net/">lame</a>, and <a href="http://sourceforge.net/projects/id3v2/">id3v2</a>. I set up a cron job to run this script every night.</p>
<p>Basically, it makes a copy of a directory structure, converting the M4A files to MP3, and it also uses the same modify times. Before converting each file, if there is already an existing MP3, it compares the modify times of each file. If the M4A is newer, it performs the copy.</p>
<p>Use at your own peril.</p>
<pre>#!/usr/bin/perl

###############################################################################
#
# aac2mp3.pl
#
# usage: aac2mp3.pl &lt;aac_dir&gt; &lt;mp3_dir&gt;
#
# This script will convert a directory full of AAC files (with .m4a extension)
# into MP3 format. You will need to have faad (AAC decoder), lame (MP3
# encoder), and id3v2 (ID3 tag editor) installed for this to work. The script
# assumes the structure of the directory is of the form "Artist/Album/Track",
# as if you had let iTunes organize your music. The script will preserve the
# following tag information: Title, Artist, Album, Year, Composer, Genre,
# Track Number out of Total Number of Tracks, Disc Number out of Total Number
# of Discs, and Album Artist.
#
###############################################################################

use strict;
use File::stat;

my $aac_dir = $ARGV[0];
my $mp3_dir = $ARGV[1];

mkdir $mp3_dir unless (-e $mp3_dir);

# open the main music directory containing the AAC files
opendir(my $musicdir, $aac_dir);
my @artists = grep(!/^\./, readdir($musicdir));

foreach my $artist (@artists) {
    # open the artist's directory
    opendir(my $artistdir, "$aac_dir/$artist");
    my @albums = grep(!/^\./, readdir($artistdir));

    foreach my $album (@albums) {
        # open the album's directory
        opendir(my $albumdir, "$aac_dir/$artist/$album");
        my @tracks = grep(/.*\.m4a/, readdir($albumdir));

        foreach my $track (@tracks) {
            convert_track($artist, $album, $track);
        }

        closedir($albumdir);
    }

    closedir($artistdir);
}

closedir($musicdir);

###############################################################################
# Convert a track from AAC/MP4/M4A to MP3.
# arguments:
#   artist - the directory name containing the artist's albums
#   album - the subdirectory name containing the artist's album's tracks
#   track - the filename for the track to be converted
###############################################################################
sub convert_track {
    my ($artist, $album, $track) = @_;
    my $filename;
    my $tag_options;
    my $dirname = "$aac_dir/$artist/$album";
    chdir $dirname or die "Can't cd to $dirname\n";

    $filename = $track;

    # First we check to see if the MP3 exists and is not older than the M4A

    # Get the track's modification and access times
    my $aac_stat = stat($filename) or die "stat error: $!: $filename\n";
    my $mtime = $aac_stat-&gt;mtime;
    my $atime = $aac_stat-&gt;atime; # We use this when setting the MP3's times

    $filename =~ s/\.m4a/\.mp3/g;
    my $mp3file = "$mp3_dir/$artist/$album/$filename";

    # Check the mp3's mod time, and skip if not older than the m4a
    if (-e $mp3file) {
        my $mp3_stat = stat($mp3file) or die "stat error: $!: $mp3file\n";
        return if ($mtime &lt;= $mp3_stat-&gt;mtime);
    }

    # Here we convert the track if the MP3 does not exist or is older

    print "Converting $dirname/$track\n";

    $track = quotemeta($track);

    `faad -q -o /tmp/fifo.wav $track`;
    #`faad -o /tmp/fifo.wav $track`;

    # print a message if there has been an error
    print "faad error: $artist/$album/$track: $?\n" if $?;

    my %tag = get_tag($track);

    # We have to set up the directories for the mp3 files
    $dirname = "$mp3_dir/$artist";
    mkdir $dirname unless (-e $dirname);
    $dirname = "$mp3_dir/$artist/$album";
    mkdir $dirname unless (-e $dirname);

    chdir $dirname;
    $track =~ s/\.m4a/\.mp3/g;

    `lame -S -V 2 -b 192 -h /tmp/fifo.wav $track`;
    #`lame -V 2 -b 256 -h /tmp/fifo.wav $track`;

    # print a message if there has been an error
    print "lame error: $artist/$album/$track: $?\n" if $?;

    # set up the tag for the new mp3 file
    `id3v2 --song "$tag{'title'}" $track`;
    `id3v2 --artist "$tag{'artist'}" $track`;
    `id3v2 --album "$tag{'album'}" $track`;
    `id3v2 --year "$tag{'date'}" $track`;
    `id3v2 --TCOM "$tag{'writer'}" $track`;
    `id3v2 --genre "$tag{'genre'}" $track`;
    `id3v2 --track "$tag{'track'}/$tag{'totaltracks'}" $track`;
    `id3v2 --TPOS "$tag{'disc'}/$tag{'totaldiscs'}" $track`;
    `id3v2 --TPE2 "$tag{'album_artist'}" $track`;

    # set the mp3's modification and access times to the same as the m4a's
    utime $atime, $mtime, $filename or die "utime error: $!: $filename\n";

    `rm /tmp/fifo.wav`;
}

###############################################################################
# Get a track's tag information. The function assumes you are already in the
# directory that contains the track.
# arguments:
#   filename - the filename for the track; assumed to be fully escaped
###############################################################################
sub get_tag {
    my ($filename) = @_;
    my %tag = ();

    # We have to open a pipe to get the info because faad displays it on stderr
    open (PIPE, "faad -i $filename 2&gt;&amp;1 |");

    while (&lt;PIPE&gt;) {
        if (/^title: (.*)$/) {
            $tag{'title'} = $1;
        }
        elsif (/^artist: (.*)$/) {
            $tag{'artist'} = $1;
        }
        elsif (/^album: (.*)$/) {
            $tag{'album'} = $1;
        }
        elsif (/^genre: (.*)$/) {
            $tag{'genre'} = $1;
        }
        elsif (/^track: (.*)$/) {
            $tag{'track'} = $1;
        }
        elsif (/^totaltracks: (.*)$/) {
            $tag{'totaltracks'} = $1;
        }
        elsif (/^disc: (.*)$/) {
            $tag{'disc'} = $1;
        }
        elsif (/^totaldiscs: (.*)$/) {
            $tag{'totaldiscs'} = $1;
        }
        elsif (/^date: (.*)$/) {
            $tag{'date'} = $1;
        }
        elsif (/^album_artist: (.*)$/) {
            $tag{'album_artist'} = $1;
        }
        elsif (/^writer: (.*)$/) {
            $tag{'writer'} = $1;
        }
    }

    return %tag;
}</pre>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;"><p>#!/usr/bin/perl</p>
<p>###############################################################################<br />
#<br />
# aac2mp3.pl<br />
#<br />
# usage: aac2mp3.pl &lt;aac_dir&gt; &lt;mp3_dir&gt;<br />
#<br />
# This script will convert a directory full of AAC files (with .m4a extension)<br />
# into MP3 format. You will need to have faad (AAC decoder), lame (MP3<br />
# encoder), and id3v2 (ID3 tag editor) installed for this to work. The script<br />
# assumes the structure of the directory is of the form &#8220;Artist/Album/Track&#8221;,<br />
# as if you had let iTunes organize your music. The script will preserve the<br />
# following tag information: Title, Artist, Album, Year, Composer, Genre,<br />
# Track Number out of Total Number of Tracks, Disc Number out of Total Number<br />
# of Discs, and Album Artist.<br />
#<br />
###############################################################################</p>
<p>use strict;<br />
use File::stat;</p>
<p>my $aac_dir = $ARGV[0];<br />
my $mp3_dir = $ARGV[1];</p>
<p>mkdir $mp3_dir unless (-e $mp3_dir);</p>
<p># open the main music directory containing the AAC files<br />
opendir(my $musicdir, $aac_dir);<br />
my @artists = grep(!/^\./, readdir($musicdir));</p>
<p>foreach my $artist (@artists) {<br />
# open the artist&#8217;s directory<br />
opendir(my $artistdir, &#8220;$aac_dir/$artist&#8221;);<br />
my @albums = grep(!/^\./, readdir($artistdir));</p>
<p>foreach my $album (@albums) {<br />
# open the album&#8217;s directory<br />
opendir(my $albumdir, &#8220;$aac_dir/$artist/$album&#8221;);<br />
my @tracks = grep(/.*\.m4a/, readdir($albumdir));</p>
<p>foreach my $track (@tracks) {<br />
convert_track($artist, $album, $track);<br />
}</p>
<p>closedir($albumdir);<br />
}</p>
<p>closedir($artistdir);<br />
}</p>
<p>closedir($musicdir);</p>
<p>###############################################################################<br />
# Convert a track from AAC/MP4/M4A to MP3.<br />
# arguments:<br />
#   artist &#8211; the directory name containing the artist&#8217;s albums<br />
#   album &#8211; the subdirectory name containing the artist&#8217;s album&#8217;s tracks<br />
#   track &#8211; the filename for the track to be converted<br />
###############################################################################<br />
sub convert_track {<br />
my ($artist, $album, $track) = @_;<br />
my $filename;<br />
my $tag_options;<br />
my $dirname = &#8220;$aac_dir/$artist/$album&#8221;;<br />
chdir $dirname or die &#8220;Can&#8217;t cd to $dirname\n&#8221;;</p>
<p>$filename = $track;</p>
<p># First we check to see if the MP3 exists and is not older than the M4A</p>
<p># Get the track&#8217;s modification and access times<br />
my $aac_stat = stat($filename) or die &#8220;stat error: $!: $filename\n&#8221;;<br />
my $mtime = $aac_stat-&gt;mtime;<br />
my $atime = $aac_stat-&gt;atime; # We use this when setting the MP3&#8242;s times</p>
<p>$filename =~ s/\.m4a/\.mp3/g;<br />
my $mp3file = &#8220;$mp3_dir/$artist/$album/$filename&#8221;;</p>
<p># Check the mp3&#8242;s mod time, and skip if not older than the m4a<br />
if (-e $mp3file) {<br />
my $mp3_stat = stat($mp3file) or die &#8220;stat error: $!: $mp3file\n&#8221;;<br />
return if ($mtime &lt;= $mp3_stat-&gt;mtime);<br />
}</p>
<p># Here we convert the track if the MP3 does not exist or is older</p>
<p>print &#8220;Converting $dirname/$track\n&#8221;;</p>
<p>$track = quotemeta($track);</p>
<p>`faad -q -o /tmp/fifo.wav $track`;<br />
#`faad -o /tmp/fifo.wav $track`;</p>
<p># print a message if there has been an error<br />
print &#8220;faad error: $artist/$album/$track: $?\n&#8221; if $?;</p>
<p>my %tag = get_tag($track);</p>
<p># We have to set up the directories for the mp3 files<br />
$dirname = &#8220;$mp3_dir/$artist&#8221;;<br />
mkdir $dirname unless (-e $dirname);<br />
$dirname = &#8220;$mp3_dir/$artist/$album&#8221;;<br />
mkdir $dirname unless (-e $dirname);</p>
<p>chdir $dirname;<br />
$track =~ s/\.m4a/\.mp3/g;</p>
<p>`lame -S -V 2 -b 192 -h /tmp/fifo.wav $track`;<br />
#`lame -V 2 -b 256 -h /tmp/fifo.wav $track`;</p>
<p># print a message if there has been an error<br />
print &#8220;lame error: $artist/$album/$track: $?\n&#8221; if $?;</p>
<p># set up the tag for the new mp3 file<br />
`id3v2 &#8211;song &#8220;$tag{&#8216;title&#8217;}&#8221; $track`;<br />
`id3v2 &#8211;artist &#8220;$tag{&#8216;artist&#8217;}&#8221; $track`;<br />
`id3v2 &#8211;album &#8220;$tag{&#8216;album&#8217;}&#8221; $track`;<br />
`id3v2 &#8211;year &#8220;$tag{&#8216;date&#8217;}&#8221; $track`;<br />
`id3v2 &#8211;TCOM &#8220;$tag{&#8216;writer&#8217;}&#8221; $track`;<br />
`id3v2 &#8211;genre &#8220;$tag{&#8216;genre&#8217;}&#8221; $track`;<br />
`id3v2 &#8211;track &#8220;$tag{&#8216;track&#8217;}/$tag{&#8216;totaltracks&#8217;}&#8221; $track`;<br />
`id3v2 &#8211;TPOS &#8220;$tag{&#8216;disc&#8217;}/$tag{&#8216;totaldiscs&#8217;}&#8221; $track`;<br />
`id3v2 &#8211;TPE2 &#8220;$tag{&#8216;album_artist&#8217;}&#8221; $track`;</p>
<p># set the mp3&#8242;s modification and access times to the same as the m4a&#8217;s<br />
utime $atime, $mtime, $filename or die &#8220;utime error: $!: $filename\n&#8221;;</p>
<p>`rm /tmp/fifo.wav`;<br />
}</p>
<p>###############################################################################<br />
# Get a track&#8217;s tag information. The function assumes you are already in the<br />
# directory that contains the track.<br />
# arguments:<br />
#   filename &#8211; the filename for the track; assumed to be fully escaped<br />
###############################################################################<br />
sub get_tag {<br />
my ($filename) = @_;<br />
my %tag = ();</p>
<p># We have to open a pipe to get the info because faad displays it on stderr<br />
open (PIPE, &#8220;faad -i $filename 2&gt;&amp;1 |&#8221;);</p>
<p>while (&lt;PIPE&gt;) {<br />
if (/^title: (.*)$/) {<br />
$tag{&#8216;title&#8217;} = $1;<br />
}<br />
elsif (/^artist: (.*)$/) {<br />
$tag{&#8216;artist&#8217;} = $1;<br />
}<br />
elsif (/^album: (.*)$/) {<br />
$tag{&#8216;album&#8217;} = $1;<br />
}<br />
elsif (/^genre: (.*)$/) {<br />
$tag{&#8216;genre&#8217;} = $1;<br />
}<br />
elsif (/^track: (.*)$/) {<br />
$tag{&#8216;track&#8217;} = $1;<br />
}<br />
elsif (/^totaltracks: (.*)$/) {<br />
$tag{&#8216;totaltracks&#8217;} = $1;<br />
}<br />
elsif (/^disc: (.*)$/) {<br />
$tag{&#8216;disc&#8217;} = $1;<br />
}<br />
elsif (/^totaldiscs: (.*)$/) {<br />
$tag{&#8216;totaldiscs&#8217;} = $1;<br />
}<br />
elsif (/^date: (.*)$/) {<br />
$tag{&#8216;date&#8217;} = $1;<br />
}<br />
elsif (/^album_artist: (.*)$/) {<br />
$tag{&#8216;album_artist&#8217;} = $1;<br />
}<br />
elsif (/^writer: (.*)$/) {<br />
$tag{&#8216;writer&#8217;} = $1;<br />
}<br />
}</p>
<p>return %tag;<br />
}</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.sector930.com/blog/2010/06/28/look-mom-i-contributed-to-society/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The S is for Speed: The Pale Moon Project</title>
		<link>http://www.sector930.com/blog/2010/05/25/the-s-is-for-speed-the-pale-moon-project/</link>
		<comments>http://www.sector930.com/blog/2010/05/25/the-s-is-for-speed-the-pale-moon-project/#comments</comments>
		<pubDate>Tue, 25 May 2010 14:21:46 +0000</pubDate>
		<dc:creator>Joel</dc:creator>
				<category><![CDATA[930posts]]></category>
		<category><![CDATA[The more you know...]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[Pale Moon]]></category>
		<category><![CDATA[web browser]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.sector930.com/blog/?p=1616</guid>
		<description><![CDATA[I recently ran into a problem at work in which I could no longer use Firefox or Chrome as my default browser.  I was instead instructed to us the aging kludge known as Internet Explorer 6.  Normally, I have no &#8230; <a href="http://www.sector930.com/blog/2010/05/25/the-s-is-for-speed-the-pale-moon-project/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I recently ran into a problem at work in which I could no longer use Firefox or Chrome as my default browser.  I was instead instructed to us the aging kludge known as Internet Explorer 6.  Normally, I have no problems following the due process at work, but in today&#8217;s society where the vast majority of work is done either on or in conjunction with the internet I have a slight issue with an older browser being the only allowable tool (especially one that <a href="http://files.myopera.com/tarquinwj/albums/45511/IE6.png">horribly fails</a> the <a href="http://en.wikipedia.org/wiki/Acid2">Acid 2 test</a>).  Furthermore, many companies are <a href="http://arstechnica.com/microsoft/news/2010/01/google-to-send-internet-explorer-6-users-packing-come-march.ars">no longer </a><a href="http://googlereader.blogspot.com/2010/05/spring-cleaning-comments-offline-and.html">supporting IE6</a> and others are actively <a href="http://abetterbrowser.org/">pushing</a> modern browsers.  My search for a new browser ended when I found the <a href="http://www.palemoon.org/">Pale Moon Project</a>.</p>
<p>In a nutshell, the Pale Moon Project is a custom build of Firefox from source that is optimized for 32-bit Windows environments.  The biggest changes between the two projects are Pale Moon does not support ActiveX or ActiveX scripting, any accessibility features and parental controls  nor does it support Intel Processors pre Pentium IV or the AMD Athlon Thunderbird. There are builds for Athlon XP/MP processors, but they aren&#8217;t updated on the same schedule as the main Pale Moon project. Furthermore, Pale Moon is only built for stable release builds of Firefox and may skip some incremental releases if they aren&#8217;t deemed significant enough. If you want a full rundown of the technical specs (including some performance tests purporting to a 1.25x increase in javascript speed) be sure to read the project&#8217;s <a href="http://www.palemoon.org/technical.html">technical page</a>.</p>
<p>I&#8217;ve been running Pale Moon for the last few weeks and I haven&#8217;t noticed any problems with it. It  loaded all of my plugins and also correctly located my existing  Firefox profile. The browser starts faster than Firefox did and websites seem to load a bit faster, but your mileage may vary. If you&#8217;re a on a Windows machine and are unable to use Firefox, I&#8217;d suggest giving Pale Moon a try. If you have an alternative you think is better, let me know about it in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sector930.com/blog/2010/05/25/the-s-is-for-speed-the-pale-moon-project/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dreams Really Do Come True</title>
		<link>http://www.sector930.com/blog/2010/04/11/dreams-really-do-come-true/</link>
		<comments>http://www.sector930.com/blog/2010/04/11/dreams-really-do-come-true/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 01:26:53 +0000</pubDate>
		<dc:creator>Sam</dc:creator>
				<category><![CDATA[930posts]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[home server]]></category>
		<category><![CDATA[nerdomain]]></category>
		<category><![CDATA[rack]]></category>
		<category><![CDATA[servers]]></category>

		<guid isPermaLink="false">http://www.sector930.com/blog/?p=1537</guid>
		<description><![CDATA[My Dad walked into my nerd cave and saw it. His response: &#8220;Oh. My. God.&#8221; Not the &#8220;this is totally awesome&#8221; OMG, but the &#8220;what the hell is wrong with you?&#8221; OMG. What was it that I had done? Did &#8230; <a href="http://www.sector930.com/blog/2010/04/11/dreams-really-do-come-true/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>My Dad walked into my nerd cave and saw it. His response: &#8220;Oh. My. God.&#8221; Not the &#8220;this is totally awesome&#8221; OMG, but the &#8220;what the hell is wrong with you?&#8221; OMG. What was it that I had done? Did I take a sledge hammer to my computers? Did I paint the room pink? Did I take a crap on the floor? No! I built a server rack:</p>
<div id="attachment_1601" class="wp-caption aligncenter" style="width: 296px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/04/100_40482.jpg"><img class="size-full wp-image-1601" title="2 Post Rack" src="http://www.sector930.com/blog/wp-content/uploads/2010/04/100_40482.jpg" alt="2 Post Rack" width="286" height="381" /></a><p class="wp-caption-text">In living room, after assembly</p></div>
<p>Since I love being at work so much, I decided to make my house look like it. Who needs peace and quiet when you can have 2 80mm fans roaring away? It&#8217;s the way computing should be.</p>
<h3>Ordering</h3>
<p>For a long time, I&#8217;ve been running at least 2 FreeBSD servers in my house for various purposes. Purpose #1 is to screw around. As I&#8217;ve moved around from place to place, I&#8217;ve gotten annoyed with running crappy looking desktops and the mess of cables that go along with them. I wanted a clean, organized solution, and started reading up on <a href="http://en.wikipedia.org/wiki/19-inch_rack">server racks</a>. I started looking around and quickly realized that racks and rackable equipment is really expensive. Luckily I ran across the <a href="http://en.wikipedia.org/wiki/19-inch_rack">inexpensive, 27U, 2 post rack</a> on CableOrganizer.com. I wasn&#8217;t sure I was going to be able to pull it off until I realized that Newegg.com has a bunch of server cases that fit ATX and Micro ATX motherboards. I thought <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811219029">this one</a> looked pretty good. After a few months daydreaming about the joy of rack ownership, I pulled the trigger.</p>
<h3>Assembling the Rack</h3>
<p>Once, the rack came in the mail, putting it together was pretty easy. I had ordered a 2U shelf along with the rack to store my network equipment on.</p>
<div id="attachment_1602" class="wp-caption aligncenter" style="width: 356px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/04/100_4050.jpg"><img class="size-full wp-image-1602 " title="Rack with Shelf" src="http://www.sector930.com/blog/wp-content/uploads/2010/04/100_4050.jpg" alt="Rack with Shelf" width="346" height="259" /></a><p class="wp-caption-text">In position</p></div>
<p>Unfortunately, the top unit of space on the rack is being taken up by the cross bar holding the two posts together. If I really need it, I can probably remove the cross bar, relying on the equipment to hold the rack together.</p>
<p><strong>Assembling the Server and Mounting</strong></p>
<p>I had an old desktop lying around that was a good candidate for a new server. It started out as a pretty decent <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16856167009">barebones kit</a>, and was packing an Athlon 64 3200+ and 1GB of RAM. It already had an 80 GB hard drive, but I decided to use that for the OS and add a 1.5 TB drive for storing whatever I could think of. Rather than go into details of the assembly, I&#8217;ll show it in pictures, like a storybook for nerds:</p>
<div id="attachment_1603" class="wp-caption aligncenter" style="width: 356px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/04/100_4052.jpg"><img class="size-full wp-image-1603   " title="Server Case" src="http://www.sector930.com/blog/wp-content/uploads/2010/04/100_4052.jpg" alt="Server Case" width="346" height="259" /></a><p class="wp-caption-text">There once was a 4U server case, sitting in Morpheus&#39;s chair...</p></div>
<div id="attachment_1604" class="wp-caption aligncenter" style="width: 356px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/04/100_4055.jpg"><img class="size-full wp-image-1604 " title="Open Server Case" src="http://www.sector930.com/blog/wp-content/uploads/2010/04/100_4055.jpg" alt="Open Server Case" width="346" height="259" /></a><p class="wp-caption-text">This little server case needed a new brain, so he went to the workshop...</p></div>
<div id="attachment_1605" class="wp-caption aligncenter" style="width: 356px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/04/100_4056.jpg"><img class="size-full wp-image-1605  " title="Server Case with Motherboard" src="http://www.sector930.com/blog/wp-content/uploads/2010/04/100_4056.jpg" alt="Server Case with Motherboard" width="346" height="259" /></a><p class="wp-caption-text">The powerful wizard gave the little server case a brain...</p></div>
<div id="attachment_1606" class="wp-caption aligncenter" style="width: 312px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/04/100_4057.jpg"><img class="size-full wp-image-1606   " title="Mounted Server Case" src="http://www.sector930.com/blog/wp-content/uploads/2010/04/100_4057.jpg" alt="Mounted Server Case" width="302" height="403" /></a><p class="wp-caption-text">After giving the case a brain, the wizard also gave the case a new home in rackland, along with two friends: Routy and Modulator Demodulator...</p></div>
<p>The story doesn&#8217;t mention that the wizard had to surgically remove the case&#8217;s handles in order to fit it on the rack. They are apparently intended more for when the case is installed using rails on a 4 post rack.</p>
<p>Sadly, a rack mountable UPS wasn&#8217;t in this wizard&#8217;s budget, so a standard desktop model had to do. Connected to it are the server, the cable modem and router, and a monitor that is connected to the server.</p>
<p><strong>OS and Additional Software</strong></p>
<p>For the server&#8217;s operating system, I used FreeBSD 8.0. I&#8217;m using <a href="http://www.apcupsd.com/">apcupsd</a> to manage the UPS. I intend to get <a href="http://samba.org/">samba</a> up and running to provide an easy way for my wife and me to store and share files. I would like to someday use <a href="http://heyu.tanj.com/">HEYU</a>, <a href="http://www.jabberwocky.com/software/xtend/">Xtend</a>, and <a href="http://misterhouse.sourceforge.net/">MisterHouse</a> to be the brain of an X10 enabled smart home. I also want to host virtual machines using <a href="http://www.virtualbox.org/">VirtualBox</a> and access them remotely from any computer, even away from the house.</p>
<p><strong>Future Plans</strong></p>
<p>In the near future, I plan on moving the rack into my nerd cave&#8217;s closet. For some reason, there are not one, but two electrical outlets in there. Perfect! Also, since I have 20U of space left, I eventually want to expand:</p>
<ul>
<li>Second server (4U)</li>
<li><a href="http://cableorganizer.com/quest/rackmount-drawer.html">Drawer</a> to store manuals, tools, and extra parts(2U)</li>
<li>UPS (1U)</li>
<li>Switch (1U)</li>
</ul>
<p>Even that leaves 12 more U of space. The possibilities are endless. Mmmm, rack mountable beer tap&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sector930.com/blog/2010/04/11/dreams-really-do-come-true/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Escaping Cellular Hell or: How I Learned to Stop Worrying and Love the Early Termination Fee</title>
		<link>http://www.sector930.com/blog/2010/04/01/escaping-cellular-hell-or-how-i-learned-to-stop-worrying-and-love-the-early-termination-fee/</link>
		<comments>http://www.sector930.com/blog/2010/04/01/escaping-cellular-hell-or-how-i-learned-to-stop-worrying-and-love-the-early-termination-fee/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 01:00:37 +0000</pubDate>
		<dc:creator>Charlie</dc:creator>
				<category><![CDATA[930posts]]></category>

		<guid isPermaLink="false">http://www.sector930.com/blog/?p=1590</guid>
		<description><![CDATA[Good evening, dear readers of Sector 930! Thank you for joining us for yet another exciting adventure. Tonight&#8217;s story begins with a man. A nerdy man. A man who loves technology, gadgets, and telecommunications. A man who happens to be &#8230; <a href="http://www.sector930.com/blog/2010/04/01/escaping-cellular-hell-or-how-i-learned-to-stop-worrying-and-love-the-early-termination-fee/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Good evening, dear readers of Sector 930! Thank you for joining us for yet another exciting adventure.</p>
<p>Tonight&#8217;s story begins with a man. A nerdy man. A man who loves technology, gadgets, and telecommunications. A man who happens to be me. You see, for the past several years, this man had been living in &#8220;Cellular Hell.&#8221; Not because he didn&#8217;t have good coverage, no &#8212; in fact his coverage was very satisfactory. Not because he didn&#8217;t have access to some of the latest &#8220;smartphones&#8221; &#8212; he had the original iPhone and a BlackBerry Curve 8900. So, what could I possibly have to complain about? I&#8217;m glad you asked!</p>
<p>First, let me explain what happened. I was a customer with AT&amp;T (evil). I was using my iPhone, but I wanted to drop my data plan. They wouldn&#8217;t let me (evil). They wouldn&#8217;t let me do with my BlackBerry, either. So I paid the $145 early termination (rape) fee, marched down to the T-Mobile store, and signed up for an Even More Plus plan &#8211; more minutes than I need, unlimited text messages (didn&#8217;t get that with AT&amp;T), and $20/month less than I was paying with the iPhone ($30/month less than when I was using the BlackBerry). Granted, when I switched to T-Mobile, I didn&#8217;t get a data plan.</p>
<p>Now that that&#8217;s over with, there are three basic points I want to bring up in this post. My goal is to inspire hope in other nerds that may be in a similar position.</p>
<h3><strong>1. Cellular phones are expensive. Data plans make them even more expensive.</strong></h3>
<p>Now that I&#8217;m out of school and &#8220;living in reality,&#8221; I&#8217;ve come to realize that cellphones are stupid expensive. The monthly voice plans aren&#8217;t too bad, but once you add in text messaging (MAJOR rip-off &#8212; texting works by sending messages during idle time slots on the cellular network &#8211; costing carriers next to nothing), a data plan, taxes, the price of a handset, and the fact that you usually have to be locked into a 2-year contract, you quickly end up paying thousands of dollars over the life of your plan.</p>
<p>Since money is tight, I started looking for ways to cut my monthly bills. My cell phone was one of the first things that popped into my mind. Now, I&#8217;m every bit as much of a techno-junkie as everyone else from the Sector, but when I started thinking about it, I just couldn&#8217;t justify paying $20-30/month for a data plan on top of my $40/month voice plan. Why&#8217;s that? Well, both my BlackBerry and my iPhone have Wi-Fi built in. The majority of my life is spent at work, home, the parents&#8217; house, or a friend&#8217;s house. All of these locations, with the exception of a few homes belonging to friends, have Wi-Fi that I can use to my heart&#8217;s content. Beyond that, I also carry a BlackBerry for work, which has unlimited 3G data (I can&#8217;t install apps, however).</p>
<p>Since I spend the vast majority of my time at one of these four Wi-Fi-enabled locations, I asked myself, &#8220;why the hell am I paying for a data connection that is <em>slower</em> than these Wi-Fi connections I already have access to?&#8221;</p>
<p>And thus, my first decision was made. I would drop the data plan from my account. This would result in savings of $240/year with the iPhone, and had I been using a BlackBerry data plan, this would have resulted in $360/year savings.</p>
<p><strong>UH-OH!</strong> One problem with my brilliant plan. Evil-Bad-Corp AT&amp;T would not let me, the customer, choose what I wanted. That never bodes well for a customer-corporation relationship with a freedom-loving, tin-foil hat-wearing guy like me. After arguing with AT&amp;T for a while, I became enraged and told them they just lost a customer. But not before I called customer support the day earlier with a bullshit claim that I would soon be traveling internationally, and thus needed my BlackBerry 8900 unlocked. (It worked, by the way).</p>
<p>(For what its worth: I did the math, and even after paying $145 in early termination fees, by the end of my 17 month contract period remaining with AT&amp;T, I will have saved $200 by switching to T-Mobile. The point being, while those early termination fees sound scary, you can actually save money by paying them and tossing your old, piece of shit provider.)</p>
<h3><strong>2. &#8220;Smartphones&#8221; are a distraction. Do you </strong><em><strong>really</strong></em><strong> need to be connected 24/7?</strong></h3>
<p>The answer is no! For quite some time, I wouldn&#8217;t have anything to do with a phone if I couldn&#8217;t get Facebook updates, push or near-instant delivery of e-mail, access to Google Maps, and all the other crap that you can do with a smartphone. That all changed when two things happened: first, I started having problems with my iPhone. The screen would light up on its own, killing the battery in a matter of hours. Nothing I tried would fix it. After dropping $350 on the phone (remember, it was the original, un-subsidized 2G iPhone), I had a bad taste in my mouth and was not about to drop hundreds more on a new smartphone. Shortly afterward, my cost-cutting, AT&amp;T-ditching scenario described above occured. It was then I truly realized &#8220;smartphones&#8221; can be fun, but they are largely a distraction. I thought about it for a few weeks, and really started analyzing what I do with my &#8220;smartphone.&#8221; It didn&#8217;t take long for me to realize that they actually wasted more of my time than they saved, and they took away from my ability to focus on important tasks rather than help me get organized.</p>
<p>Granted, I am currently using my unlocked BlackBerry on T-Mobile but without a data plan. If anyone is familiar with the apps available for BlackBerry, you know that the entire Google suite, and most other apps, won&#8217;t run at all if you don&#8217;t have a data plan (rip-off!), regardless of Wi-Fi connection. So, I essentially have a phone that&#8217;s really good at text messaging and that I can occasionally use to browse the web or check the weather, but only when I&#8217;m in a Wi-Fi coverage area. While technically a &#8220;smartphone,&#8221; because of these limitations, I wouldn&#8217;t really say that I have true &#8220;smartphone&#8221; functionality.</p>
<p>All that aside, I made a decision that I won&#8217;t be buying another &#8220;smartphone&#8221; anytime soon. In fact, I bought a Motorola v60g phone for $20 on eBay, and am eagerly waiting its arrival. I had a TDMA (a now defunct cellular technology) version of the v60 back in the early 2000s. It was fairly rugged, extremely simple, and elegant. It is, by far, my favorite cellphone ever made. I&#8217;m hoping my reunion with this well-made device will not disappoint.</p>
<p style="text-align: center">
<div class="wp-caption aligncenter" style="width: 266px"><img src="http://www.cellink.com.au/products/images/motorola_v60_Pair.jpg" alt="Motorola v60g Cellular Telephone" width="256" height="256" /><p class="wp-caption-text">Motorola v60g Cellular Telephone</p></div>
<h3>3. Cellular plans are a rip-off as it is. Contracts make them even worse.</h3>
<p>The best part about switching to T-Mobile was the fact that I have no annual contract. I&#8217;ve always thought it something of a scam that cellular carriers in the United States almost universally force customers to buy a 2-year contract or pay out the ass for a handset. Even if you want to do the latter, most carriers don&#8217;t make it easy. The concept of locking customers into contracts might have made sense 10 years ago when the cellular infrastructure was being heavily built out, but I feel the infrastructure is at a point today where its time customers demand freedom of choice.</p>
<p>Luckily, T-Mobile is different than the rest. They freely and openly advertise their &#8220;Even More Plus&#8221; plans as sans-annual contract. You can even get a few phones for less than $100. Or, if you already have a GSM phone, you can bring your own device.</p>
<p>When I switched, I was in and out of the T-Mobile store in 5 minutes. It was the smoothest cellular phone-related transaction I&#8217;ve ever experienced. Even better, T-Mobile is simply happy to have my business. They don&#8217;t give a shit that I have a voice &amp; text plan without a data plan on my BlackBerry.</p>
<p>I know I must sound like an promotional agent for T-Mobile, but in comparison to other carriers, they are like the Libertarian Party of cellular providers.</p>
<p>I <em>really</em> want to see the entire American industry move away from contract-oriented service plans. The only way that&#8217;s going to happen is if customers start demanding it. I figure I&#8217;m doing my part by supporting the only company that&#8217;s currently advertising no-contract monthly service plans.</p>
<h3>Of course, no plan is perfect.</h3>
<p>Now that I&#8217;ve covered the three points I felt I needed to make, I will say that there are a few drawbacks to my decision to ditch AT&amp;T. First and foremost is coverage. I live in the woods, further from populated areas than most. AT&amp;T has great coverage in my rural community, but T-Mobile does not. This is generally the case throughout the nation. T-Mobile is still very much growing, and its near fact that their rural coverage kind of sucks. But never fear &#8211; Google Voice to the rescue!</p>
<p>Since I maintain a copper pair (landline) telephone at home, I&#8217;ve told everyone to switch to my Google Voice number. This way, regardless of coverage quality in my home, I&#8217;ll get the call. This will also save me airtime minutes by allowing me to use my landline to make and receive all my calls while at home. Furthermore, it gave me an excuse to buy cool, what &#8220;kids these days&#8221; would call &#8220;vintage&#8221; telephones.</p>
<div class="wp-caption aligncenter" style="width: 210px"><a href="http://en.wikipedia.org/wiki/Model_500_telephone"><img src="http://www.arctos.com/dial/WE2500-1.jpg" alt="Western Electric Model 2500 Telephone" width="200" height="200" /></a><p class="wp-caption-text">Western Electric Model 2500 Telephone</p></div>
<p>I&#8217;m really not concerned with the poorer coverage. I took another step back and evaluated my life and how a cell phone should play a part in it. I realized, &#8220;hey, you know what? I don&#8217;t need to be in constant contact with everybody all the time. I don&#8217;t need to be immediately answerable to someone who calls me.&#8221; As far as emergency and priority situations, in areas where T-Mobile doesn&#8217;t have coverage, it generally roams to AT&amp;T&#8217;s network for &#8220;SOS&#8221; emergency calling. Not to mention I can use ham radio, my work cell, or a number of land-mobile radio networks to which I have access to make emergency or priority calls if need be.</p>
<p>And you know what? Not having instant access to your email 24/7 gives you something to look forward to when you get home &#8211; checking your email and having a whole inbox full of messages to go through!</p>
<p>All in all, I&#8217;ve been really happy with my decision to lead a simpler, less expensive cellular life. I&#8217;m no longer in Cellular Hell.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sector930.com/blog/2010/04/01/escaping-cellular-hell-or-how-i-learned-to-stop-worrying-and-love-the-early-termination-fee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UltraVNC SC</title>
		<link>http://www.sector930.com/blog/2010/03/26/ultravnc-sc/</link>
		<comments>http://www.sector930.com/blog/2010/03/26/ultravnc-sc/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 18:45:04 +0000</pubDate>
		<dc:creator>Edwin</dc:creator>
				<category><![CDATA[930posts]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tips and Tutorials]]></category>

		<guid isPermaLink="false">http://www.sector930.com/blog/?p=1527</guid>
		<description><![CDATA[A few weekends ago,  I went to my hometown to see my parents and dog. And being the good son I am, spent some time working on my parents&#8217; computer, a Dell running some sort of XP Home Media center &#8230; <a href="http://www.sector930.com/blog/2010/03/26/ultravnc-sc/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A few weekends ago,  I went to my hometown to see my parents and dog. And being the good son I am, spent some time working on my parents&#8217; computer, a Dell running some sort of XP Home Media center or whatever. &#8220;Working on&#8221; their computer usually means patching, defragmenting, and uninstalling whatever crap the FiOS installers or my sister put on there. This time, I replaced the AVG Home Firewall/Anti-virus monstrosity with Microsoft Security Essentials, and installed XP service pack 3. I also deleted the Verizon and Google toolbars, and some icons off the desktop.</p>
<p>The next day, my dad calls me to complain about &#8220;everything looking different&#8221; and his email not working. Within 20 seconds, I know this isn&#8217;t going to get fixed over the phone. I sigh to myself, and begin to steel my spine for the road of pain and frustration that lies ahead. I know what I must do: UltraVNC SC.</p>
<p>UltraVNC SC (Single Click) is something I heard about when I worked at the help desk at college, and have attempted to get working at least once in the past. It&#8217;s a tool that allows you to access someone&#8217;s computer remotely through the internet, as if you were standing behind it. From the official website:</p>
<blockquote><p>UltraVNC SC is a mini (166k) UltraVNC Server that can be customized and preconfigured for download by a Customer. UltraVNC SC does not require installation and does not make use of the registry. The customer only have to download the little executable and Click to make a connection. The connection is initiated by the server, to allow easy access thru customers firewall.</p></blockquote>
<p>If that didn&#8217;t make sense, let me expand: by having the &#8220;customer&#8221; run the application on their computer, their computer becomes the VNC server. When they &#8220;Click to make a connection&#8221; it sends an invitation to whatever computer is specified in the executable file, allowing the person at the remote location to connect to the customer computer and fix the problem. This means it requires no configuration of the customer computer or network, nor does it install anything. All you have to do it create the executable, send it to the person you are trying to help, and set your computer to listen for incoming connections. I will break the steps down further.</p>
<p>STEP ONE: CREATING THE EXECUTABLE</p>
<p>Follow the directions <a href="http://www.uvnc.com/addons/singleclick.html" target="_blank">here</a>. Basically, you put a text file that includes all the settings, a logo, and an encryption key into a zipped folder and upload it to their executable generator, and it gives you a link to download the executable file.</p>
<p>The text file I used to create the following examples is <a href="http://www.sector930.com/blog/wp-content/uploads/2010/03/helpdesk.txt">here</a>.</p>
<p>STEP TWO: DISTRIBUTING THE EXECUTABLE</p>
<p>This might be harder than it seems. A lot of email providers such as Gmail and&#8230;&#8230;..whatever else people use won&#8217;t let you send .exe files as attachments. I found the best way to do it was to host it on a web server, so you can just tell your parents to surf to sector930.com/help.exe and save the file to their desktop.</p>
<p>STEP THREE: PREPARING YOUR COMPUTER</p>
<p>Download and install UltraVNC onto your computer. In the example I am using here, I am using port 5555, so that will have to be forwarded through your router/firewall to your local machine. You might also have to turn off your local Windows firewall. Once they are ready to connect, open a DOS command prompt, and navigate to C:\Program Files\UltraVNC and enter the following command:</p>
<pre>vncviewer.exe -listen 5555 -dsmplugin MSRC4Plugin.dsm</pre>
<p>This command will open UltraVNC Listener on port 5555 and use the encryption plugin. Once you are listening, have the person you are trying to help open the executable file they downloaded from your web server, and you should see something on your screen. From there, it&#8217;s up to you.</p>
<p>I decided to create a prepackaged executable for the Sector, and am including examples of possible logos we could use below:</p>
<div id="attachment_1560" class="wp-caption aligncenter" style="width: 505px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/03/halp.png"><img class="size-full wp-image-1560" title="halp" src="http://www.sector930.com/blog/wp-content/uploads/2010/03/halp.png" alt="" width="495" height="305" /></a><p class="wp-caption-text">This one is probably the least likely to confuse parents.</p></div>
<div id="attachment_1559" class="wp-caption aligncenter" style="width: 505px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/03/greatsuccess.png"><img class="size-full wp-image-1559" title="greatsuccess" src="http://www.sector930.com/blog/wp-content/uploads/2010/03/greatsuccess.png" alt="Yashi Mash!" width="495" height="305" /></a><p class="wp-caption-text">Yashi Mash!</p></div>
<p style="text-align: center;">
<div id="attachment_1557" class="wp-caption aligncenter" style="width: 505px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/03/chicken.png"><img class="size-full wp-image-1557" title="chicken" src="http://www.sector930.com/blog/wp-content/uploads/2010/03/chicken.png" alt="" width="495" height="305" /></a><p class="wp-caption-text">This one is probably the most likely to confuse parents.</p></div>
<div id="attachment_1558" class="wp-caption aligncenter" style="width: 505px"><a href="http://www.sector930.com/blog/wp-content/uploads/2010/03/fffuuu.png"><img class="size-full wp-image-1558" title="fffuuu" src="http://www.sector930.com/blog/wp-content/uploads/2010/03/fffuuu.png" alt="The possibilities are endless." width="495" height="305" /></a><p class="wp-caption-text">The possibilities are endless!</p></div>
<p style="text-align: center;">
]]></content:encoded>
			<wfw:commentRss>http://www.sector930.com/blog/2010/03/26/ultravnc-sc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Teaching Fibonacci the easy way</title>
		<link>http://www.sector930.com/blog/2010/03/25/teaching-fibonacci-the-easy-way/</link>
		<comments>http://www.sector930.com/blog/2010/03/25/teaching-fibonacci-the-easy-way/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 00:44:02 +0000</pubDate>
		<dc:creator>Joel</dc:creator>
				<category><![CDATA[930posts]]></category>
		<category><![CDATA[fibonacci]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://www.sector930.com/blog/?p=1531</guid>
		<description><![CDATA[If you ever find yourself having trouble teaching someone about Fibonacci numbers or the Golden spiral, I&#8217;d like you to remember that a picture truly is worth a thousand words. via flickr]]></description>
			<content:encoded><![CDATA[<p>If you ever find yourself having trouble teaching someone about <a href="http://en.wikipedia.org/wiki/Fibonacci_number">Fibonacci numbers</a> or the <a href="http://en.wikipedia.org/wiki/Golden_spiral">Golden spiral</a>, I&#8217;d like you to remember that a picture truly is worth a thousand words.</p>
<p style="text-align: center;"><img class="aligncenter" title="Fibonacci Spiral" src="http://farm3.static.flickr.com/2575/3742912765_2fe077bbe4.jpg" alt="" width="425" height="425" /></p>
<p style="text-align: center;">
<p style="text-align: left;">via <a href="http://farm3.static.flickr.com/2575/3742912765_2fe077bbe4.jpg">flickr</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sector930.com/blog/2010/03/25/teaching-fibonacci-the-easy-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
