BLOG

life, technology, travel, and photography

Pardon the dust

I'm in the process of moving hosting to Squarespace.  I realize a bunch of stuff broke when I imported it from Wordpress.  If you notice something broken, please let me know! Bear with me while I iron out the kinks.

jQuery dataTables formatted numbers and currency sorting plugins

I recently needed to add some sorting functionality to a few dataTables.  While I was grateful for plentiful example plugins to work with, I found them a bit rough around the edges.  Here are a couple of plugins that I've refined a bit for my purposes.

Formatted Numbers Sorting

This plugin originally written by Peter Gallagher and can be found on the dataTables sorting plugins page.  It had no comments and was using the eval statement (test performance variation with & without eval for yourself on jsperf).  I fixed both and then ran it through JSLint.

Check it out on github.

Currency Sorting

This plugin originally written by Allen Jardine and can also be found on the dataTables sorting plugins page.  It was good and well commented, but failed when the data was empty or was unexpected.  I extended it to anticipate empty values, any form of NA (eg, na, n/a, NA, N/A) and either single or double dashes (eg. -, --).  I also extended it to handle numbers without a leading currency symbol.  Of course it's also run through JSLint

Check it out on github.

$.fn.dataTableExt.oSort['currency-asc'] = function (a, b) {
'use strict';

var x, y;

/* Remove any commas (assumes that if present all strings will have a fixed number of d.p) */
x = (a === "-" || a === "--" || a === '' || a.toLowerCase().replace('/', '') === 'na') ? -1 : a.replace(/,/g, "");
y = (b === "-" || b === "--" || b === '' || b.toLowerCase().replace('/', '') === 'na') ? -1 : b.replace(/,/g, "");

/* Remove the currency sign */
if (typeof x === "string" && isNaN(x.substr(0, 1), 10)) {
x = x.substring(1);
}
if (typeof y === "string" && isNaN(y.substr(0, 1), 10)) {
y = y.substring(1);
}

/* Parse and return */
x = parseFloat(x, 10); y = parseFloat(y, 10);

return x - y;

};

$.fn.dataTableExt.oSort['currency-desc'] = function (a, b) {
'use strict';

var x, y;

/* Remove any commas (assumes that if present all strings will have a fixed number of d.p) */
x = (a === "-" || a === "--" || a === '' || a.toLowerCase().replace('/', '') === 'na') ? -1 : a.replace(/,/g, ""); y = (b === "-" || b === "--" || b === '' || b.toLowerCase().replace('/', '') === 'na') ? -1 : b.replace(/,/g, "");

/* Remove the currency sign */
if (typeof x === "string" && isNaN(x.substr(0, 1), 10)) {
x = x.substring(1);
}
if (typeof y === "string" && isNaN(y.substr(0, 1), 10)) {
y = y.substring(1);
}

/* Parse and return */
x = parseFloat(x, 10); y = parseFloat(y, 10);

return y - x;

};

How to Test Web Development Environment in VMWare Fusion

As a Mac user, testing and debugging IE can be a hassle.  The best way that I have found to test my work in IE is setting up a Windows virtual machine.  To view your Mac OSX's localhost inside of your VMWare client you'll need to point your Windows hosts file (located at: C:\WINDOWS\system32\drivers\etc\hosts) to your localhost.  You say that 127.0.0.1 doesn't work?  That's because VMWare sets up a proxy IP for localhost. To find the proxy IP address open the Terminal.app and type:

ifconfig vmnet1

This will return something like:

In this case, 172.16.134.1 is your proxy IP.  Just enter that into your Windows hosts file and kill VMWare's DNS cache.  Clear VMWare's DNS cache go to Start > Run.  Type 'cmd' and press return.  Then at the MS-DOS prompt type:

ipconfig /flushdns

This post was adapted for my own archival purposes from these great posts, which you might find useful:

dataTables.js: oSettings is null

Introduction

jQuery plugin dataTables.js is a great tool for quickly adding sortable, searchable data to your site.  The documentation on their site is great but sometimes doesn't account for the miriad of ways that I've managed to break it.  When I do something wrong, I forget how I fixed it the last time.  Which makes me have to re-learn what went wrong.  So I'm writing this post in the hopes that I won't have to remember how I fixed this problem the next time.

How to fix it

The error is "a is null" when minified.  Only after replacing the minified version of the dataTables.js file with the non-minified version do you get "oSettings is null".  Just what exactly is oSettings?  It's an object literal containing a number of attributes and methods that is passed to most of the internal functions of dataTables.js.  When it is null, it throws the alert message displayed to the right.

Unfortunately, since oSettings is such a common function parameter name knowing its name isn't very helpful.  You need to find the line number that's causing the problem.  The last time this happened to me clicking around on the page after receiving the oSettings is null" caused a console.log error message to be thrown that indicated what line the error is on.  If anyone has a better idea for finding the line of the error, please let me know.

Once you know what method your error is a part of, in my case _fnAdjustColumnSizing, then you're halfway there.  This, combined with the knowledge of what functionality is being used when the alert is thrown, should lead you right to the culprit.  In my case: it was a callback method that was improperly assigned.  Changing my if conditional to accept both undefined and empty string when assigning a certain value as opposed to only an undefined value fixed my problem.

Finding a More Secure Dropbox Replacement

Recently, there have been a number of security related concerns raised about Dropbox.  The most damning is that the private key used for encryption is held by the company.  This led me to question what options were available to store more sensitive data in the cloud.  Fortunately, there are almost too many options to choose from. Here are some of the best options that I was able to find:

There are a number of pro & con blog posts comparing many of these services already so I'll spare you.

One of the more interesting solutions that I've seen suggested, if also somewhat more complicated, is building your own Dropbox replacement.  Admittedly, this solution isn't quite a full Dropbox replacement, but still a possible replacement nonetheless.

In the end, I ended up choosing Jungle Disk because of its status as an industry leader (so they're liable to be around for a while), ease of use, and integration with RackSpace (an ISP I'm already familiar with).

To convert from Dropbox to Jungle Disk:

  1. First, create a new folder in your home directory to serve as the root directory for Jungle Disk.
  2. Copy the sensitive data from your Dropbox folder to your newly created Jungle Disk folder.
  3. Change any old symlinks to point at Jungle Disk.
  4. Confirm that all of the data is accessible by opening it as you normally would.
  5. Finally, delete your data from Dropbox so that its not accessible from there anymore.

Verizon FiOS Speedtest.net Results

A while back I wrote a post detailing my transition from Time Warner's standard package to their top of the line wideband service. The post detailed the level of experience one might be able to expect with each service. Last month I moved down the street and now I have the Verizon FiOS ultimate HD package which includes 35MBs down & 35 MBs up internet service so I thought that I'd take a moment to update the blog with some test data for comparison. Without further ado...

Ultimate HD TV/Internet Combo ($140/month)

Speedtest.net Results

Update 5/20/2011:

Speedtest.net Results

I'll be sure to update this post a couple more times over the next few weeks to give a larger sample size.

My First Video (Canon 7D & iMovie)

I filmed this at my friend Jerry Luna's birthday about 3 weeks ago.  Yesterday morning I finally decided to piece something together and put it online.  It was a lot of fun!  I've got to do this more often. The hardest part was holding the camera steady and keeping everything in focus.  I feel like I did a pretty good job of both considering I didn't have any sort of rig or proper focus mechanism.

For those that are interested, I used my Canon 7D and a 50mm f/1.4 lens.  There is no audio because, among other things, the onboard microphone is terrible.  In the future, I may be acquiring a few accessories for capturing better audio.

How to Fix SquareUp.com's Device on iPhone 4

SquareUp.com's Credit Card Swiping iPhone Attachment

Intro

Square, Inc.'s mobile payment system is very cool but not perfect.

After months of waiting and anticipation my Square, Inc.  accessory finally arrived in the mail a few days ago.  For those who haven't heard about this device, let me fill you in.  Square is a startup that makes mobile apps and accessories allowing anyone to process credit or debit cards from anywhere.  Sounds cool right?  Watch the intro video.

My initial reaction was that of excitement.  Though, I'd nearly given up hope on the thing after months of delay when at last I received an email a few weeks ago preluding its immanent arrival.  This reaction however was tempered when it didn't work as expected right away.

The Problem

Apparently there is a known design flaw affecting iPhone 4 owners.  Specifically, the stainless steel band of the iPhone shorts the ground of the accessory's connector's base.

The Solutions

The quick and easy fix is to simply cut a small hole in a piece of paper (I used wax paper) and slide it onto the connector (see photo).  Other suggested solutions include using a small rubber (10 gauge) body jewelry o-ring and masking the connector before using white out to paint over the trouble area.

My Thoughts

Square was most likely caught off guard when the iPhone 4's design was revealed.  I'm guessing that they had passed the point of no return on the unit's design.  Obviously, this is cutting edge technology and there will be kinks that need to be worked out.  However, the coolness factor of collecting payments from anywhere far outweighs all of these setbacks.  After all, once fixed, it does work fairly well.

Update

UPDATE 10-16-2010: I've swapped out the small piece of paper for a 10 gauge rubber o-ring and must say that it is a far superior and perhaps even permanent solution.  The o-ring looks like it an OEM part.  In fact, I think Square should just include one of these with each unit and there would be no problem at all

UPDATE 11-2-2010: Square mailed me a new version of the accessory that replaces the steel bit at the base of the connector with a plastic bit.  It works perfectly out of the box.  Anyone signing up with Square after today will be getting the new version making this blog post obsolete going forward.

Good Riddance BlueHost; VPS Link What Happened?

Over the past several months or so, I've been consolidating the hosting for my websites to a single vendor.  Considering that I've been a web developer for over a decade, this probably should have happened a long time ago. When I started this project, I had two separate neglected shared hosting accounts at BlueHost and then my main virtual private server at VPS Link.  It finally occurred to me that I could just consolidate all of them onto my VPS Link host and save myself approximately $18 a month.  Not to mention the fact that BlueHost is a terrible company to deal with.  For instance, they won't give you ssh access to your shared host unless you FAX them a photo id.  The pure idiocy of this should have sent me running for the hills a long time ago.

Unfortunately, VPS Link was acquired by some company that is running it into the ground.  For instance, they went from co-located servers in Seattle and New York City to a single location in Boston.   Latency in my case went from about 20ms before to about 80ms recently.  Customer service seems to have deteriorated as well.

Worst of all, during the "upgrade" of their control panel platform, I lost the ability to control all of my DNS information.  The control panel was just blank.  Apparently, I wasn't the only one.  After talking to a customer service rep, I was told that I would have to re-enter all of my DNS data manually.  That was the last straw.

I'm now a happy customer of RackSpace.  The difference between the customer service of VPS and RackSpace is night and day.  Oh yeah, did I mention that I'm now getting twice the horsepower for the same price.  No?  Well I am.  Also, the backend software is more professional.  There's an API, mobile apps, etc.

If you're still a victim of a bad hosting company, I would highly recommend taking a look at RackSpace.  My experience has been overwhelming positive.  In fact, my only gripe so far is that the backend and account pages on RackSpace seem to be a little slow to load.  I can deal with that.

24" iMac Hard Drive Replacement is Super Easy

I'd like to take a moment to thank Apple for making it so very easy to upgrade the hard drive in my iMac.  Specifically, Migration Assistant is a beautiful application.  I simply put my old internal hard drive in an enclosure with a firewire 800 port and filled out few simple screens.  Then it copied over all of my applications and settings.  I was shocked that it wasn't more painful. Macally Hi-Speed eSATA/FireWire/USB 2.0 Storage Enclosure for 3.5-Inch SATA Hard Disk G-S350SUAB2

There are already several great tutorials and how-to's about disassembling the iMac and physically installing the drive.  The only thing I had a problem with durring the entire hard drive replacement/upgrade and the only thing that wasn't covered in any of those guides was initializing the drive prior to installing Snow Leopard again.  It turns out that the drive need to be formatted before it would show up in the installation wizard.

Formatting the drive definitely could have been a little more intuitive.  Knowing that you need to open Disk Utility and "Erase" the drive in order to use it took some Googling.  See the image below for reference:

Disk Utility Screenshot

I actually took apart my 24 inch iMac again to check that I hadn't missed any connections the first time when the hard drive didn't appear in the install wizard. Aside from that confusion, the hard drive install was relatively quick and simple.

Automatically Syncing Twitter Status with iChat/Adium

There are several posts about this already, but they haven't been updated in a while and I ran into several problems getting this set up right strictly following their instructions.  So I decided to write a quick updated blog post about how to do it right with no lingering issues.

Download the Ruby Script

Download my updated version of the sync-status-with-twitter.rb ruby script.  This version of the ruby script is the same as the older one's except that it has a simple bug fix that corrects a problem where </content> is inserted at the end of your status.

Just like in the other posts, place this file in ~/Library/Scripts/ and set the permissions to allow it to execute.

chmod +x ~/Library/Scripts/sync-status-with-twitter.rb

Fix the Adobe Unit Types Conflict

If you have a Mac running Snow Leopard and Adobe CS3 or CS4 you may also need to update your "Adobe Unit Types.osax" file with a new 64 bit version.  Failing to do so will cause the script to throw an error every time its run that looks similar to this:

2010-10-06 01:11:07.340 osascript[590:307] Error loading /Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types:  dlopen(/Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types, 262): no suitable image found.  Did find:
	/Library/ScriptingAdditions/Adobe Unit Types.osax/Contents/MacOS/Adobe Unit Types: no matching architecture in universal wrapper
osascript: OpenScripting.framework - scripting addition "/Library/ScriptingAdditions/Adobe Unit Types.osax" declares no loadable handlers.

This happens because the scripting component that ships with CS3 and CS4 is 32 bit and Snow Leopard requires a 64 bit component.  See this Adobe TechNote for detailed instructions on fixing this issue.

Test That the Script Runs without Error

Now I'd run the script to make sure that everything is running smoothly before writing your crob job.  You can do this by copying and pasting this to the terminal and hitting enter.

~/Library/Scripts/sync-status-with-twitter.rb

If you've done everything right, you shouldn't get any error messages and your status should be updated in your chat program of choice.

Setup the Cron Job

Finally, you'll need to add a cron job to regularly update your status.  To add a cron job simply type "crontab -e" into the terminal.  Here's an example you could use to run this script every 30 minutes:

*/30 * * * * ~/Library/Scripts/sync-status-with-twitter.rb > /dev/null/ 2>&1

I recommend adding a "> /dev/null/ 2>&1" to the end of the examples given in those other posts so that you're not cluttered up with a ton of mail if for some reason the cron fails occasionally.

You're Done!

That's it!  I'd love to hear your experiences using this tutorial.  Leave a comment and let me know if you had any problems so that I can update this if necessary.

UPDATE 10-07-2010: The cron job seems to be causing a crash condition when I leave my computer in sleep mode for several hours.  Specifically the computer restarts instead of staying suspended in sleep.  Occasionally, upon returning to my computer I find that for one reason or another a modal dialogue message from one of a handful of applications (eg. Adium, Terminal, et al) seems to have prevented a restart.  Still investigating...

UPDATE 10-08-2010: Adium has crashed twice in a row when the machine is left on and asleep.  I increased the interval between the cron job from 30 to 60 minutes without any luck.  The error being thrown is a "KERN_PROTECTION_FAILURE" which after Googling, doesn't reveal much other than that Adium is trying to access memory that it's not allowed to.  I'm limiting the number of accounts running on Adium from four to just one for the day to see if that could be the issue.  Perhaps certain types of accounts can't/don't update the message in the same way?  I'm flying in the dark a bit on this one since I don't really know anything about AppleScript or Ruby.

UPDATE 10-12-2010: The computer tried to log me off again yesterday.  I checked the logs in the console and noticed a problem with a Brother printer driver.  It kept failing to find something called LOGINserver.app.  I've re-installed the printer driver and I'll keep this updated when I have more to report.

UPDATE 10-13-2010: I'm beginning to think that the crashing behavior is completely unrelated to this code.  I continue to monitor the logs and nothing seems to be correlated.  There are a few errors I'm doing some research on, but I'm leaning towards this possibly being an issue with bad RAM or running too many things at once.

UPDATE 10-15-2010: Well this is a little embarrassing.  It turns out that my computer wasn't crashing after all.  It was loggin out.  And... wait for it... I had configured it to do so.  I Changed an option on System Preferences > Security > General called "Log out after __ minutes of inactivity"  May bad!  All better now, except for my bruised ego.

iPhone Sunday Ticket app Broken

Actually, the app is not broken so much as its not included in your NFL Superfan package like it was last year.  In fact, the Superfan package no longer exists.  All of the extra broadcast bits that made up the premium package has now been rolled into the base cost.  This actually makes watching the games cheaper in HD.  Bravo! The problem being that DirecTV did such a bad job conveying this messege that I didn't know that I needed a $50 add-on until it was too late. I missed the end of the Eagles/Redskins game on hold with a hapless customer service rep who was scrabbling for an answer as to why the iPhone app wasn't streaming the game. He did finally mention NFL Sunday Ticket To-Go, but failed to communicate that it was something that I would have to purchase and suggested that by deleting and re-installing the iPhone app I might be able to fix the situation. Only after mulling over this blog post and googling the problem did the solution--buying NFL Sunday Ticket To-Go--become clear.

Tsk tsk DirecTV for dropping the ball on something that could have been very cool while I was riding back to St Pete from Orlando on Sunday.

Has anyone purchased it?  How does it perform?  I'm thinking about dropping the cash to get it soon.

Copying the wrong Wordpress install directory caused downtime.

Sorry about the downtime.  I recently switched my hosting provider from VPSLink to Rackspace for a variety of reasons, which I'll compile into a post at a later time. The move definitely could have gone a lot smoother. The main issue being a botched install of Wordpress on the old server, so that after scp'ing the directory over and doing a mysqldump/re-import I was faced with a white screen and no errors.  After several days of down time with no opportunity to fix the problem, I sat down this morning determined to fix the problem. The solution was relatively straightforward.  The Wordpress install on the old server was the problem.  In fact, there were two installs of wordpress on the old server and the active one was using some of the files from the inactive one.  Which means that when I was scp'ing all of the files in the active directory to the new server, the database was still looking for some of the files in the inactive install of wordpress.

Once this was discovered, I simply followed the standard manual Wordpress move instructions.  Meaning that I updated the Wordpress software on the active installation, disabled all of the plugins, and switched to the default theme.  Transferred these files from this Wordpress directory to the new server.  Then I updated the wp-config.php file with the new database info.  Finally, I did a fresh mysqldump and scp' ed the *.sql file over and changed the 'siteurl' and 'home' to their correct new values.

Tada!  It works!  Of course that is obvious, because you're reading this.  Thanks for your patience!

A Former Local’s Guide to Dive Bars and Day Drinking in Orlando, FL

I originally wrote this as an email to a friend that was visiting Orlando for a conference and wanted to avoid the Disney Hellworld.  Then I thought it would make a great blog post.  She simply requested a list of the finest divey-est bars in Orlando with perhaps a punk edge on them and maybe a place to see a show. I should qualify this post by stating that I spent 7 years in both college and Orlando and I spent much that time bouncing between these places.  I know them well and I love them all.

So if you're marooned in Orlando or Disney World with your family or on a business conference and want to get away for a bender or a pub-crawl this is pretty much a definitive guide.  Print it out and write the number of a cab company on the back of the page.

It will also serve as a reminder to myself as to where I should not forget to go when I make my glorious returns to O-town.

Downtown (All within walking distance)

  • The Social (see a show here.  I'm serious. It's a great little venue.  You can probably buy tickets at the door for cheep)
  • BBQ Bar (This is my favorite bar in Orlando and maybe all of FL)
  • Independent Bar (Louder and dancy, hipster haven)
  • Eye Spy (Depends on the night avoid on the weekend)
  • The Matador (Another absolute favorite! Don't miss this one.)
  • Burton's Bar (I used to live in the neighborhood and did a lot of day drinking here)
A little off the path a bit but worth it
  • Sportstown Billards (divey, poolhall, good beer and cheap snacks)
  • The Bull & Bush (Amazing atmosphere, great beer selection)
  • Will's Pub (About as close to punk as orlando gets)
  • Wally's (across the street from Will's. Orlando stiffest pour. Complete shack.)
  • Uncle Lou's (if there's a show going on its super punk, but that's only so often and otherwise I wouldn't go there.)
  • Redlight, Redlight (if you like beer don't miss this one.  One of the best beer bars in the country)
  • Hideaway Bar (good cheap food and beer, kind of sporty)
  • Whiskey Lou's (AKA: Lou's lounge.  another classic crap-hole with bad beer and strong pours)

I would avoid most of Wall St and Church St (Fraty douchebags and bimbos abound)

If you look at a map of Downtown Orlando, you're safe to be walking about from east of I-4 and north of 408.  Most of the good stuff is south of Robinson and west of Summerlin.

As always, have fun, be safe, and let me know how it goes!

Jay & Amy’s Wedding Pics Featured on Rock n Roll Bride Today!

Rock 'n Roll Bride is a theme blog for the bridal crowd.  Everyday they post some of the most unique wedding photos taken anywhere.  I'm so thrilled that Jay & Amy's wedding was featured on their front page today.  It was such an honor and so much fun to participate in Jay & Amy's wedding.  They were amazing, beautiful subjects that I hardly had to do anything to make them really shine.  I'm really proud of the photos that I took.  They really turned out great!  Congrats guys you're such a great couple! My complete photoset of Jay & Amy's wedding is on Flickr.

They also compiled a few slideshows on YouTube.

Finally their wedding invitation video is fun too:

Firefox Bug> :hover cannot bind to a classname with CSS in HTML 4.01 Transitional

They say you learn something new everyday.  Yesterday was no different for me.  As many of you know I work at VH1.  While working on the new sitewide navigation yesterday I came across an interesting HTML 4.01 transitional bug in Firefox.  Special thanks to Tom Raab for help sorting this out.

Bug Description

As the title of this post implies, the :hover psuedo-class cannot be bound to a class name on pages rendered with a DTD of HTML 4.01 Transitional.  For instance:

Broken Example

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>HTML 4.01 Transitional test case</title>

     <style type="text/css">
          .class { background:#ccc; }
          .class:hover { background:#ff0000; }
     </style>

</head>
<body>

     <div class="class">Hover over this to watch nothing happen.</div> 

</body>
</html>

Working Example

Then simply change the DTD to XHMTL or the class to an id and watch the hover magic!

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>HTML 4.01 Transitional test case</title>

     <style type="text/css">
          #id { background:#ccc; }
          #id:hover { background:#ff0000; }
     </style>

</head>
<body>

     <div id="id">Hover over this to watch the magic happen.</div> 

</body>
</html>

Broken Demo (Obviously this is only broken in Firefox)

[iframe http://jpgrace.com/sitewide/demo/2009-12-05/broken.html 500 50]

Working Demo

[iframe http://jpgrace.com/sitewide/demo/2009-12-05/working.html 500 50]

Conclussion

I should probably file a bug with Mozilla, but after spending all this time on this post now its time to go eat.  :P  (I'll file it later don't freak out.)

Zipcar makes good, Visa proves they need to be regulated

Well, I've finally heard back from both Zipcar and Visa.  I was waiting to hear back from both before I updated the continuing saga. Zipcar actually saw my last post and called me on my cell to see if there's anything that they could do to smooth out the situation. Kudos to them for that. In the end, I got a $240 credit on my account that can be used for rentals over the next few months.  I'm still a bit hesitant to try it again, but hey its something.

Visa was less than accommodating. They actually called me to tell me that I should have read the fine print before appealing. How insulting is that?! Like, I could have avoided it in their rejection letter!  They either didn't understand the basis for my appeal or they think I'm retarded.

I think my next move is actually to call Clark Howard. After that I guess I have no choice but to sue them. At this point I just want to make a statement out of this. They're inviting me to take action. They clearly are begging me to assist them in levying heavy government regulations upon their industry. An invitation I'm all to happy to oblige.

If anyone knows a good class action attorney that I could consult with, I'm almost to that point.  I'll keep you posted.

The Best Buy Black Friday Shopping Experience

Every year my family takes a christmas photo over the Thanksgiving holiday weekend and sends out an embarrassing  holiday card to our friends and family.  This year we're taking a night shot that will require a flash.   Which meant I needed to buy a flash while on vacation in Florida.  Normally I would have just gone to B&H Photo before I left NYC, but I forgot.

That's how I found myself at Best Buy on Black Friday.  What follows is my experience dealing with a stubborn sales manager and a rigid price-matching rule.

Upon arrival I was pleasantly surprised that there wasn't a nasty melee amongst patrons fighting for the last $400 75 inch plasma TV.  They had probably sold out already.  I must have missed all of the good action.

Quickly, I forced my way past the crying babies and lunatics towards the Photo Department.  I had no intention of paying more than B&H's price for the flash.  Surely that wouldn't be a problem, I thought.  Best Buy has a price matching policy.  If the item was more than what I knew it sold for at B&H I'd just invoke said policy and be on my way.  Oh, if it were so simple!

Arriving at the photo department I found the price of the 580 EX II was almost exactly $50 more than at B&H.  Upon flagging down a shellshocked employee I asked him about their price matching policy.  Apparently Best Buy doesn't price match on Black Friday.  That seems like a fair policy.  Most of the advertised prices on Black Friday are for a very limited number of items at each store.  That being said, I know for a fact that the price of the 580 EX II at B&H has been the same for quite some time.

Perhaps the Sales Manager would be reasonable and make an exception in my case so that I wouldn't have to come back the next day.  Naturally, this story wouldn't be very interesting if he had been, so I left empty handed.  As I left, I noted the 300 person line at the register and felt glad I wasn't in it.

Over the course of the next hour I scoured the internet and called every photography store within 100 miles to get quotes.  About an hour into this exercise I realized that the $50 difference between the price of the flash at Best Buy and B&H was simply a manufacturers instant rebate.  Attempts to get ahold of the local Best Buy to confirm the rebate failed after 11 minutes of ringing.  It was at this point that I began to get exasperated myself.  Another 5 minutes of ringing with the national line put me in contact with a nice lady that confirmed that there was indeed an in-store  manufacturers instant rebate.  "No problem," I said I'll just run back up to the store.

Armed with this new information I could just strong arm the sales manager into knocking $50 off the price.  Another 20 minutes in the car, I made my way back.  This time, according to the sales associate the $50 "must have already been taken off the price of the flash and it just wasn't noted on the price tag."  Ugh!!!!  Again, no luck!

The final solution was to buy the flash at full price and then come back the next day with the receipt and I would be given a refund.  This I did.  In the end, I did get what I want.  I didn't have to wait in the 300 person line (they ran my card at the photo department), but I really had to jump through a lot of hoops.  Not to mention the fact that they never acknowledged the in store rebate.  Granted, I didn't have a whole lot of options (every other store in the area either didn't have the flash or wouldn't match the price).  So I am grateful for eventually price matching the flash, it just seems like this should be a proto-typical case study in how not to handle a customer.

Perhaps I'm wrong.  I'd love the hear your feedback.

Comparison between Time Warner Cable's (TWC) Wideband, Turbo, Standard service packages

Aside from using my internet connection for telecommuting to work, I also use it for VOIP calling (Skype), online gaming (EVE Online), and off-site backup (BackBlaze), just to name a few.  None of which work well.  And so it was that after struggling with Time Warner Cable's standard broadband service for months, I finally decided to upgrade to their Wideband service.  In the interim I upgraded to TWC's Turbo package for testing and perspective.  What follows is my comparison of all three service levels.

Basic ($30/month)

This package is supposed to deliver 10MB down and 512kb up, which I realize is not nearly enough for what I was trying to do.

As you can see, this leaves a lot to be desired.  The extremely poor signal quality explains why I was unable to use Skype.  It also explains the poor gaming experience I've had.  The download speed was actually better than advertised and more than I expected.  That being said, download speed was never my problem.  It has always been signal quality.

Turbo ($45/month)

This package ups the ante to 15MB down and 768kb up.

The signal quality with the Turbo package is much improved allowing for the use of internet communications.  The download speeds were again better than advertised on at least one of my runs, though remained within expected ranges.  Overall this is  a great upgrade for the money.  I can't believe I didn't at least have this to begin with.

Wideband ($100/month)

Finally, with this service I ought to be getting 50MB down and 5MB up.

These numbers are right on par with what should be expect for a package with this price tag.  I don't know why it took me so long to upgrade.  This was long overdue.

UPDATE (5/16/2011): I've moved down the street and now have Verizon FiOS.  Check out my test results over at that post.