The Thailand Trip: Day 1 – It Begins

17:25 ET, March 17th 2015

It started with an Uber leaving my home at 2:30pm. I had my first doh moment on the drive to the airport as I realized I forgot my headphones. The driver was nice, but very deaf. 

Once at the airport, like a complete moron, I walked up to the Air China counter and said, “I’m here for the flight to Hong Kong.” The two girls stared at me for what felt like forever but was probably only 10 seconds before saying, “we’ll need your passport sir.” The girl confirmed my final destination of Bangkok and printed my tickets. She couldn’t believe that I wasn’t checking any bags and must have asked me 4 times to be sure. 

Finally, as I got my ticket, I wandered down to security, where a large man holding an iPad with random left/right arrows completely failed to keep up with the passengers walking by and seemed to be utterly unphased by the crowds’ decision to ignore the iPad and walk in whatever direction they wanted.

There are three “trials” at Dulles to get through security. The first is an ID and ticket check. There were two men there, one maybe 21, the other much older. The 21 year old was checking ids and I swear I’ve never seen my ID checked so carefully at security before. Even the older man watching seemed to nudge him to hurry up and let me move on.

The second trial and the third happen at once. First, I opened my bag to take out my liquids. After I was finished the man said I only had to take out my big liquids not the small (whatever that means). I left them all out to be safe. I stopped to take off my “jewelry” (fitbit) and was yelled at for stopping. I put the rest of my things into the tray and went to go through the rapiscan.

The woman manning the scanner was very nice but I had to stop and be checked. Apparently my razer-thin t-shirt caused the machine grief and I had to be patted down. Trial 2 complete.

Trial 3 is the xray machine for my things. They stopped to examine my liquids and I dodged a bullet; I intentionally brought my 4oz deet bottle instead of separating into its own container and the let it go. Grateful, I patiently waited for my bag. But they stopped and stared at the xray machine before ultimately yelling out “bag check.”

“What now,” I thought. A woman roughly my age grabbed my bag and took it to a special station. She seemed confused as to what she was to check, which was strange as I think she was the manager, with people stopping by to ask when their break was or when they could switch tasks. 

She opened my bag and began swabbing it. This alone was strange, what could they have seen on x-ray that would require an explosive swab test? She kept looking around my bag for god knows what until she pulled out my day pack. She asked what was in it, to which I replied, “nothing.” But as she started openning the zippers, I learned that wasn’t true.

“Hey, my headphones. Sweet,” I said.

She said, “yes, but you aren’t going to be happy in a minute.”

She was right. Suddenly it hit me and I said, “oh shit, my knife.”

“Yes,” she said, “would you like to throw it out or check your bag?”

“What? We can’t just mail it home or something?”

“Nope,” she replied, smiling.

“Well I’m not checking my bag. Throw it out,” I told her. I never did see her actually put it in the trash. I wonder if they just keep those things for themselves.

Now that she had torn my carefully packed bag apart, she just started half-assedly stuffing things back in. She let me stop her and pack it myself (thankfully) and I was on my way.

With little time, I caught the train, found my terminal, and started the search for food. I had hoped I would get to stop in the airport lounge since I was flying business but time was against me. At least I didn’t have to buy new headphones. 

I walked and walked down the concourse until I found the lounge and to my surprise, across the way was the Chipotle. For some reason I never hesitate to get some serious gas-inducing Chipotle right before a flight. After chowing down, I noticed I had 10 minutes until boarding time, and started my trek back to the terminal. I told my ex that I would try to call the kids and so as I walked the half mile back to my terminal, we facetimed as I strolled.

The kids were busy on a playdate and eating yogurt so we had a brief chat and I was on my way. I promised to send them a “video letter” from the plane.

As I got to the terminal they were announcing that economy entered from A25 and that first and business class entered from A23. I thought to myself, “how fancy am I, I don’t have to board with the commoners.” Of course, the other business class customers were probably thinking, “who let this poor person with sandals and a t-shrt fly with us?”

I boarded the plane without much fanfare and walked to the gate. There must have been 5 employees there to greet us as we boarded. Before even getting on the plane there was a cart with piles of different newspapers: New York Times, Wall Street Journal, USA Today, and a ton of chinese papers. I grabbed a WSJ and waited my turn.

As you step onto the plane, there is a nice gentlemen who takes your ticket and all but escorts you to your seat. I am shocked as I walk to my seat, not only is this plane huge (2 by 2 by 2 in business class) but the business class section is also huge. I didn’t get to see first but I can only imagine what that is like.

After taking my electronics and day pack out of my ruck and sitting down, a nice woman comes by to give me red slippers. A few seconds later a man drops by a white pouch filled with L’Occitane products (like lotion, lip balm, etc) and a few other things: comb, toothbrush, toothpaste, and a sanitary wipe.

At this point, I am sure this is the life; then came the champagne. And the noise cancelling headphones. This. is. awesome. I wish I could afford to fly business/first all the time. 

Another woman comes by to bring me tonights menu. There is duck, filet, mongolian beef, cheese platters, etc. Two meals served on this flight. There are 6 different french wines, as well as some chinese and other. There is even an insane specials menu.

After takeoff, the woman brings me some green tea and some more champagne and takes my order. I ordered the Mongolian beef thinking I might as well eat chinese food on Air China. However, I soon learn that was just the second to last course. Before she leaves, I ask if there is wifi on the flight. “No, sorry,” she said. Damn. I knew this was too good to be true.

The entire meal was delicious and I’m disappointed I ate Chipotle now and can’t finish everything. Alas, at least I enjoyed it. As I pack up the silverwear, chopsticks, and napkin onto the tray for the flight attendant, she comes by to inform me that we also have a cheese, fruit, and cake course left. Who can say no to that? And so I ate some more. 

Its weird, I thought I read once that food tasted more bland in the air, but the cheese was delicious and the fruit full of life. The cake was 1 inch tall, cut in a circle with a diameter of maybe 2 inches. However, it is misnomer to call this a cake. The cake portion was about 1/8th of height, with the rest being entirely frosting. It was delicious and it would have put my kids in heaven.

Its weird to sit here unsure what to do with myself. I wanted to check my email. And facebook. And instagram. I can’t help but wonder how people were different even just 20 years ago. What was it like to be stuck in a tin can without an iPad, Kindle, in-flight entertainment, internet, etc? It’s so difficult for people today to just sit with their thoughts; to experience what is going on within our own minds.

I decided to listen to music while I waited for the food to come and settled on Deadmau5 – 5 Years Of Mau5. Its very trancey but I actually enjoyed it; it worked well as a backdrop for eating and thinking.

Not long after I finished the lights lining the wall faded from a warm red to a soft cool purple and then finally off. 

Which leaves me here now at 1900 ET, unsure what to do. I had 3 glasses of champagne, but I’m not yet tired. I’m worried I either need to fall asleep soon or stay up the entire flight or risk having terrible jetlag.

Either way I am excited for my trip and actually grateful that there is no wifi. Without this sitution, I certainly  wouldn’t have opened up an editor and started writing. I would not have slowed down to truly enjoy my food. I would not have this intense moment of calm alone with my thoughts.

This is going to be really good trip for me.

your pet project doesn’t stand a fighting chance

Developers! Developers! Developers!

Photo of Steve Ballmer from Wired Photostream on flickr

Your project is probably doomed to fail, which is sad because I bet its really cool and/or helpful. Sadly though, it doesn’t matter how incredible you are pumping out the codez; there is far more to a successful project than that. Below are some problems you are likely seeing and how you can improve your projects success. Note: these suggestions are just as valuable in open source as they are in your workplace.

Problem 1: No one is downloading / using your project

Assuming you actually built something useful, the reason that no one is using your stuff is not that its too complex or that you’re users are too dumb to get it (although simplifying always helps). It’s because you’re not doing a good job at convincing them that Pet Project v1.0 will help them.

Think about the last time you heard about a new library or tool and hit the google, only to find no documentation (maybe some rdoc/javadoc if you are lucky, not that they commented on the methods/classes), no screenshots, no screencast, no examples, and hardly even a readme. At this point, you probably just moved on, realizing you didn’t care that much.

If you are making any kind of user interface, take screenshots. They don’t take that long.

If you’re tool/library is sufficiently complex, make a screencast. It won’t take that long. (Without any evidence of course, I think its this fact alone that made things like rails, heroku, and node so popular. Look at that cool video that built something real and deployed it in less than 5 minutes!)

Go back in time (if you’re old enough) to look at PHP conquering the web at a time when every cgi script was written in perl. It wasn’t just that PHP was easier to read/write nor that all the functions were documented online. It was that there were hundreds of tutorials that could concisely show you the php patterns for talking to mysql or reading a file. So write some tutorials. Write a README too. Done right, a README works as a pretty nice tutorial.

People, especially in this highly connected world are lazy. They are bombarded with information 24/7. They don’t have time to figure out your project just to evaluate it. They want to know NOW! They’ll put the time in once you’ve shown them its worth it. You have to “market” your project to compel people to try it.

Problem 2: Your users don’t stick around

Users won’t typically stick around just because you made something. You can’t be a complete dickhead and respond harshly to their emails/bugs. You can’t ignore them. You can’t just put the documentation out there and call it a day. You can’t say, “its open source, submit a patch.” Most people don’t contribute code back. I don’t know why, but even when its clearly spelled out as an option, they just don’t do it. What people do do (hehe) is ask for help or submit bugs. (They also complain, but whether its twitter or the lunch room, if you are paying attention, you can get the feedback).

So, the question remains, how do you handle this FREE feedback? Do you help the users? Do you write up a FAQ? Do you fix the bugs they report? Do you help them work around their issues (even if it means debugging THEIR code)? Do you plan their improvements and communicate their timeline? Update your wiki?

Its not even enough to do these things every now and then. You have to do them now. If they have to work around your project too much, without your help, they will have no reason to stick with you.

Everyone has an agenda, list of goals, schedules, and goals. If you help someone get to their goals quickly, they will appreciate your help and will probably help someone else with similar issues that they had. This is important for your project, as not only do you keep your users, the users actually start promoting your project in various ways.

Which brings us to…

Problem 3: You don’t foster a community

Its great that you tackled problems 1 and 2 before they even became problems. Pat yourself on the back but don’t start resting yet. If you hadn’t noticed, all of the above takes a lot of time and effort. Luckily, now that you have the users, you don’t need to go at it alone, but you do need to encourage a community so that your users help you.

Of course they’ll tell their friends and boss about how great you tool/framework is. But if you have a forum for help, they’ll probably start helping other users. If you have a mailing list, they will answer questions before you have to. They’ll sit on your irc channel helping people. They’ll help you test out new versions. They’ll be a sounding board for future features. And eventually, they’ll start contributing code.

But you have to foster this. You need to create the mailing lists or forums. You need to link to helpful blog posts from your README. You need to make it clear where to go for support. You need to make it clear how others can help. And if you want help developing, you better write docs on compiling/building/running tests.

You may not always have time to work on your project and as amazing as it feels to be critical to its success, the best thing you can do is make the project resilient to your absence.

Bottom line

All projects have Product Manager(s), Project Manager(s), Community Managers, Support and Documentation teams, Designers, Developers, and QA. One day, when your project is a wild success, various people will fill these roles (even in open source), but for now, as the sole developer of Pet Project, its up to you.

Making SSH Fast

In my day to day work, I frequently need to bounce to various SSH servers to see whats happening or put out a fire. Nothing drives me more insane than having to wait 5-10 seconds for SSH. So I put together the various pieces in one nice package for you. (Note: this is for mac/linux only)

First, update your ~/.ssh/config to be sure that your Host * section has at least this in it:

Host *
    ServerAliveInterval 30
    ServerAliveCountMax 2
    ControlPath ~/.ssh/master-%r@%h:%p
    ControlMaster auto

Second, add this shell script to your ~/bin or wherever you keep your shell scripts:

#!/bin/bash

SSH_OPTIONS=" -MNf"

export AUTOSSH_GATETIME=0
export AUTOSSH_PORT=0

function makefast {
        HOST=$1
        shift
        ADDITIONAL_ARGS=$@

        CMD="autossh -M 0 -f -- $HOST $SSH_OPTIONS $ADDITIONAL_ARGS"
        `$CMD`
}

makefast bamboo@bamboo
makefast gerrit
makefast jira

Edit fastssh.sh and add new lines for the servers you connect to. In my above example, I have 3 servers defined “jira”, “gerrit”, and “bamboo”.

If you want to provide additional SSH arguments like port forwarding, just add them after the hostname/username.

Finally, make sure you install autossh.

Cool, what does all of this mean?

  • .ssh/config
    • ServerAliveInterval: 30 – Check that the connection is alive every 30 seconds.
    • ServerAliveCountMax: 2 – If there are 2 consecutive keep alive failures, kill the connection.
    • ControlPath: ~/.ssh/master-%r@%h:%p – The location to save persistent connection information.
    • ControlMaster: auto – If there is a persistent connection, use it. If not, create one.
  • autossh – This is a tool, that spawns SSH for you and if SSH quits for an irregular reason, relaunches ssh.

Update: Added explanation of some of the configuration and commands below.

[ Discuss at Hacker News ]

MS Office in the App Store: The Business Perspective

Microsoft, I hope you’re listening. I’m about to outline every business reason in the world for you to be in the app store.

From the Student perspective:

Most students need word processing. Fewer need spreadsheets. Fewer still need to give presentations.

Options: $20-$60 for iWork on the App Store, paid with your itunes account that your parents probably pay for or $150 for MS Office Student Edition.

Winner: Apple

From the Small Business perspective:

Most businesses need word processing and excel. Few need presentations.

Options: $40-$60 for iWork on the App Store or $280 for MS Office for Home and Business.

Winner: Apple

From Microsoft’s perspective:

Best Buy, OfficeMax, Amazon, etc all need to make some profit. From what I can tell from wholesale prices online, most stores will sell you Microsoft products for 15% off. Obviously these companies are still making a profit. I’m guessing that MS sells wholesale at at least 20% off and 30% off wouldn’t be a stretch.

This kills the argument “Microsoft doesn’t want to give Apple 30%”. They give 30% to everyone else for handling their business, Apple would be no different.

But more important for Microsoft is that they are starting to lose the game. There are Macs and iPads in the enterprise. Some companies use Google Docs. The App Store is simple. Its cheap. Unless you absolutely had to get Office, most people will be buying iWork. I can promise you that Apple Store employees will be telling every new Mac buyer that they can get office software for much cheaper in the App Store, rather than buying it in a box from Microsoft.

Options: Continue to have declining business in the Office arena or slash some prices, join the app store, and give Apple 30%.

Winner: I don’t know what Microsoft will choose, but in the first case, it’ll likely be Apple that wins. In the second case, they both win.

Time will tell.

When a computer is not a toy

My first computer was a 33mhz Compaq POS. It has Windows 3.1, DOS, and QBasic. (Side note: yes, I got started ‘late’). After I played my first game in QBasic and realized that the words on the screen are what made the game tick, I was hooked and I have been ever since. I think I tinkered with and hacked every single device I could get my hands on. You name it, if it had a way to get custom software on there, I was going to try it.

This morning I came across an article on Lifehacker about converting your router into a wifi repeater, which sounded really cool to me, so I started reading. Unfortunately about halfway down the page I realized I couldn’t care less about this.

Sure, I can reuse that old hardware collecting dust in the garage. But why? To save a few bucks? What happens when I’m at work and my wife is at home with the baby and the thing stops working? Now I’m getting phone calls to do tech support because I saved $100 and can do that one “cool” thing that I never actually needed in the first place.

When I was 13, the hacky free way was always the best way, not because it was free, but because it was fun to tinker. While it is still fun to tinker, some things should just work. My router should just work. My wife, my mom, and my grandma should be able to use it without calling for help.

The same goes for my phone, my “tablet”, and to some extent, my laptop.

The Android argument that you can install whatever you want and that you can even replace the ROM that runs the phone/tablet is insane. 99% of people don’t need that capability. They don’t need the ability to shoot themselves in the foot. I’m sure it would be fun to hack the OS of my iPhone, but at the cost of possibly not making calls? I don’t think so.