I love music.  I’m listening to it on headphones while I work, through my car stereo when I drive, and if I had my way, it would be on most of the time I was home as well.  I finally decided to figure out a way to set up an “always available” speaker system for my backyard patio.  Weatherproof, multiple speakers, and bluetooth connectivity were my requirements.

My music lives in two places:  On my computer.  On my phone.

The majority of my music collection is actually stored in the cloud.  I use an Xbox Music Pass to download and stream all of the songs I want to my devices.

(I use my phone WAY more than I use my PC for this.)  I then connect my phone to a Bluetooth speaker of some kind, and we’re off and running.  I have blown through more types of Bluetooth speakers than I care to admit.  Here’s a short list (they’re all great, my problem is that they’re each only ONE speaker.)

Nokia JBL PlayUp ($149)

This one is awesome because of the sound and the ability to pair it with your phone using NFC.  Just tap your phone on the front of the speaker, and you’re all set.  It also has the best sound of these three.  It also charges using the same micro-USB charger you use for your phone, which is incredibly convenient.


Logitech Bluetooth Wireless Speaker ($149)

This was the first bluetooth speaker I ever bought, and it is excellent, but big.  It’s also powered by a battery, but can take a bulky AC adapter too.  Big sound, but also a big package.  Easily more than 12” long.

Outdoor Technology Turtle Shell Wireless Boom Box ($129)

As a golfer, I’ve always laughed at the scene in Caddyshack where Rodney Dangerfield cranks up his stereo and annoys the entire course.  But I’ve also played with plenty of guys who play some tunes quietly in their carts.  You almost have to get in the cart to hear it, but it’s a nice distraction after you three-knocked the previous green.  This little speaker is very small, and it’s also weatherproof, which means I’d don’t need to panic if it starts raining when we’re on the course.

I thought this was about your patio setup??!?!?!

It is.  So to accomplish all three of my goals, I decided to go with a custom setup.  It involves 2 outdoor, weatherproof speakers, 100 feet of speaker wire, and a Bluetooth amplifier.  Here’s what the final product looks like (pardon the missing lightbulb):



To do this, I started with a reasonably priced set of Yamaha Outdoor Speakers.  They were $69 at Amazon, and have “make your neighbors call the police” volume if you are looking for that.

I added 100 feet of 16-gauge speaker wire for another $10, which was more than enough for this project.  (I used about 50 feet.)

Finally, I picked up the core of the system, a Bluetooth amplifier.  I spent a lot of time looking around for the right one, and finally settled on one from Grace Digital for $169 $84.  (As I write this article, the price on Amazon has dropped to $84, and they refunded me the difference.  This is why I shop at Amazon.)  This little amp takes two speakers, has HUGE range through walls and distance for Bluetooth, and is also really small.


The amp, however, is not weather or waterproof, so I wanted to find a permanent way to use this any time.  If you look at my installation photos, you’ll notice I have a very convenient overhang that I mounted the speakers on.  That overhang is my bedroom, where we have a large set of bookshelves and cabinets running the entire length of the wall.  I picked up a 16” long drill bit for $10, and made a hole from the overhang into those bookshelf cabinets.

I can then run the speaker wire from the amp, which is inside, to the speakers, which are outside, and still enjoy the strong Bluetooth range of the amp on my patio below.  To fill that hole in once all of my wires were in place, I used some insulating foam sealant from Home Depot for $7.

Total cost of the entire project?  $180.  About the same as the Bluetooth speakers I’ve been collecting over the years, but more versatile, more powerful, and a nice permanent addition to my outdoor space.  Come on over sometime, and I’ll have a beer waiting for you.

Using PubCenter for Ads? READ THIS.

Over the past 6 months or so, I’ve been using Microsoft’s PubCenter to publish ads in my app, King Poker.  It’s made me a decent amount of money (I’m averaging about $200/month right now).  Three days ago, however, my revenue stopped, without explanation.  I haven’t had much time to look into it, until today.

If you are using PubCenter, you need to update all of your existing Windows Phone Ad units by September 12th, or you will stop receiving ads.

In order to fix this, it’s pretty simple.  Just go into your PubCenter account at, and update the app that each of your ad units is assigned to.  (This might also be a great opportunity to update your categories, as each of them pays a different eCPM. There’s a great Windows Phone app, PubCenter Adviser, that will tell you, each day, which category is paying the highest eCPM.)

There’s an excellent blog post from the guys that run PubCenter explaining exactly what you need to do:

Remember, you need to do this by September 12, and this does NOT require any updates to your app, thankfully.

What’s On Your Desk?

Almost two years ago (has it really been that long?) I wrote an article titled, “What’s In Your Laptop Bag?”  It contained an exhaustive list of things I carry with me everywhere when I’m traveling to conferences or out-of-town meetings.

Today, I was looking around my home office and realized that it might be useful to do another one documenting all of the gear I have at my desk.  (I work from home, so this is the dedicated space in my house where I work every day.)  There’s another reason I’m writing this, though, and it’s because I received so many great responses and recommendations from the last article.  I’d love to hear what’s important enough to keep on your desk, as well as your recommendations for the “weak spots” in my setup.

Let’s start with a picture (click to enlarge):

DSC_0001 (2)

With the exception of the books on the bookshelves (though I might add a few of those as well), here’s the list:

The Chair

When I decided to work from home 6 years ago, I decided to invest in a good chair.  In my days working for advertising agencies, I had fallen in love with the comfort and durability of the Herman Miller Aeron Chair, and splurged on one for myself.  No regrets whatsoever.

Under the chair, I started with plastic chair mats, but they ended up cracking and chipping away.  I recently picked up an Anji Mountain Roll-Up Bamboo Chairmat, and couldn’t be happier.  It’s gorgeous, durable, and is much easier to move than a giant plastic mat.


The Desktop

I’m currently using a Dell Studio XPS 8100 that I’ve had since March 2010.  Three years is usually my limit on hardware, but I loaded this one up when I bought it, and it’s still going strong.

I also added a bigger video card (two years ago) for the time that I was still trying to play World of Warcraft.  Those days are far behind me, thankfully, but this is the GeForce GTX 560.

Here’s what Windows 8 thinks of my machine:


The Monitors

I’ve been running some kind of dual monitor setup for almost ten years now, so when I’m forced to just work on a laptop natively, it’s painful.  That being said, monitors seem to last forever anymore, so I’ve had these two for 5-7 of those ten years.  The first one is a Dell 2408WFPb 24” monitor.  The second is a Dell E228WFPc 22” screen.  I’ve held on to this smaller one for a while, only because it supports much higher resolutions than most of the monitors on the market right now.

The Webcam

I’ve also been using this for several years now (probably 4), and it’s on my list of things to replace.  Not because it doesn’t work, because it’s excellent, but mostly because of the microphone.  I’ve been doing more conference calls and podcasts, and it just picks up way too much ambient machine noise from around my desk.  In general, however, it’s an excellent webcam for a reasonable price.  This is the Microsoft Lifecam Cinema.


The Smart Card Reader

As part of the security measures at Microsoft, I need a smart card to access our internal network.  The Omnikey 3021 Reader gets the job done, without being very large or inconvenient.  It fits nicely under my primary monitor.

The USB Hubs

On each side of my monitors, I have installed in-desk USB hubs.  Underneath the desk, they’re powered, and connected directly to the desktop machine.  They’re only USB 2.0, but for everything I’m currently doing, I haven’t seen the need for USB 3.0 yet.  There’s also space on either side of the ports to run cables through the desk.  Excellent design.  While this one is no longer manufactured, you can get the similar Belkin In-Desk USB Hub for about $35.

I am also running an iHome 7-port USB hub behind my monitors for the webcam, keyboard, smart card reader, and other USB accessories that find their way to my desk.IHOME 7-PORT USB 2.0

The Power and Networking Hub

I’ve also added a Sunway PowerTap into my desk’s surface.  It adds three power outlets, and two wired network connections, making it easy to plug a machine in temporarily on my desk without having to run a bunch of wires underneath.

The Mouse

This is one of the most recent additions to my office, the Logitech Performance MX Mouse.  I love it for several reasons.  First, it’s very accurate.  Some of the cheaper mice (even wired ones) that I’ve used in the past have been difficult to use for precision work like Photoshop.  This is top-notch for that.  Second, it is super comfortable in my hand.  Finally, it has solved the problem that so many wireless mice in the past have been plagued with: it has a rechargable battery that can be charged while you’re using it.  Just plug in a micro-USB cable to the front of it, and you’re back up and running.  An exceptional mouse.


The Keyboard

I have tried literally dozens of keyboards over the past few years, but none of them have justified the price.  I’m actually still using the default keyboard that came with my desktop machine.  It’s nothing fancy whatsoever, and I’m still looking for the keyboard that will change everything for me.  Until that time, however, I’ll stick with the Dell SK-8165.


The Headphones

A few weeks ago, my headphones broke.  They still worked, but the part that goes over the top of your head snapped, making them unusable.  I spent a few weeks looking around for a replacement, and fell in love with the Beats by Dre Studio Over-Ear headphones.  They’re the first noise-cancelling headphones I’ve ever owned, and the sound is excellent.  (Not to mention they come in obnoxious colors, like the orange ones I got.)  They also completely surround my ears, which means I can wear them all day without my ears starting to hurt from the pressure of them pressing down.


The Speakers

Sometimes, you want more than headphones can offer, and you want to listen to music without wearing headphones.  For this, I’ve had a trusty set of speakers/subwoofer for years.  They’re not for sale anymore (the speaker business seems to churn quickly), but the Creative Inspire 2.1 2400 are plenty to fill my office with enough sound to get my wife to knock on the door and tell me to turn it down.

The Audio Switch

Because this is my home office, and I’m super lazy and averse to wires laying everywhere, I’ve also grabbed an audio switch to jump back and forth between the headphones and the speakers.  I actually mounted it right under my desk, so when I reach down to toggle the button on the switch, I feel like a Bond villain reaching to open the trap door.  (OK, maybe not.)  It also has a volume dial, so it’s easy to modify the volume of my system without having to jump to some menu on my system.  One of the best purchases I have made for my office, and it only cost $15.

The Mobile Phone Stand

I do a bunch of mobile development, and in many cases, I need to test my software on a physical device.  This little stand can often be found as a giveaway at conference sponsors booths, but you can also pick one up on Amazon if it works for you.  It’s the Blue Lounge Milo Phone Stand. It uses “micro-suction” to adhere both to the desk and to your device, and it really works.  When I was writing this section, it took me about 5 minutes to get it off of my desk.  The only real downside to this stand is that my Nokia Lumia 920 needs to be plugged in to transfer my software to it, and the USB port on the phone is on the bottom.  Getting it plugged in and sticking to this stand can be tricky, but it can be done.


The Desk Phone

Working from home, I don’t want to have to use my cell phone for all of my calls.  (Yes, this means I still have a home phone number, don’t judge.)  I wanted a phone that was cordless, took up minimal space, and offered a speakerphone function because I hate holding a phone to my ear.  The VTech DS6321-3 DECT 6.0 Cordless Phone package did the trick.  It comes with 3 handsets which don’t require a phone cord (except for the primary base, which is elsewhere in the house.)  It has a tiny footprint on my desk, but gets a ton of use.  It also has a nice feature (which I don’t use) that allows you to connect your mobile phone to the primary base via Bluetooth, so that when you’re home, you can answer your mobile phone from any of the handsets.  It even uses a different ringtone, so you know which phone is ringing.


The Scanner

I seem to constantly need to scan in a business card, a signed document, or just a photo, and I don’t want to have to walk across my office to the big print/scan/fax/copy combo.  I picked up the NeatReceipts Scanalizer Pro a few years ago to catch up on all of the business cards that were cluttering up my desk.  It comes with some great software that does OCR, and imports that data directly into my Outlook contacts.  Very convenient.  It sits vertically on a stand behind my monitors, but is in easy reach when I need it.


Cable Management

As you can tell from the length of the list already, I have tons of cables on my desk, and I’d rather have none.  To contain the chaos that is the wiring at my desk, I’ve been using Blue Lounge’s CableDrop cable clips.  They’re adhesive, so they’ll stay where I want them to, and they grab and hold the cables I put in them.  They’re great for keeping my keyboard wire in one place, my smart card reader in easy reach without moving all over the place, and even for running the wires directly under my desk instead of just hanging everywhere.  Highly recommended.  They come in a bunch of colors, but the ones I’ve been using are white, brown, and orange.


The “Other” Desktop

As I mentioned earlier, I do a bunch of mobile development, and this includes all of the platforms: Windows 8, Windows Phone, Android, and iOS.  In order to build apps for iOS however, you actually need a Mac to do it.  This is why I picked up a Mac Mini (with 8GB of RAM), which lives behind my monitors, and is a simple input toggle away.  Visual Studio (with Xamarin) connects directly to it, which makes development a snap thus far.


Accessories for the Mac

I also picked up a Magic Mouse and Apple Wireless Keyboard for the Mac, mostly because they’re convenient, but also because I haven’t had much luck with KVM switches in the past, and for as rarely as I’ll actually need to use them, that seemed like significantly more work.  They work great, but the Magic Mouse really doesn’t compare the mouse I’m currently using, and the keyboard is a little small for my everyday use.


The Surface RT

I’m accumulating quite the collection of tablet devices in this office, but there are three specifically that have a permanent place on the desk.  First is the Microsoft Surface RT.  I added the white Touch Cover, but mostly I use this device to test my Windows 8 apps that I’m building.  Visual Studio can connect wirelessly to the device for debugging, so I never need to move it.

Surface RT

Surface Touch Cover (White)

The iPad

In addition to the Mac Mini, I also have an iPad with Retina Display.  This serves several purposes for me.  First, it has a retina screen, so I can see what my websites look like at this resolution.  (Usually not great.)  Second, I can deploy my iOS apps that I’m working on to this device for testing.  Finally, as a dedicated Microsoft guy, it has become a research tool for me.  I now have the ability to see what all the hype is about with certain apps I hear about that might only be available for iOS.  So far, the apps have been the only differentiator from my Surface RT.


The Android Tablet

A mobile development environment wouldn’t be complete without an Android device, and while I acknowledge that there are literally hundreds of Android form factors out there, I picked the Google Nexus 10 32GB to be my reference device.  Thus far, it’s been the tablet I’m least likely to pick up, but I’ve only had it for a few weeks, so time will tell.


The Tablet Stands

For the iPad and the Nexus, I wanted a simple way to make the accessible while charging.  That’s where the Belkin FlipBlade comes in.  It’s a strong but lightweight tablet stand that adjusts to several different angles.  It also folds up flat for when you want to throw one in your laptop bag.


The Laptop

When I’m working from home, I rarely touch my laptop, but I’ve made a place at my desk for it simply so that I remember to update it, install software when I need it, and so it doesn’t just gather dust in my bag.  This is the machine that goes everywhere with me on the road, however, so it needs to be up-to-date.  This is the Lenovo X1 Carbon Touch.

The Laptop Stand

Finally, for the last item in the list, there’s the laptop stand.  This is where my laptop lives when I’m home.  I use the Griffin Elevator Laptop Stand because it creates a place my laptop should go, it’s beautiful, and it leaves plenty of space for things below it.



So that’s pretty much everything on my desk.  At least, that’s everything related to technology that’s on my desk.  I’d love to know what you’ve got on yours, and how it makes your work as a software developer easier.  Link to your article in the comments, or just send me an email if you’d rather not share it with the world.

Ah, the wonders of DHTML…

Yes, that’s not a typo.  This article should have been published 10 years ago.  It’s about DHTML, and apparently Netscape 4.7.

Today, I was cleaning my office and found an old journal that I had created in the summer of 2000.  It was a set of specific workaround for the different browsers at the time, like Internet Explorer 4 and Netscape Navigator 4.7.

File:Internet Explorer 5 logo.svg                                                           

Here’s a look at a few of the pages from this journal:


Browser compatibility was so bad that I actually kept a journal of all of the workarounds I had discovered.

WP_000384 (1)

Scrolling in Netscape 4.7 with <DIV>s

If you have a <DIV> that extends outside the viewable browser windows, the scrollbars will not show up in Netscape 4.7, if you have

marginheight=0 marginwidth=0

in your <BODY> tag.

WP_000386 (1)

Referencing <DIV>s in IE 4.0+, Netscape Navigator 4.7, and Netscape 6.0

First, each <DIV> should be an independent element whose direct parent is the <BODY>.

IE 4.0+

NN 4.7       document.divName.attribute

NN 6.0       document.getElementById(“divName”).style.attribute

WP_000383 (1)

Radio Button Backgrounds

If you have a radio button in a table cell which has a different background color than the <body>, Netscape 4.7 will apply the background color of the body to the radio button.

To prevent this, apply a CSS class directly to the radio button tag.

<input type=”radio” name=”radio2” class=”whiteRadio”>


WP_000387 (1)

Javascript Date Functions

date = new Date();

day = date.getDay();  //returns 0-6

number = date.getDate();  //returns 1-31

month = date.getMonth();  //returns 0-11

year = date.GetFullYear();  //returns 2000

WP_000388 (1)

Operating System Detection

if (navigator.appVersion.indexOf(“Mac”) != –1

if (navigator.appVersion.indexOf(“Win”) != –1

if (navigator.appVersion.indexOf(“X11”) != -1

if (navigator.appVersion.indexOf(“Linux”) != –1

WP_000385 (1)

Referencing <IMG> inside a <DIV> in NN 4.7 et. al.

Each <IMG> must have a unique name.

<IMG NAME=”imgName” SRC=”img.gif”>

IE 4.0+, NN 6.0     document.imgName.src

NN 4.7                   document.divName.document.imgName.src

WP_000382 (1)

Underscores in <DIV> names

Netscape 4.7 does not allow this.  Instead of “this_container,” use “thisContainer” or some other variation.


I recall having aspirations of putting a published book together with all of these tips. Here’s a few observations I made about ME as a developer 12 years ago.

1) I had absolutely no business being employed as a software developer.

2) Browser compatibility, for all we complain about it, is nowhere near as bad as it was.

3) Apparently, I capitalized all of the tags and their property names in HTML.

4) When remembering Javascript, I apparently wasn’t too worried about semicolons.

5) I remember treating this book like Henry Jones Sr. treated his grail diary.  It held all of the secrets to unlocking the power of the web.

Do you have any silly old stuff like this laying around?  I’d love to hear your stories about old development practices you employed.

Asynchronous Javascript Advice

This is a short note to all of the web developers out there that are using asynchronous Javascript in their applications to make pages load data.  For this article/video, I am specifically calling out YouTube and Facebook, but as far as user experience goes, almost everyone gets this wrong.  Here’s a quick look:


Now, I’m not saying that we shouldn’t load data like this, in fact, I’m all for it.  What I am saying, however, is that we need to treat the user experience as a first-class citizen.  Clicking on an item, only to click the Back button seconds later, should not require me to re-load all of the content I loaded moments ago.  Save it.  Restore it.  Remember what I was doing.  Please.

Some of you will argue that those clicks should instead have been accompanied by pressing Ctrl so that it opened in another tab, or perhaps even right-click on the link and choose “open in new tab” from the menu.  Yes, you can do that.  But that is a solution to interacting with a BAD user interface, nothing more.  My mom is not going to do those things, and neither is every other non-technical user your application is meant for.

We, as developers, rarely take the care that is necessary to make our interfaces intuitive, familiar, and helpful.  Instead, we wrote the code that met the requirement.

Who will think of the users?  What other examples of bad async have you encountered?

The Dichotomy of Currency

How much cash and/or coins do you have in your pocket/purse/wallet right now?  My answer to that question, almost 100% of the time, is $0.00.

I seem to find myself living in two completely separate worlds most of the time.  In the first world, every store, website, and vendor I patronize accepts my credit or debit cards.  (Don’t get me started on the reason some places don’t take American Express.)  Despite the fact that the credit card companies have made transactions impossibly expensive (especially for small businesses), these stores still accept them because otherwise I might not shop at their store.

The second world is a seedy underworld where chaos reigns.  It’s the world of cash-only purchases.  In 2012, it’s my experience that if a business only accepts cash, they should be audited every year for potential tax evasion.  Why, in this technological age, don’t you accept electronic payment?

  • I can tip the pizza delivery guy on my credit card receipt.
  • I can tip my waiter at the restaurant on my credit card receipt.
  • I can tip my barber on my credit card receipt.
  • I can tip the barista at the coffee shop on my credit card receipt.

In some cases, when tipping someone that I didn’t have another transaction with, I don’t currently have a better option.  This is an EXTREMELY limited list of people.

  • The luggage guy at the airport when I’m in a hurry.
  • The hotel bellman that helped me take my luggage to my room.
  • The homeless man that convinced me to help him.
  • The kid that cleans my clubs up after a round of golf.

For every other cash-based situation, why aren’t we moving these transactions to the credit card I already used?  For example:  Why can’t I tip the hotel maid ON MY BILL when I check out of my hotel room?  I’ve flatly been told that it’s not possible.

I don’t want to carry cash.  Ever.

It’s dirty.  It’s messy.  It makes my wallet gigantic.  I don’t even have a place to keep coins.  It is easily stolen or misplaced.  It requires change.  Have you ever tried to buy a bottle of Pepsi from a vending machine, only to discover you only have a $5 bill?  It’s maddening.  Credit cards, or the real point of this article, electronic payments, seem like a bright future to me.  Sure, there’s the possibility someone is going to be shaving fractions of cents from my transactions, and there’s always the possibility that the bank will have a software error that “erases” my bank balance.

Except that we already live in that world, whether you realize it or not.  The entire financial industry is not moving piles of cash or gold around to each other when money changes hands…only a series of bits are moved electronically.  So, for those of you that are leery of doing your banking electronically…you already are.

But in order for our civilization to be able to move to an entirely electronic system, we need to be able to accommodate every possible transaction, especially the ones I’ve listed below.  This is where Near Field Communication (NFC) could be the solution to all of our problems. 

Imagine a world where every single person has the ability to receive information, music, messages, and payments from any other person in the world.  You’re probably thinking that we already live in that world, but it’s clunky.  Services like PayPal and Square are working very hard to make this idea possible.  But their current solutions still require you to have someone swipe a card, or give you their email address.

NFC + one of the many wallet solutions that are coming from the likes of Google, Apple, or Microsoft might just be enough to bridge this gap to becoming seamless.  You’ll be able to store all of your payment methods inside your smartphone, and when you want to give someone money, be that a person or a vendor, it’s as simple as a wave of your device to do so.  You enter a PIN, type in the amount you want to pay, and you’re done.  No receipts, no fumbling with your wallet, and NO CHANGE to load into your pocket.

Maybe we’ll start seeing bellmen wearing devices like these:


Wave your phone near their hand, and the payment is made.  I think I’m going to love NFC.

P.S. Here’s an entertaining little video on why we should stop making money, as well.  (Well, OK, at least stop making pennies and nickels.)

The Social Contract of an Invitation

I am a social person.  I tend to invite people to my home, my golf course, or even just to lunch because I enjoy spending time with people.  I also recognize that not everyone is like me.  Many people aren’t crazy extroverts who want to be surrounded by others all the time.

We’ll get to why this matters in a moment.

First, I want to understand a social problem that only seems to be getting worse: the RSVP.  When putting together a large get-together, you tend to invite a large number of people, with the understanding that some of them either won’t be able to, or just don’t want to attend.  If you look around at an invitation site, like or even Facebook Events, nearly every event I’ve ever been invited to looks something like this:

Invited:  55 people

Attending: 6 people

Declined: 7 people

Maybe: 42 people!

Should the organizers of the example event above plan for 6 people to attend?  Probably not.  There will likely be many more than that.  What keeps people from making a commitment?

Question 1:  Why do so few people respond to electronic invitations?

The second part of my thoughts on the “invitation” is arrival time.  Every event has a distinct start time.  It’s the time that the host is planning on their guests to begin arriving.  In my experience (I’m guilty of this too), the average arrival time is nearly an hour after the event has begun.  Is this an attempt to be “fashionably late?”

Question 2:  Why doesn’t anyone show up at the time an event is scheduled?

Before anyone reaches out to call me a “whiny child,” I want to be clear, here.  Yes, this stuff bothers me, because I think about crap like this all the time.  No, I don’t cry myself to sleep when someone doesn’t RSVP.  I’m sincerely interested in the social dynamics of an invitation, and I’d love to hear your perspectives, my dear readers, on these topics.