Monday, February 28, 2011

The Curious Tale of Ms. Talks-Too-Loud

Like my good pal Dane Cook, I dislike exaggerations:

Exaggerations bug me more than they should. What’s worse, though, is someone who’s made up stories pour out in an effort to impress those unfortunate enough to be stuck nearby (i.e. coworkers and patrons). I’ll explain…

On Saturday Wife and I took ventured out alone while my amazing sister watched Thing1 and Thing2. We didn’t have a lot of time so we did what every super hip, sexy couple does: went to Panara and played cards.

Although our riveting games of Speed and Gin were a much needed distraction from life’s events, they were no match for Ms. Talks-Too-Loud. You know who I’m talking about—that person several tables over who never learned how to use indoor voices. In this case, Ms. Talks-Too-Loud works at Panara.

IMG_20110226_214214And she’s completely to the brim full of crap. I understand the pressure to be cool in front of your friends and make up crazy, ridiculous, absolutely-did-not-could-not-happen stories. I struggled with that as a kid but have since learned to embellish my stories solely with the facts and only the finest, choicest self-deprecating humor. I think most adults eventually reach this stage, too.

Ms. Talks-Too-Loud has not reached this state. Here are a few thoughts we overheard:

It makes we want to pull my hair out. My hair’s not even real and I want to pull it out.

If I was poor and homeless again and had a baby, I’d totally sell my breast milk.

When was I homeless? (stalling) (stalling) (stalling) After my parents kicked me out.

My parents didn’t even find out I was in jail until two years later.

I once went $500 into debt buying everyone drinks.

I’ve dated a bunch of losers.

This garbage just kept pouring out. She wasn’t even rationing it like most people—sprinkling it into normal conversation—it was just an unrelenting stream of word vomit. The highlight of the evening came when Ms. Talks-Too-Loud was serving a customer, Mr. Full-Of-Crap-Too:

Ms: I was in my prime when I was 17-20…getting drunk all the time.

Mr: When I was 21 I was getting drunk 5x/week! It was awesome.

Ms: Oh I was doing that when I was 18.

Mr: well yeah when I was 18 it was like 4x/week (of course).

To help distinguish between Ms. and Mr. above, I color coded their lines to match their artificial tans (for the unaware, it’s February in northeast Ohio and we haven’t seen the sun in a few months; most of us Caucasians look like vampires).

Let me just close with a few reminders before anyone complains that I’m just a grumpy old man:

  • I’m not old
  • This person was talking way too loud and we had no choice but to listen.
  • Absolutely everything she said (at least what we could hear) was like the above. For 30 minutes.
  • I hate it when people brag about sucking at life and I hope you do, too.

Saturday, February 26, 2011

Does Tapping the Can Prevent A Massive Fizzy Explosion?

Some feel compelled to tap the top of a can of soda before opening, especially if it’s recently been dropped. Does this precaution help or is just something our know-it-all mothers made up? My guess is that this action has no effect. Let’s test my hypothesis:

Although the results were disputed by those present, I’m sure you’ll agree with me, Internet, that the tapping had no effect and the complete lack of a fizzy mess was an epic disappointment. Additional tests, including trials with other types of pop are necessary.

Thursday, February 24, 2011

10 Reasons Why We Should Give Google More Credit

(TL;DR: jump to the end for the list)

In light of recent Google-bashing, I feel compelled to speak up. I’m an engineer and I build stuff every day.

Building simple stuff is hard. Building complicated stuff is harder. Building complicated stuff that looks simple is the hardest of all.

Google** is insanely complicated but it looks simple. This is why people are getting carried away with their disappointment in seeing some spam in their search results—Google makes it look easy. This is one big feature that is apparently hurting them a smidge now. It used to be that while other sites would make the act of running a search look really complicated so you’d be impressed Google just worked. And it was (is) crazy fast at the same time.

Features like simplicity and speed are not accidental and are definitely not cheap. The fact that when I enter a word or two into Google and get a highly relevant result most of the time still shocks me. Google builds a model about what I’m asking for and brings in far more context than I think most people realize. I touched on this a bit before when I demonstrated how Google uses your search history to improve your results. They also use your country and if known, your approximate location.

Knowing your location may seem unnecessary at first but consider queries for something like “soccer”. Soccer means something completely different in the US than in the rest of the world. No wait, I meant “football”. “Soccer” is the same everywhere. Damn my slow human brain! The point is Google knows what you meant depending on where you are.

And your history really does help, e.g. “java”. That’s a programming language to me, but a tasty beverage to others. OK, actually Google is pretty fixated on the programming side on that one. Here’s a better example, “script”:

image

Google isn’t all showy or anything, it just gives me results.

But sometimes the results suck. Here are a few reasons to give Google a break:

  1. The results only suck occasionally. I use Google a lot. If you do, too, check your history to see just how much:
    image
    >50 searches most days…that is more than I would have guessed! 34k total searches? Yikes!
  2. Google scales more than you can imagine. Watson impressed the world when it beat the best humans in the world at their game, Jeopardy!. But Watson was only playing one game. Google does something similar many billions of times each month (and that reference is from 2008). For more crazy stats, check out this fact sheet on Youtube
  3. Google does way more than search:
    image
  4. They do search way better than you*. Bing does a decent job and Amazon holds its own within their site, but pretty much no one else does
  5. For almost all uses, they are completely free
  6. They are the fastest game in town. Speed matters a lot when you do >50 searches/day
  7. For the most part, they aren’t evil, sometimes doing things that surprise me by how not-evil they are. For example, when you first install Google Chrome, it asks you what search engine you want to use:

    choose-search
  8. They can read your mind with instant search, which is useful since I often don’t even understand what it is exactly I want myself
  9. They index new content ridiculously fast. I often find my questions on Stack Exchange in Google results within minutes of the question being asked. It’s freaky. Plus they search real-time results from Twitter which is pretty impressive.
  10. What are you going to do? Do all your googling with another search engine?
  11. Google will take over the world and you better be on its good side when it does

I’m not saying that I don’t want something better, just that I appreciate what we have.

*probably
**Many references to Google would probably work with Bing, too

Tuesday, February 22, 2011

The Kids’ Castle

We’ve tried a couple of gyms since Things 1+2 arrived. We’ve found that the child care provided was a mixed bag at best, even though it was far from free.

The Stow-Kent Fitworks was terrible almost all the time. They had one person that was actually great. She was the only one we could leave Thing1 with because the others would just sit and read magazines while the kids they were supposed to be watching fell into anarchy ruled by sugar-crazed, toy hoarding bullies. As if limiting ourselves to using the “Playland” only when the single decent employee was working wasn’t difficult enough, it was open just five hours a day during the week, two hours Saturday, and closed Sunday.

So that’s what we were coming from when we went to the Natatorium in Cuyahoga Falls. The “Nat” is a massive structure with fantastic facilities. Beyond its friendly staff, fancy equipment and ginormous pool, it has one killer feature that we haven’t seen anywhere else: an amazing child care center.

What follows is my letter to their child care center, the “Kids’ Castle”.


The Natatorium Health and Fitness Center
Attn: Kids’ Castle
2345 Fourth Street
Cuyahoga Falls, OH

Dear Kids’ Castle Staff,

My wife and I sporadically exercise at your gym and entrust our kiddos to you, Maya and Charlotte. After experiencing the poor state of child care in other facilities, I can confidently say that we’ve stumbled upon something incredible in the Kids’ Castle.

You wouldn’t believe how excited the kids get on the way to the gym, knowing they get to see you guys, watch movies, color pictures and play play play! You’re all truly amazing. Believe it or not, their joy in visiting you encourages me to be less of a lethargic bum and exercise more often if only so they can drop in.

DSC_0084

You each go above and beyond the already difficult task of focusing your attention unfailingly on our children (the thing they crave the most). This is exemplified by how each of you cares for Charlotte. She’s always very excited to play until the moment we leave. Invariably one of you consoles her warmly until, within three minutes, she’s off playing, coloring, or preparing to steal another child’s artwork.

From my wife, my ordinarily shy children, and me, please accept our sincerest thanks for all you do.

With admiration,
Michael Haren

Monday, February 21, 2011

Hey Zoo Membership Dude: A Letter from Tammy the Tamarin

Cleveland Metroparks Zoo
3900 Wildlife Way
Cleveland, OH 44109
aspacher@clevelandzoosociety.org

Dear zoo membership dude! What’s up? I’m one of those tamarins you have over at the Rainforest.

Tamarin_portrait_2_edit3

I like to think of myself as a modern mammal. Sure I’m street smart and totally rocking the Bieb on my chin but more importantly, I follow this guy named Seth Godin. He’s like Vinny Chase’s manager, Ari Gold, except he’s real, into marketing, a genius, and not excessively vulgar. Maybe it’s not a great comparison but we’re getting off-topic—the point is we’ve got a problem.

You see, according to this Seth guy, you’re supposed to be “treating (your) best customers better”. With that in mind, let me tell you about a family that came to visit me on Sunday.

These guys, we’ll call them the Harens (Sarah and Michael). They love the zoo and visit all the time. They have these two adorable little girls who find me absolutely enchanting. I’m not even exaggerating—I dropped a carrot and they went crazy. I scratched my tail and I thought they might be having seizures they were giggling so much.

DSC_0103DSC_0109

The problem is that they can’t come so often anymore because you changed the rules on their membership. They hang out with my pals over at Akron, too, and this past year got a companion-plus membership there. They’ve been using that 100% reciprocity thing to visit me until recently when that policy suddenly changed. Now only two-thirds of their membership is covered at 50%.

Changing the terms midway through the membership? That’s monkey business*!

So in short, what they thought was going to be a fun free day at the zoo was actually a $19 day at the zoo. It’s not a lot of money, but it was an unexpected expense for a budget-conscious family and will probably be enough to keep them from driving an hour to see me, which is hardcore lamesauce if you ask me.

I bet you can fix this if we put our opposable thumbs to good use.

Yours truly,
Tammy the Tamarin

 

PS: here’s a picture of one of my fans dressed up as a marsupial. It seemed relevant since I’m a animal.

DSC_0104

Friday, February 18, 2011

Windows: Improving the Command Window, if Only Slightly

I’ve long loved the command line user interface. Ever since I fully immersed myself in Linux during college, I have loved me some ssh goodness. I have enjoyed popping open OSX’s Terminal and finding familiarity there, too.

But on Windows, cmd.exe just isn’t enough. Recent versions have brought tab completion but it’s still a far cry form a tcsh or bash shell. I tried using Putty and Cygwin to simulate the experience on windows but it never rang true and isn’t available when I use other machines or servers.

One breakthrough I discovered today helps a lot, though: you can make your window wider than 80 characters. I’m embarrassed that I didn’t discover this years ago. This is for the poor saps like myself who didn’t know:

imageimage

And there you go:

image

While you’re in there, you might as well choose a pretty font like Consolas, too.

Wednesday, February 16, 2011

How Not To Host an Open House

Wife, kids and I went to a few open houses over the weekend and gathered a fresh batch of tips for how not to host an open house.

1. Care, if only a little

First, as a realtor showing a home, you should…care. At least a tiny bit. You should be prepared to answer basic questions about the property. For example, acceptable answers to the question “where is the property line?” do not include guesses, assumptions, or “probablys”. You’re also not doing a stellar job if you refer me to the county’s website, especially if you tell me the wrong county.

2. Clean up Inside and Out

There’s really no reason why vacant houses should have random piles of junk sitting around. There might be someone out there who’s only interested in a three bedroom, two bath house with full drum set and mystery room of junk that wasn’t valuable enough to take, but I bet that’s a niche market.

IMG_20110213_145430IMG_20110213_145455

If you’re into recreational “chemistry”, take your hobby with you.

IMG_20110213_145200

I appreciate that you had the home winterized—really—but is it really necessary to have toilet parts and water meters sitting around? I mean, once the water’s out, your good, right?

IMG_20110213_150908

If the house is totally empty except for one can of Raid, what image do you think I’ll form in my mind when I find it? Of all the things I will need in this house, it’s a can of lightning-bolt-bug-killer? Ewww, no thanks. Now that I think about it though, killing flying insects with lightning is pretty bad-ass. +1 to you, Raid-bottle-designer-guy.

IMG_20110213_150644

Also, if you’re going to go to all the effort of hanging around a house for three hours, you might as well arrange for the walk up to the house to be shoveled free of snow and ice. In the very least, put down some salt so we don’t break our nosy bums poking around other people’s houses.

Oh, and turn the heat up! I’m all about saving energy, especially in vacant homes, but during an open house it’s not vacant and it’s friggin cold down there in the cellar. It’s really your lovely finished basement but when it’s cold enough to store popsicles, it gets downgraded to a cellar with nice paint.

3. Don’t hound me about the guest book

Yeah, I get it. You want me to sign that stupid paper with that crappy pen that barely writes on the Granite Countertops you keep reminding me about. Why? So you can get my info and follow up with me to pressure me into buying a house or selling mine, and to show your client what a huge success your open house was. Unfortunately I don’t want any of that. It might be easier if you didn’t insist on so much information. Name? OK, sure I’ll initial your paper. Phone, email, agent, DOB, pant size, party affiliation and blood sample? No, thank you, my base-pairs are private if you know what I mean.

This may be hard for some of you to hear but I think I need to be explicit here: I DO NOT WANT YOU TO CONTACT ME. If I’m interested in the house, I’ll call you. Oh, and your client doesn’t care how many people came to the open house—your client wants offers, not showings, so just keep telling them “it only takes one!” until they lower the price enough to get one.

4. Don’t follow me around

I’m not a creep. I’m a normal guy. I wear glasses even though I have contacts. I’m a computer programmer. I drive a Honda Fit. I wore a tiara at lunch yesterday because my daughter asked me to. I’m carrying a baby. I’m about as non-threatening as you can get. What do you think I’m going to do? This place is empty, anyway (well, mostly; see above)!

If it’s hard to keep up with me it’s because I’m avoiding you. Chasing me around only helps to rush me through the house, decreasing the chances that I’ll see something I like.

5. Don’t follow me around, hounding me about the guest book

The only thing worse than bugging me about the guest book or following me around is doing both simultaneously.

6. Don’t tell me scary awful stories if I avoid the guestbook

After caving into the pressure and initialing your guest book, don’t follow me upstairs and tell me this:

Realtor: “I see that you were hesitant to sign the guest book.”

Stop.

Realtor: “Ever since the terrible tragedy at our office…”

Please stop. Wait…what? Did you have a data breach or something? You thought I didn’t want to sign because you’d lose my info into the wild…? Huh?

Me: “Oh? What…‘terrible…tragedy’…?”

Realtor (dramatically hushed): “We’re still very upset about our agent that was murdered at an open house.”

Me: “Oh, I hadn’t heard about that”

Me (turns so only Wife can see me mouth words): WTF WTF WTF

Realtor wandered away and that moment just floated there for a while as Wife and I kept glancing at each other with painful expressions of confusion and surprise.

I’m sorry for your loss, but congratulations, now we can’t buy your house because you told me a story about murder in it. Good work.

Hyper-V: What are these *.avhd files for? Snapshots? But I have no snapshots!

(Note: TL;DR is at the bottom in bold.)

Virtual machines are crazy awesome. One of my favorite features is that you can snapshot a VM at any point and then later roll back the machine to its exact state at that point. The way this is implemented in Hyper-V is with a differencing disk. That is, the VM uses the normal virtual hard drive that you’re probably familiar with—a giant VHD file which represents the VMs disk—and adds another disk on top of that to record any changes to it without affecting the original VHD directly.

My machine has one VHD and two AVHDs from snapshots:

files

Think of this like layers of transparencies—remember those, kids? The first plastic sheet represents the base VHD. When you take a snapshot, it’s like laying a clean sheet overtop of the existing sheet—all your changes are recorded on the new sheet. In Hyper-V, these extra sheets are AVHDs. Additional snapshots do the same thing—more sheets, more differencing disk AVHDs. To rollback to a given snapshot, you just peel off a sheet. Are hopefully more (but possibly less) clearly:

mockup

All that background should help explain why you will find ever-increasing AVHD files on your system if you play around with snapshots. But why might you find AVHDs if you no longer have any snapshots?

no-snaps

Consider what you’re asking Hyper-V to do when you remove a snapshot (as opposed to rolling back to it). Since all the changes since the snapshot are literally in a separate file, it must merge the AVHD into the VHD.

shutdownAnd here’s the rub: Hyper-V will only do a merge when the machine is shutdown or turned off (pausing it isn’t enough). This explains why I found a couple of AVHDs from months ago even though I didn’t have any snapshots—the machine simply hasn’t been completely shutdown in…years (reboots don’t count—Hyper-V won’t merge unless the VM is really off).

If your AVHD is big, this will take a long, long time. Fortunately, cleaning up the AVHD files should improve the VM’s disk performance and save the host machine some disk space (50% in my case).

merging

Monday, February 14, 2011

“Host is not allowed to connect to this mysql server” [Solved]

Depending on your setup, MySql may be locked down pretty tight. This is good. However, today I needed to connect to a database from another host. Googling eventually yielded the appropriate commands but to document the solution for my future self, I’m logging them here.
The issue is that MySql, when properly configured, only allows connections from a very limited set of hosts. Often this is simply “localhost”, which satisfies the very common case of apps/db all on one machine. If you need to access the system from another machine you need to do two things:
  1. Enable MySql to listen on an address (typically TCP/IP port 3306)
  2. Enable a remote user/host to connect with some privileges
Item 1 is covered elsewhere in depth, and in my case is configurable through the MySQL Server Instance Config Wizard. Done.
The solution to item 2 however, was surprisingly difficult to uncover. Here’s the error that probably brought you here:
$ telnet mysql_server 3306

Host: ‘urmachine.domain.com’ is not allowed to connect to this MySQL server

Connection to host lost.
When the connection works you get a handshake request, which fails unless you speak MySQL but the point is you can connect.
What you need to do is enable the host listed in the error message to connect as a particular user. Login to your MySQL server and open a local connection:
$ mysql -uroot -p
Enter password: ************************
Welcome to the....

mysql> 
To see who's already enabled, run this query:
mysql> select host, user from user;
+--------------------+---------+
| host               | user    |
+--------------------+---------+
| 127.0.0.1          | root    |
| localhost          |         |
| localhost          | foobar  |
| localhost          | root    |
+--------------------+---------+
4 rows in set (0.00 sec)
Now we need to add a new record. I'm interested in simply reading data from my remote host so I'm granting "select" privilges. If you need more, adjust the command accordingly, up to giving the host everything with the "all" keyword:
mysql> grant select on urDatabase.* to urUser@'urMachine.domain.com' identified by 'urPassword';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.05 sec)
And now we're in the user list:
mysql> select host, user from user;
+-----------------------+---------+
| host                  | user    |
+-----------------------+---------+
| 127.0.0.1             | root    |
| localhost             |         |
| localhost             | redmine |
| localhost             | root    |
| urMachine.domain.com  | urUser  |
+-----------------------+---------+
5 rows in set (0.00 sec)
The above applies to MySQL 5, and is probably adaptable to other nearby versions.

Friday, February 11, 2011

Recovering from SQL Server Error: “Syntax Error in TextHeader”

After years of working with SQL Server, I thought I’d seen it all. Here’s a humbling reminder that I haven’t:

TITLE: Microsoft SQL Server Management Studio Script failed for StoredProcedure.  (Microsoft.SqlServer.Smo) For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.1600.1+((KJ_RTM).100402-1540+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Script+StoredProcedure&LinkId=20476 ADDITIONAL INFORMATION: Syntax error in TextHeader of StoredProcedure. (Microsoft.SqlServer.Smo) For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.1600.1+((KJ_RTM).100402-1540+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&LinkId=20476 BUTTONS: OK

This occurred when I tried to script out a stored procedure so I could change it. Not a good sign. Fortunately I can fallback to good old sp_helptext to recover the procedure:

sp_helptext 'procname'
-- Results in the procedure’s code

Nifty, right? But why did this happen? It seems SQL Server Management Studio or whatever it uses to script out objects objects to nested comments in the script header. This is what I had, which is a no-no:

/*  example execution:
EXEC procName
  @intParm1=3 /*explanation*/  
 ,@intParm2=null /*explanation*/  
*/

ALTER PROCEDURE [dbo].procName  
/* proc definition*/

What I was trying to do was include a sample call to the procedure to aid future development. This was easily fixed by using the single-line comment syntax instead:

/*  example execution:
EXEC procName
  @intParm1=3 --explanation  
 ,@intParm2=null --explanation  
*/

ALTER PROCEDURE [dbo].procName  
/* proc definition*/

(Hopefully it’s obvious that I don’t normally write procedures with obscure names and parameters like I have above.)

Tuesday, February 8, 2011

Generating Event Handler Skeletons in .NET

Here’s a trick I wish I’d learned much earlier in my career as a .NET developer. You can generate event handler skeletons via the dropdown list above the code window:

image

I don’t know what those dropdowns are called—let’s go with “object” on the left, and “event” on the right. In this case I want to implement the “Item Data Bound” event of a DataGrid object (I don’t much like webforms but this legacy component is full of them so don’t judge me). First choose the grid from the object dropdown:

image

And the editor inserts this lovely snippet (or takes you to it if it already exists):

image

This works with varying success outside of webforms, too.

Let’s do one more related tip I’m sure you already know about: generating skeletons for classes you inherit or interfaces you implement. Of course you get Intellisense:

image

But after you choose the thing you want to inherit or implement, click on that little blue line (it’s easy to miss):

image

And you’ll get a handy generator option:

image

Which when activated, inserts a nice skeleton for you to fill in:

image

By the way, the keyboard shortcut for activating that menu is c-..

Happy coding!

Monday, February 7, 2011

I Guess YouTuber’s *Do* Advertise

In my last post I declared an end to traditional comedic advertising on television and ended with a question about replacing it with YouTube:

But what about actual advertising?

That is, what will happen during all those TV timeouts when we start depending more on YouTube to entertain us? I guess the value of those time slices will drop to reasonable levels for one (that is, until the medium really falls apart). And two, more advertising will creep into viral videos. Taking my brother’s challenge, let’s analyze my favorite video of all time, Marcel the Shell as is:

image

image

image

I bet these are all incidental, too. Imagine if it was intentional?

image

I think Marcel’s expression is appropriate.

The End Of Super Bowl-Style Advertising

I’m sure I’m late to this party but here it goes for those just arriving with me: the era of the big Super Bowl commercial is over. I’d like to enter into evidence exhibit A, a tweet from my coworker:

In the age of youtube and everyone-is-the-creator-ism, "funny commercials" just aren't compelling to me.

He nailed it. When I have access to unlimited amusing clips (usually with no ulterior motive), watching a three hour football game is hardly an efficient delivery mechanism for untested, untargeted clips designed to manipulate me.

Sure I chuckled at several of them, including this favorite that I’m sure you’ve seen 800 times already:

And this close runner-up:

But those professionally produced, multi-million-dollar barely match up to what Youtubers put together. Need I remind you?

But what about actual advertising? I for one welcome our ad-targeting, crowd-sourced robot overlords and judging from yesterday’s performance, the sooner they arrive the better.

A Case For Rolling It (All) Yourself

There seems to be this idea permeating the software development industry that you should go with off-the-shelf stuff whenever possible. The theory is that custom software is expensive and doesn’t age well compared to vendor-supported packages. For libraries and backend pieces, I mostly agree with this (Log4Net FTW!). However, when it comes to user-facing applications, I think gluing together a bunch of components is usually a huge mistake.

Take as an example sites that kick you off to a Yahoo store to make a purchase. You’ve probably purchased from sites that do this well and not so well. The sites that do it well leverage the API in such a way that you barely leave their primary web server and might not even notice the transition to Yahoo.

You can tell the sites that don’t do well this when clicking a product link or anything store-related takes you to a site that looks totally different. These bad sites often send you on your voyage to the ecommerce site by making you read a page full of instructions written in serious language and bright colors, basically blaming anything that goes wrong on your failure to adhere to the instructions. This is the Internet—we don’t use instructions—guide me for crying out loud.

image

Manning publishing, a huge seller of technical books, seems to do a just OK job here. They have their own store front but pass off the heavy lifting to Yahoo. Things are integrated pretty well (though the UI change is still jarring) and you can actually buy a book easily enough. But processing ebooks isn’t so smooth. Yahoo doesn’t handle ebooks at all and thus has to hand customers back to Manning to deliver them after Yahoo takes your money. Instead of just emailing out the PDFs or taking you directly to a download link, there’s a more-complicated-than-it-needs-to-be-especially-for-a-computer-books-seller process that breaks at least a dozen of Steve Krug’s rules.

How about the good guys? Here’s an example of a site that has either rolled all their own stuff, or integrated their dependencies so tightly that they seem baked right in: Dropbox. I hear it’s built on Amazon’s cloud technologies, but I really have no idea (which is good, because I shouldn’t). Their site has lots of separate areas that seamlessly work together to share my login cookie, account info, etc.:

SNAG-0006SNAG-0000SNAG-0005SNAG-0002SNAG-0001SNAG-0004

Those are: the Dropbox file service itself, a help site, an RFQ form (prefilled with my info), a Wiki, a referral page (prefilled just for me), and a feature voting app. The Wiki engine is definitely a third-party application (it’s credited in the footer) but it makes no difference because it’s been so tightly integrated that the theme is flawless, and my account just works without logging in again.

The bad guys call attention to the breaks between services by requiring extra instructions, confusing us with glaring UI changes, and in general, eroding the user experience. Sometimes it seems like the bad guys do this on purpose as if to call attention to how cool and sophisticated their sites are. The good guys show how awesome they are by sanding down the transitions so smooth that they are invisible and no one notices them.

If your users notice the cracks in your infrastructure, you’re doing it wrong.

Now, having said all that, let me give a few of you an out. If the technology you are using has little to do with your actual business, don’t worry about it. For example, it’s perfectly reasonable for an author to direct users elsewhere to buy a book or post questions to a forum because these aren’t what the author does and running a snazzy website doesn’t add much value. But if literally taking money for books is your direct business, you better make that process as smooth as possible.

An Extreme(ish) Company Planning Conference

Twice a year the management of my company congregates at an off-site location for a planning conference. These things are legendary for a few reasons. First, no one except the President and his right-hand man have any idea what’s happening in advance. The general playbook is for management to get an equipment list and a heading a few days or weeks before the conference, and then an actual address or waypoint the morning of.

Once you arrive, you still have pretty much no idea what’s happening until it happens. The President disseminates unclear, vague, and inaccurate information throughout the days leading up to, and including the conference itself. This is all in good fun and as I recently experienced personally, culminates in a good time. The shenanigans serve as good breaks between the serious business that is actually conducted the majority of the conference.

I was invited to participate in part of this Winter’s planning conference, a rare honor extended to seven others. It is common to have non-management employees such as myself crash these events at the President’s request and I was happy to oblige.

imageIMG_20110204_095505IMG_20110204_101102

I arrived at a lodge Friday morning after a 2.5 hour drive to the Allegheny National Forest in Pennsylvania. This place wasn’t in the middle of nowhere, but it was pretty remote with narrow, winding, hills and no cell service. I met up with my group of crashers and landed in the conference room with approximately 20 managers. We observed an all-business presentation that was wrapping up before arriving at our primary agenda item “Safety on the Mountain; Battle Briefing”, presented by the President.

I should mention what the equipment list looked like, which gave the only other hint as to the day’s activities:

Long sleeve base layer top, Lightweight polar fleece mid layer top, Windproof outer layer top, Windproof shelled insulator pants, Polyester underwear, Wool hiking socks, Well broken-in hiking shoes, Windproof fleece gloves, Hat with earmuffs

And a list of optional gear which “will increase your ability to survive the terrain and unknown weather conditions”:

LED headlamp or flashlight, or both, Unbreakable water container, water bottles, Gatorade, etc., Snowshoes (editor’s note: !), Ski poles, Daypack, Compass

At first blush this was an intimidating list, and at second blush very expensive. After thinking about it though, I realized that hiking around the mountains is probably a lot like something I’ve actually done: skiing. So instead of buying $1500 worth of gear, I decided to just dress appropriately for skiing. The only things I bought were a $5 Under Armor-like base layer at target and some reimbursable snowshoes.

Back to the battle briefing. The President laid out the rules for an afternoon game of capture the flag. This was modified for the environment and took place in about six square miles of hilly, dense forest crisscrossed with dozens of trails:

image

I marked my team’s path with question marks because I was never really sure where we were. Our initial quest was uneventful; we didn’t make contact with another human for nearly two hours.

I’ll spare you the details and give you just the gist of the adventure. We hiked for about four hours playing the game. Some of us were captured in “POW camps” while others enjoyed well-supplied base camps:

IMG_0197IMG_0211-2

We only got off track a couple of times and easily corrected by following our footprints backwards until we found the trail again. It only occurred to me just now that our footprints through the snow added a great deal of safety to an otherwise dangerous climate.

I learned a few survival lessons:

  • You can’t rely on cell phones—they didn’t work there
  • The latest Google Maps supports cached maps, which did work on my phone really well even without service (since I downloaded them in advance—planning FTW), though I relied on my paper map for all important navigation
  • Forming consensus among a random group of people is easy—most people like to follow. Forming consensus at a leadership conference is hard because most people like to lead
    • Instead of saying things like “what do you think of two people hiking down this path?” I found myself getting more assertive than usual to move along the decision making process with language like this, “X and I will hike down this path and then this one unless there’s any objection. No? Let’s go.”
  • Hiking in temperatures in the 20s is easy. Standing still becomes very cold very fast.
  • Snow shoes really work, even if it doesn’t look like it
  • Two-way radios don’t work worth a damn outside of line-of-sight. This technology hasn’t improved much since I had a pair 15 years ago.
  • Don’t delay when the President offers you a ride or you’ll have a lot of walking in your future (just ask @gbtg)

IMG_20110204_094731IMG_20110204_094705IMG_0187IMG_0188IMG_0199

I was struck by the beauty of the scenery. It was a neat place with…a lot of trees. And snow. When the kids are a bit older, I can definitely see a trip out here as a nice way to unplug.

[Note regarding the pictures: I took these with my phone and my pocket Canon point-and-shoot, usually while moving. It was very difficult to capture the scale of what I was looking at—how remote I was, the density and darkness of the forest, and the cold. I wider lens might have helped, as would more people in the shots for perspective.]