Applying to Toptal

Today I decided to apply to the Toptal Web Engineering Community as I start thinking about what I’ll do next after my current contract. I’ve only dabbled briefly in freelancing before and my experience with sites like Odesk and Elance has been pretty bad, as they’re filled with race-to-the-bottom outsourcing companies who prefer quantity over quality.

But I’ve been seeing ads for Toptal lately and they seem to take an approach where they’re much more selective about the freelancers they accept. They’re targeting clients who realize that you get what you pay for, and it’s better to develop your app or website the right way the first time.

I’ve reached a point in my career where I’m not worried about putting food on the table. I can go out and get any old coding gig at a dozen places around town. Sure, if I’m going to make the switch to freelancing, I want to be sure I can line up enough work to make it worthwhile. But I need to know I’ll be able to find the type of clients with whom I know I’ll love working. I know that they’re out there!

We’ll see how it turns out… I’m pretty happy with the contract I’m currently working on, but it’s always best to have a plan for the future! Working as a freelancer has always seemed enticing to me, so hopefully my experience with Toptal is different than the others.

Posted in General

Rural Living for Geeks, part 1: The Soil Test

This is part of an ongoing series about moving to the country from a geek’s perspective.

The most critical factor in deciding whether you can build a home on a piece of rural property is determining whether you can build a septic system that will support it. Well, that’s assuming that electricity and water aren’t an issue, but whereas those utilities hopefully already exist at or near the property (or can be extended there if needed), it may not be possible to install a suitable septic system to support your planned home.

I’ll be honest: this city boy had no idea how a septic system worked until a couple months ago. I just assumed it was like a giant port-o-john that someone came and sucked out with a truck every once in a while. But it’s much more involved: all of the waste water from your house goes into a holding tank, where the poop and other nasty stuff sinks to the bottom, and the soaps and other fats float to the top. The water in the middle then flows out into a field of “fingers”, which used to be just pipes with holes in them run through gravel, but nowadays are typically “chambers” which serve the same purpose.

The upshot is that the bad stuff stays in the system and breaks down by itself, but most of the water flows back out into the ground. That field is usually about 60 by 100 feet for a typical 3-bedroom house, which means you need a good deal of area to put the system, and that area needs good drainage so that the whole thing doesn’t back up and fail. In Indiana, the county health department makes the determination of what type of septic system is needed for a particular piece of land and a particular size of home.

In order to make this determination, they need a soil test to be performed by a licensed soil scientist. The soil test involves digging several holes of a small diameter up to five feet deep. The scientist will inspect the color and constitution of the soil, at 6-inch intervals, all the way until either 5 feet or a “limiting layer”, which typically is bedrock or some other material that water can’t flow through. He’ll then write up a report with this info and send it to the health department.

If the “limiting layer” is too shallow (less than about 3 feet into the soil), you aren’t building a septic system there and you can’t build a house there. Well, at least not without spending $20k+ on a highly-engineered system. If it’s more than 42 inches or so, you’re good to go: you may end up needing to add some fill dirt to the top of your field, but there’s probably enough stuff there to work with.

However there are other factors that are involved, such as the permeability of the soil and whether there’s a natural water table. In fact it’s possible that the soil is too permeable, in which case water flows back into the ground too quickly without having time to be broken down by the natural microbes in your system.

At any rate, if your conditions are less than ideal but you still have enough soil to work with, you may need a mound system, which is about twice as expensive as a regular field system. While a regular system might run you around $5k, a mound system could be $10k. Many systems these days also have “perimeter drains” to help ensure water keeps moving correctly.

The upshot of all of this is that determining whether a septic system can support the type of house you want to build is probably the most involved and site-specific criterion you’ll be faced with, and it’s mostly out of your control. You don’t pick where you want the home to go and then fit a septic system wherever you can; you figure out where the septic system can go and then build the home next to it.

So, we’re faced with a chicken-and-egg problem: you don’t want to buy land without knowing you can build a suitable septic system, but the seller can’t just get a “generic soil test” since they don’t know what type of home the buyer will want and where on the land they want it. The solution to this is a contingent offer to buy: when you actually make a formal offer for the land, you’ll make it contingent on the soil test being acceptible for your purposes.

In our case, we had 10 days from the time the offer was accepted to have a soil test completed. Indiana has an online registry of available soil scientists so I just found one who was close-by and made an appointment. We showed him where we wanted to build the house, he took the necessary samples at several locations, and a few days later sent his report to us and the county health department. It cost about $250.

At that point, we called up the health department and spoke with them about the type of system we’d need. It all sounded pretty standard and reasonable, so we moved forward with the purchase.

Posted in Rural Living for Geeks

Rural Living for Geeks, part 0: Moving to the Country

My wife Sarah and I have been dreaming of buying some rural land and building a house to escape suburbia. We recently placed an offer on a parcel of land not too far from our current home in Indiana, and it was accepted!

We are of course very excited about this, but it’s also a very scary prospect. There are so many unknowns, so much research to be done, and so many potential pitfalls that it has our heads spinning. Each question we answer seems to turn up two new questions that we never even considered. The journey has barely begun and we’ve already learned so much.

So my plan is to document everything we’ve gone through so far and everything we encounter as we move forward, so that hopefully this experience can help others who are in the same boat.

Since I’m a geek and hacker at heart, my posts will also focus on topics specific to technology considerations that come into play. I’m willing to give up some amenities of city life to follow my dream, but that doesn’t mean I can live without fast internet!

Here’s a bullet-point list of some of the things you’ll need to consider when buying rural property, including some things you probably take for granted if you live in a neighborhood. In the coming days I’ll create separate posts for each of these items.

Posted in Rural Living for Geeks

Using ExcelDataReader with AutoMapper to create lists of strongly-typed data

I recently needed to import some data from an Excel spreadsheet in my C# app and wanted to avoid the Office interop assemblies and OleDbReaders if at all possible. I found the excellent ExcelDataReader, which is a pure-.NET class for reading .xls and .xlsx files.

The problem is that this library returns DataSets representing the Excel files, with one DataTable per sheet. This is an understandable approach since the data being imported can be so varied, but I wanted to use lists of strongly-typed objects instead. (LinqToExcel seems to be designed around doing this all as part of one library, but its use of OleDbReader and its hard dependency on log4net to log a single exception in its Dispose method turned me off).

I started going down the road of “rolling my own” methods to create objects from the DataSets, but realized there had to be a better way. After a bit more digging around, I found AutoMapper, which is designed to take the gruntwork out of all type of object-to-object conversions. It can operate on IDataReaders, which are a quick DataTable.CreateDataReader() away. Perfect!

Looking a bit at the examples though, I found that AutoMapper is built around static methods, in which Mapper.CreateMap configures the mapping between two objects, and Mapper.Map performs the mapping conversion. That wasn’t going to work too well for me, because the types of data I needed could vary greatly at runtime, and I’d even need to pull multiple objects of the same type from each row (the data being imported had been flattened somewhat).

StackOverflow helped me solve that problem — the static methods are just wrappers around singletons internally, but you can create your own configuration and MappingEngine objects instead.

Finally, all the pieces were falling into place. I decided to write a quick helper class to build the necessary MappingEngine objects easily.

Because I wanted to map properties at runtime, I was interested in a few different Map methods, which can take a lambda expression representing the property to set, along with either a field name, callback, or both. If a field name is given, the property is set from that field; if a callback is given, it will receive a ExcelMapReaderState object and should return the desired value. (The state object will contain the “current” value if a field name was also given).

Because ExcelDataReader maps all numeric types to double, I wanted the ability to convert these back to int, long or decimal if desired. I also wanted the ability to map a field to an enum, in which case it will call TryParse with the field value (with whitespace removed).

It would be rather straightforward to use attributes instead to perform the mapping, but that isn’t something I really needed (and I’m guessing AutoMapper is already better at that type of thing, but I’m still unfamiliar with its operation).

Find the ExcelDataMapper code here on Gist.

Example usage:

    /// <summary>
    /// This is the class we want to map Excel data to. Value types should be set nullable, since empty
    /// Excel cells will be set as null.
    /// </summary>
    public class PurchaseItem
        public string ItemName { get; set; }
        public AccountTypeEnum? AccountType { get; set; }
        public decimal? Price { get; set; }
        public DateTime? ImportDate { get; set; }

    public void ContrivedExample()
        var mapper = new ExcelRowMapper<PurchaseItem>();
        // get value from Excel "Item" field
        mapper.Map(item => item.ItemName, "Item");

        // parse this field to get enum value
        mapper.Map(item => item.AccountType, "Account Type");

        // get price from "Price" field but post-process it too
        mapper.Map(item => item.Price, "Price", state => (decimal)state.CurrentValue < 0 ? 0 : state.CurrentValue);

        // or ignore the incoming data entirely
        mapper.Map(item => item.ImportDate, state => DateTime.Today);
Posted in General

Don’t sign that cell phone contract

Cell phone sales in the USA have typically revolved around hooking the customer with low-cost (or free) subsidized phones in return for signing an expensive, long-term (usually two-year) contract for service.

This is bad for customers in many ways.

  • You can’t shop around for the best plan or switch plans when you want to.
  • If you realize your carrier’s coverage or customer service doesn’t suit you, you’re stuck.
  • The subsidized phones are often locked to that carrier and getting them unlocked is difficult or impossible.
  • To get the most value, you must upgrade your phone every 2 years. Otherwise you’re paying a built-in premium for a subsidized phone you’re not getting.
  • Even worse, those of us who want to upgrade more often get doubly screwed because we must pay full price if we’re outside the “upgrade window”.

For many years, this was the norm. But in the past couple years, a lot more options have opened up.

Buy an unlocked phone outright

Most smartphones these days cost upwards of $600. The cheapest iPhone 5s currently costs $650. If you think that new iPhone on display at your local carrier really only costs $199, think again… where do you think that extra $450 comes from? Jacked up monthly fees, of course.

But lately, we’ve seen a trend of high-quality, unlocked smartphones available for much less. Since these phones are unlocked, you can take them to any supported carrier and get a much cheaper plan.

  • My current phone, the Google Nexus 5, currently costs $350 brand new and unlocked. It’s one of the best all-around phones out there and always gets the latest Android updates. The Nexus line is Google’s flagship Android brand.
  • The Motorola Moto E, Moto G, and Moto X start at $130, $180, and $350 respectively. These are all great, highly capable Android smartphones at various entry points which have great reviews. The $220 Moto G with 4G LTE is an incredible value for the money.
  • The ZTE Open Firefox OS phone is an incredible $80 unlocked. It would be a great choice for first-time smartphone users who don’t need as many apps as are available on iPhone or Android.
  • The OnePlus One, running a customized version of Android named CyanogenMod which is known for its extra features and privacy options, will start at $300.

Get a cheaper cell phone plan

Once you have your own, unlocked, unsubsidized phone, you’re no longer at the mercy of any one carrier. T-Mobile has led the charge lately at targeting “bring your own device” customers with extremely competitive no-contract plans such as their Simple Starter 4G LTE plan for $40. AT&T likewise has numerous Mobile Share Value plans in the same price range, again with no contract.

T-Mobile will even buy you out of your existing cell phone plan if you switch to them and buy a new phone. Because they’ve done away with contracts completely, their subsidized phones work a bit differently: you can spread the price of your phone over one or more years, but that price is clearly indicated on your bill, and once it’s paid off your bill will drop accordingly.

Rethinking phone+service plans

Of course, there’s something to be said from getting your phone and service contract from the same company and some people still prefer this option. But you now have more options than ever before, including some truly new and innovative offerings that use nearly-ubiquitous WiFi connections while you’re at home or at the office for calls, text and data, then fall back to cell phone usage otherwise.

Republic Wireless and FreedomPop are two such examples. You’ll need to buy a phone from them up front but after their monthly rates are very attractive or even free.

Don’t sign that contract!

In short, there are so many options for going contract-free that it’s really difficult to justify signing or extending a contract for any one carrier. Going contract-free is even more beneficial as shared-device and family plans become more popular, because you don’t need to worry about whether everyone’s contract is up at the same time.

The bigger carriers have fought the move to contract-free plans because they enjoy not having to work too hard to keep your business. As these contract-free plans grow in popularity, they’ll have no choice but to follow suit.

Posted in General

Reboot in progress…


After being dormant for several years I’ve decided to reboot my blog. I’ve archived most of the old posts, though they’re still accessible via URL.

More soon…

Posted in General

I Am Ironman! (And So Can You)

“That’s amazing! I could never do anything like that.”

That’s by far the most common reaction I get when people hear about my finishing the Louisville Ironman Triathlon. Although swimming 2.4 miles, then biking 112 miles, then running a full 26.2-mile marathon all in one day may seem like a daunting task, it really is something that anyone can do if they really commit to it.

In their book Going Long: Training for Triathlon’s Ultimate Challenge, elite triathlon coaches Joe Friel and Gordon Byrn say: “the truth is, anyone can do the distance if they want it badly enough”, and I have to agree. If you think that you’re too old, too young, too out of shape, too busy, or too nonathletic to go that distance, then there is someone who finished the race with me who will prove you wrong.

Kurt Kahl

Kurt Kahl

73-year-old Kurt Kahl started competing in triathlons when he was 50.

19-year-old Cassie Scull got into multisport since she enjoyed swimming and running in high school.

Cassie Scull

Cassie Scull

43-year old Ken Fetters battled constant health issues and numbness before being diagnosed with Multiple Sclerosis.

Single mom Heather Wajer, 37, weighed 315 pounds. She made a bet with a coworker to see who could lose 40 pounds first, but didn’t stop there and lost 141 pounds during her training. (When asked what made her set her sights on the Ironman, she replied: “You don’t get to 315 pounds by doing things in moderation.”)

Alex Kuhn looked in the mirror one day at 300 pounds and realized something had to change. He started walking, then running, and before long “marathons just weren’t enough.”

All of them finished the 2010 Louisville Ironman with me, and you can do it too.

Heather Wajer

Heather Wajer

I met lots of other great soon-to-be Ironmen during my training (note: “Ironman” is the accepted gender-neutral term; many of them were women!), and most of them aren’t what you’d expect from a “typical triathlete”. They, like me, are normal people with normal jobs and normal lives who decide that they want to push their limits and see what they can accomplish.

Don’t get me wrong… it took many of these people many years to get there. But they did get there. And competing in an Ironman isn’t cheap. The entry fee for 2010 was $550 and it has gone up to $575 for 2011. I spent more on my bike than I did on my first car, but hopefully I’ll get many years of use out of it.

Not convinced that you’re ready to take on an Ironman? That’s fine! There are plenty of shorter-distance triathlons you can start with. A “sprint triathlon” is typically a swim of 400-1000 meters, 10-15 miles on the bike then a run of a few miles. There are also intermediate “olympic distance” triathlons and half-Ironman triathlons. There’s probably one near you; use a site like to find one (entry fees for these shorter races are much more manageable than the Ironman).

Not sure you’re ready to swim, bike, and run? No problem! Find a duathlon (usually run, bike, then run again) or aqua-bike (swim then bike) instead. Or sign up for a regular running race. And don’t worry about how well you can compete against others. The vast majority of participants are racing only against themselves. And crossing that finish line is an incredibly rewarding experience that you’ll never forget! Even those who come in dead last celebrate their triumph because it’s still something that too few people ever experience.

Competing in an Ironman triathlon is a huge undertaking and involves a truly dedicated commitment of your time, sweat, and money. Only you can decide whether you want to take it on, but don’t let “I could never do something like that” keep you from considering it. You can do it if you want it badly enough.

Now that my race is over and I have a bit of downtime, hopefully I’ll be able to blog a bit more about my experiences leading up to the race, and I’ll go into more detail about what it takes to get there. Feel free to ask any questions you have in the comments!

Posted in General

Getting Started: Distance Running for Beginners

Triathletes tend to start with one sport and pick up the other two when they decide to give multisport a try. For me, that one sport is running. Up until last year, I enjoyed casual running but never really got serious with training for distance until I decided to compete in my first marathon. But I didn’t know how to begin with a more focused training program.

If this sounds like you, here are some tips I picked up as I got more serious about endurance training. Note that this isn’t for the beginning runner (may I suggest a program like Couch Potato to 5k for that); I’ll assume you can run at least 2-3 miles.


As you can probably guess, a good pair of running shoes is important when you begin running more than a few miles. I can’t stress this next point enough: to get a good pair of running shoes, go to a running shoe store. Not the shoe store at the mall, not the department store, not even the sporting goods store. You need to find a store that specializes in running shoes and just that. I got mine at Pacers & Racers in New Albany.

Yes, you’ll end up paying more than you would if you went to Wal-Mart. But not only will you get a much better shoe, the clerks will take time with you to correctly measure your foot and visually observe your gait as you run in order to find the perfect shoe for you. I found that I had been wearing shoes that were half a size too small for most of my adult life, and that I have a slight overpronation when I run. So they fitted me with the perfect-size shoe with a sole designed to correct for my less-than-perfect gait.

We all have different biomechanics that are either inherited or deeply ingrained from early childhood. While any ol’ shoe will do just fine for running a couple miles, having a shoe that matches the way you run makes a big difference over 26 miles!


Two words: bloody nipples. If that doesn’t strike fear into your heart, I don’t know what will. After I bought my first pair of running shoes, they felt so great that I went out and ran 19 miles. Then I looked down to see a streak of red running down my cotton t-shirt.

The problem with cotton is that it soaks up moisture and keeps it there. And (especially if you’re a guy) having that wet clothing rub against your body for hours will take its toll. You need to get some good “technical tees” which are made of moisture-wicking fabric. These come in many different styles so what you get has a lot to do with preference, but basically you want a shirt that isn’t too tight and especially not too loose.

Because I have rather large upper legs I have to wear spandex or compression shorts when I run, to prevent my legs from chafing from rubbing together. I prefer a pair of medium-length compression shorts and a pair of running shorts on top of those.

Moisture-wicking socks are also a must. Most runners (including myself) seem to prefer the ankle-length kind. You can pick up some good ones at the running shoe store or any sporting goods store.

Chafe Prevention

Aside from moisture-wicking clothing, you’ll want to take extra precautions to keep blisters and rashes to a minimum. It’s just a simple fact: when things rub together for long enough it’s gonna do damage to your skin. BodyGlide is your best friend here. Guys, smear a dab on those nipples. Don’t find out the hard way how painful it can be to have that area rubbed raw. If you have problems with blisters, rub some on the “hot spots” on your feet.

Gold Bond is also great for absorbing excess moisture. I found out how important this is during my service in the Army National Guard. Sprinkle some in your socks and/or in the front of your shorts, depending on where you find that friction takes its toll.

Water Belt

Constant hydration is vitally essential while running. Don’t run for more than 20-30 minutes without replenishing water. Unless you want to stage water along your route or continue to run past your home or car to refuel, you need to take water with you. I started off using a runner’s Camelbak but found that it moved around too much for me. Eventually I got the 6-bottle FuelBelt which works really well for me.

GPS Watch / Heart Rate Monitor

When you begin to get serious about running, it’s difficult to build up your endurance without an objective, quantitative measure of your performance. Keeping a constant pace is very important while running long distances, and it’s very difficult for less experienced runners to pace themselves. This is where a GPS watch and/or heart rate monitor can really help.

To that end, my Garmin Forerunner 305 is the best investment I made while starting out. It shows you your current pace, time, distance, and lots of other stats in real-time, and comes with a wireless heart rate monitor (a strap you wear around your chest) to monitor your heart rate. I won’t go into target heart rates and training zones here (there’s plenty of information on the subject elsewhere) but tracking your heart rate is also a good way to get a better idea of how much you’re exerting yourself.

When I first went running with my Forerunner, I was amazed at how much my pace varied. I thought I was keeping myself rather steady but found I started at 8-minute miles and finished at 11-minute miles. Once I began tracking my pace and teaching myself what my target pace “feels like”, I was able to run much farther and longer.

So that’s pretty much it… the above is what I consider to be the basic essentials for anyone looking to get into distance running. I’ll add posts about cycling and swimming in the future…

Posted in General

Sending care packages to soldiers in Iraq or Afghanistan

I often get asked by people what they should send in care packages to soldiers who have been deployed to Iraq or Afghanistan. Here are a few tips to keep in mind when deciding what to send. Read more ›

Posted in General

Search The Social Media Firehose or U.S. Census Records online

Posts Calendar

October 2015
« Jul