The Little Engine That Couldn’t (Coding By Train: Leg 3 Chicago to Denver)

Our train arrived in Chicago an hour late (a pattern that I’d soon learn is quite common). I can;t say anything about the city itself, as I never left the train station. From the ride into the Windy City, I was only able to make a single assessment: the place looks massive. Without a decent public transit system, I couldn’t imagine trying to make my way around.  I walked through the food court to see what local food I could sample. I now understand why vendors offering local fare are present in airports and train stations. It’s not cheesy tourism. For some travelers, it’s a close as they’ll get to the city. I’ve always had the luxury of time in the past to explore but when the forces of time are against you, you settle for the depot hot dog stand.

By 10am, the station was filling up with Bears fans making their way to the stadium. The long line at my departure gate was comprised mostly of Cornhusker fans coming back from a victory over Northwestern. They have long memories, including the loss to the Yellow Jackets in the 1991 Citrus Bowl (during my glorious freshman year)  We shared a laugh about how every football program has a Voldemort in its history, that coach who inflicted so much damage that they’ve earned the title of He Who Shall Not Be Named. This was confirmed by the t-shirt of one fan listing the coaching lineage from Devaney to Pellini with one redacted. (Interestingly enough, both school’s Voldemorts are named Bill).

It wasn’t long before I realized that I was aboard the Little Train That Couldn’t. Two hours outside of Chicago, the train stopped and we had to wait for another engine to complete the journey. Conspiracy theories about the efforts of Norfolk Southern, Union Pacific and other freight trains to ruin Amtrak were tossed about at dinner. One of my companions rattled off a statistic of 7% on-time arrivals for Amtrak, a stat that I found highly suspect until I checked the Amtrak website  (11.5% on-time arrival for the California Zephyr in the month of September)

The second night of sleeping was surprisingly more comfortable than the first. I didn’t get a neck pillow but I did learn how to work the lower leg rest in the recliner. The morning leg was pleasant enough with another grit-based breakfast and a view of sunrise from the observation car. Not much in terms of scenery though as the landscape between Chicago and Denver looks like a stock image set on a loop.

On the coding front, I didn’t get much done. I spent most of the evening unsuccessfully trying to get a VPN client to work (Thanks, Yosemite).

Coding By Train: Leg 2 (Washington, DC to Chicago)

After a snack in Union Station, I  boarded the train for Chicago. There was an option to make reservations for dinner in the dining car. Seating was limited and community seating is used, providing an opportunity for you to meet new people. I opted to skip dinner in lieu of hanging out in the observation section with few beers (shocker!). This time the only decent offering was a Sierra Nevada IPA. I spent most of the early evening looking at the beautiful trees, which had started changing colors and reinstalling Xcode. I made the mistake of not checking for compatibility of Yosemite with older versions (which I use to support legacy apps). Without wi-fi on this segment, I was forced to consume 1.6 GB my precious data plan’s monthly allocation. Note: Xcode 4.6 still does not run on Yosemite.

The most interesting part of the trip after sunset was listening to a One Direction look-alike try to chat up a young lady traveling solo. All was going swimmingly until his dad came over and started making jokes. I closed out the evening with some light reading (Marcus Zarra’s Core Data). I didn’t get much actual coding done this day but still felt productive.

As the first overnight portion of my trip, the lingering question was “Did I make a mistake in not getting a sleeper?” While the coach seats are roomier than anything I encountered on planes or buses, the reclined position was not optimal for sleeping but I managed to make do. In the future, I’ll have to invest in a neck pillow. Having no idea how far we traveled, I awoke thinking we reached Cleveland but kept thinking “this looks too nice. Why do they call this the Mistake By the Lake?”. After checking my map, I realized we were in Pittsburgh and it was only midnight.

For breakfast, I opted for scrambled eggs and grits, a brave choice considering I was no longer in the South. My fears were unfounded though, as whoever is in the kitchen knows their hominy. Perfect balance between thick and thin and paired well with the eggs. I was seated with a nice couple from England and a young man from Chicago. It was a nice conversation, mostly swapping travel stories and sharing options for exploring Chicago prior to my next departure.

Coding by Train: Leg 1 (Wilson, NC to Washington, DC)

For the next week and a half, I am experiencing a new form of travel. Rail. Rather than take my normal flight from RDU to DEN for one of our company meetings, I’ve decided to take the scenic route via an Amtrak train. The first leg of the trip is the Palmetto line from Wilson, NC to Washington, DC.


The cost of a ticket from Wilson, NC to Washington, DC is pretty reasonable at $51 each way. It’s a 4.5 hour ride and allows me to travel without dealing with the traffic issues that has aggravated me in the past.


The seats in the coach class are comparable to those on an airliner. The main difference being that if you aren’t comfortable, yo are free to get up and move about, I spent about half of the trip in the dining car. The food selections are bit limited but not without some variety. They ran out hot dogs pretty quickly but had pizza, sandwiches and tons of snacks. The beer selection was about all I could expect.  Lots of American standards with the only “real” choices being Heineken, Dog Fish and Sam Adams (my choice). Hoping for a better selection on the next leg as I am all about that barley life.


Internet is free on Amtrak and works well enough for pushing commits and general usage (email, Facebook). The connection is a bit spotty, particularly between Rocky Mount and Richmond, VA. While testing an app, I got tons of errors when calling remote services. I didn’t have to resort to using my phone’s data plan, though, which has allowed me to save my precious bytes.


People on the train have been very courteous and I had no worries about leaving my carry-on in the coach cabin while I went to the dining car (unless you have a sexy underwear fetish, why would you want my bag anyway?). The train does jostle a bit at times, reminding me of some of the more turbulent flights I’ve experienced but for most of the ride it’s pretty easy to read/write/type without trouble. If you are prone to motion sickness, it might be a bit difficult in spots. I was unable to fall asleep but that may have been due more to my excitement at starting the trip.

Lessons learned so far

I really enjoy not driving. And not having to sit still for hours on a plane. And not having to take my shoes off. And not going through metal detectors.

Bring an ample supply of snacks that you like. You are also not allowed to consume your private stock of alcohol outside of your sleeper cabin. With the price of the available sleeper at $1100, I’ll settle for Sam Adams.

My first thought upon arriving in DC was “why didn’t I do this sooner”. It took only a few minutes walking from Union Station to remind me why I loved working here years ago. There will be a lot more train rides to DC (an possibly points north) in the future.

As We Begin Again

With this post, I am hoping for a return to more frequent and relevant posting to my blog. It is my opportunity to begin again. The year has been quite busy (too many projects undertaken) but I’ve not taken time to reflect on the things that I have experienced, which is the whole point of this blog. In the interest of brevity, I’ll just summarize:

  • On the development front, iOS has undergone a massive amount of change this year. A new programming language, Swift, tons of new APIs (HealthKit, WatchKit, etc.) and even more devices (iWatch!) means that more time is required just to keep up and maintain quality of existing apps.
  • Speaking of existing apps, my current apps (Capoiera Songs, Team Tryouts) are overdue for updates and those are coming but they will have to wait a bit longer as other projects have priority.
  • Conferences this year have been awesome. AltConf, 360iDev and the 360iDev min were great experiences and opportunities to make new friends and reconnect with old ones. And the year isn’t over, as CocoaConf Atlanta is taking place in December. Next year, I’ll be looking to present.
  • Speaking of conferences, though I didn’t attend, I was excited by the announcements at Google I/O. I will be returning to native Android development (in addition to, NOT in lieu of iOS. I’m not a sadist)
  • I joined the panel of the iPhreaks podcast. I’m grateful that they invited me on and it allowed me to fulfill my wish to return to podcasting. Each week is a learning experience as I am exposed to areas of develop that I be otherwise unaware of.
  • Pending apps such as PomoTracker are still in development (though I may change the name). My past year in beta testing combined my current work has shown me that I needed to change the tool’s design/focus. It wasn’t meeting my needs so I’ve gone back to the drawing board.
  • A passion project, Gateway Transit, is also in the works. It is a mobile app for the local transit system in my county. I’m hoping that it is the first of many volunteer projects that allow me to give back to the local community.
  • I have been Mobile Developer at TeamSnap for over a year now. It is an awesome company with great people. If you are a customer, we’ve got more cool stuff coming your way.
  • The Cocoa Nomad blog wouldn’t make sense without more from the road. Though I’ve neglected to post from San Francisco, Denver and Greenville, SC this year, I will do my best to make sure that doesn’t happen again.

More Cocoa. More Nomad to come