Computers, Events, Family, Personal, Software, Thoughts, Vacations

The California of Texas

Austin is a counter-culture in the heart of Texas. I’m not sure what I expected, but vegan friendly restaurants, health food stores, hundreds of miles of bike paths, a city wide ban on plastic bags, and a highly affluent populous was not what I was expecting. So beings my journey.

The Sights

We drove thirteen hours overnight to accomodate our newest passenger, Morrigan and her sleep schedule. As bad as driving all night was, at least we didn’t end up with a screaming toddler in the backseat. We visited some of Kristin’s kin in Houston, which served as our base for the weekend before pushing further West to Austin.

We negotiated a great monthly rate on a condo we found on Airbnb off South Lamar on the South side of the city. (Affiliate link) I’ve been really impressed from the moment we pulled into our new home away from home. The unit is small, but renovated, and well furnished. What we lost in space, we more than made up for in location. Right up the street is a lifetime supply of changing restaurants, and only a 10 minute drive from Zilker park.

Our first weekend we visited a local farmer’s market and bought some Texas grown produce. I never thought I would do what we did next – attend a vegan festival. Sure enough. In the land of BBQ, thousands of health nuts live in this city. Despite being vegan the food samples they had were all delicious. If I hadn’t known, I wouldn’t have tasted any difference. Vegans have masterfully replicated an omnivore’s menu.

The next week brought with it a trip to Fredericksburg, another hour West of Austin (but still not halfway through the state!). It is a German town, and had plenty of beers, wursts, and gut busting treats. The main strip is really quite a marvel, as it goes for over a mile and encompases lots of original architecture. Sunday we visited the Austin Zoo which put a spin on the traditional approach, and opted for a non-profit animal rescue shelter and animal sanctuary. Morrigan loved spotting all the critters, but the Texas heat won out, even in April. I was never so glad to pay $2 for a bottle of Coke.

This week I rented a bike and road around the Lady Bird Johnson trail which follows the river that bisects the city into North and South. It is wonderfully engineered, running past coffeeshops, restaurants, playgrounds, fishing areas, boat ramps, and dog parks. I wish Atlanta had something like this to offer. Maybe when the greenbelt is completed? (And the bikeways protected with police?!)

We have plans to go to San Antonio next weekend to visit Fiesta de los Niños, and plan on visiting my cousins who are lucky enough to live here. Following that will be our last week before the long migration home. We will be spending the last weekend back in Houston where we will visit Kristin’s folks for her mom’s birthday celebration.

Remote Working

Working remotely during this time has been interesting. I’ve learned an important lesson: don’t go anywhere during the launch date for your product! Too much was up in the air to leave beforehand to stay clear, and I was concerned that afterwards we would be scrambling. Turns out ramping up to the last minute before launch can be just as stressful.

For those of you following along who already, or wish to do remote work, ensure that you rent a place that you can have a quiet place to work. I find that mornings are my most productive time, and I try and guard this time for the important tasks. But with a smaller rental unit, and a one year old, I found thata nice pair of headphones is essential. I’ve taken advantage of ROWE several times during the week when we visited the capitol, and visiting parks, and going out for walks with the stroller. It pulls me out of my comfort zone to not be sitting at my desk at 9am, but then I realized the world doesn’t end. I simply make up the time later. Exercising this perk has really boosted my confidence in working for my company. They genuinely care about results and not office hours.

Also, have a backup plan if (when!) the Internet goes out at your rental unit. The maintenance people decided to test the waterproof claim of the rental’s outdoor wireless AP with a pressure washer. I’ll let you guess as to the winner, but I spent the rest of the day at a coffee shop. Also – scope out your coffee shops. I would love to see a website that lists the rating of different places based on workability. Some places don’t give you the vibe (despite having wireless) that they want you hanging around with that laptop of yours. Other places look promising, but offer no connectivity. Grab a cup of coffee or tea beforehand and scope things out.

A few notes on extended vacations: Don’t binge vacation! You are there for a while, so relax. Buy some groceries; every meal doesn’t have to be an experience. We have been aiming for eating out once every few days. It helps with the finances as well.

Don’t wait until the weekends to go exploring – especially when you have ROWE. The weekdays are the best times because the crowds are small, and the traffic is light. Check out your local attractions. One of the most relaxing things has been for me to join Kristin and Morrigan in the mornings for a walk around the neighborhood.

I wasn’t at home with my millions of distractions, so I wasn’t prepared for a “boredom adjustment”. Once I realized its not a pure vacation, and that I had to work, I struggled to find ways to wind down in the evenings. I ended up finding a used bookstore and stocking up on reading materials. I’ve enjoyed reading again instead of falling asleep in front of the TV, or playing video games until the early hours.

Being in a place for a month is certainly better than the binge vacation, but it is just a taste of what living somewhere would be like. Its just enough time in my opinion to really begin to absorb the culture. I find it thrilling to wonder what each day will bring, as everything is new. Maybe you spot a new restaurant (or food truck if you are in Austin), or drive past a park you want to checkout, or see a bike rental shop. I’m really making up my itinerary as I go. I’m glad I strived to find a job that affords me the opportunity to do this, and I wish that everyone who wants the same can achieve their goals. I can tell you its totally worth it!

Apple, Computers, Events, Family, Personal, Ruby, Software, Thoughts, Vacations, Web

Cloudy, Cold and Hip – Two Weeks of Training in Portland

I’ve really enjoyed the last two weeks. My new employer, recently acquired Analog Analytics flew me out to Portland, Oregon for training. Portland is quite an amazing place. Skateboarders, cyclists, and runners abound, but with a laid back attitude. Its the greenest city I have ever visited. Stores seem to only dispense recyclable materials including paper bags, and foods in waxed cardboard containers. The entire city is very walkable without much danger of personal harm. The food was amazing, and the drinks even better. This city knows its coffees, teas, and beers. It has to be home to the most microbreweries of any city. Needless to say I have probably gained 5 pounds, and I am super caffeinated. Also, the proximity to all these hip restaurants is giving me second thoughts about living so far outside of the city limits. No lie, I even glanced at Portland housing prices.

It took me a few days to get oriented to the city and the work environment. The company runs out of the Ford Building, in the heart of quite a few cool restaurants and bars in the Southeast side of the city. In fact, it left me a little jealous considering the hotel is only surrounded by fast food joints.  I got a shiny new MacBook Pro (which I am currently battling to make it as “boring” as possible). I can’t talk too much about the work, but it does hit the sweet spot of what I was looking for – a small team feel with deep pockets, and a launch date.

Kristin and Morrigan joined me for the second week and did their own thing, and they had a blast. They visited OMSI, Powell Books, Finnegans, several parks, and malls, and some tasty food joints. I’m happy they got to experience some of what makes this city awesome.

I’m enjoying several aspects of the job in particular: A remote driven environment, and pair programming. Training isn’t the best test run of this environment, as I am in the office everyday for now. Once I am setup, I pick the hours. People hop online and offline, according to their time zones, availability, etc. Every piece of communication, and workflow is centered around remote teams.

Pair programming makes programming social. Despite the image that telling someone you are a programmer conjures, I really enjoy interacting with people. I remember teaming up with James, John and many others at Clayton State to tackle some large issues with our portal and other systems. Since Clayton State, I have worked on a couple teams, and it was almost always in isolation, save for 5-10 minute high level meetings. The best part is, its actually kind of fun.

Pair programming was a tough adjustment for me. I’m used to presenting a final product and defending its implementation. I have all the answers. I know what the talking points are up front, and I am comfortable because I am the authority on the subject. Pair programming is letting your guard down, and conceding as much as contributing. You are two people working on a problem together, with neither party starting off knowing the complete solution. The work is certainly slower than solo programming, as incorporating input, early refactoring, and general discussion takes up time. This team takes an interesting approach to combat some of the time drain; You can either pair program and merge directly, or work solo but your code requires a peer review before merging. The choice is yours. The solo programming option will probably act as a safety value for those days when I just want some time to myself. They also encourage “switching drivers” to vary the work. Interestingly, being the passenger requires more focus than driving, as you are trying to proactively find issues with the current approach.

I’m still struggling to embrace TDD. I don’t like the zealotry in the community when the topic comes up; presenting the only two options as either you test first, or you are just ignorant, undisciplined, or apathetic to the code you write. The truth is far from it. I figure things out by moving the pieces around – not by staring at it from a distance. That is not to say that there aren’t times when testing first is extremely useful, like when clarifying requirements. The test assertions (even with missing test bodies) is often enough to help solidify an attack plan. The amount of code coverage can be a hindrance though, as real world tests always end up being more tightly coupled than you ideally want them to be. If you make seemingly small code changes, you can end up with quite a bit of the test suite failing (all though with the same few errors repeating). If you mock and stub too much, you aren’t testing much that is useful. Even worse, the workflow doesn’t seem realistic: Write the tests, verify the tests fail, write the code, verify the tests pass. The reality seems to be write the tests (heavily guessing at the exact implementation), verify they fail, write the code, refactor almost all of your tests, and verify they pass. Given the choice, I think I’d still rather write code, then test the code to verify it does what I want in all scenarios. I’ve yet to meet a dyed-in-the-wool TDDer that sees any fault with this extra refactoring step. The subject of pre-written tests needing to be refactored seems to be glossed over. Maybe my opinion will be changed yet.

Things are looking awesome for this next step in my life! I’m keeping my fingers crossed for Railsconf tickets, since they are in my employer’s backyard. There are also a few missed restaurants I am meaning to visit next time I’m back up this way…

Events, Family, Open-source, Personal, Software, Thoughts

Working for a Development Firm is Like Being a Rented Sports Car

As my last post alluded to, I am leaving my current development firm. The reason is primarily a boost in earning potential at another employer, but also a culture change. To explain the culture at a development firm I created this analogy:

Imagine you rent a Mustang, or a Corvette. (Of course you are gonna get the insurance!) What are you going to do with that car? Everything that you fucking can! You are gonna imprint the gas petal into the floorboard, and drive fast and wreckless. After all, you have to get every dime you can out of your rental before your time expires right?

Now imagine you own a Mustang, or a Corvette. Yeah, you would probably hot dog it, but it also your purchase, so if you wreck it, you are gonna be upset with yourself. In other words, you are going to maximize your purchase by caring for your vehicle, and obeying the speed limit (most of the time anyway).

I have just described the difference in my view of an internal development team, and an outsourced development team. Clients want to maximize that dollar when they outsource, which is done by getting the most work in the least amount of billable hours. They want the sports car rental. They aren’t going to set a moderate pace; they are going to speed! I’m not saying that all development firms, or all clients are like this (I’ve worked with great clients in the past). But I am saying there is a struggle between maximizing value and being realistic about what you promise.

How does a client pick your development firm? By your firm being the lowest bid. They understate the hours needed for the work. They over-promise features on an unrealistic deadline. When Company A quotes $100k under Company BCompany A gets the work. And the client isn’t going to be cool with missing deadlines, or cutting functionality. So now management is in a battle with the client who is pissed off because the original bid was unrealistic, and wants to rectify the problem. That shit rolls down hill to you – the developer.

And I can tell you, its not possible to write good code faster. Someone micro-managing me, asking me what I’m doing every five minutes isn’t making me any more productive.

There are lots of companies that push hard. You can make a good living working for these places as long as the compensation, or bonuses are commensurate with the work that you put in. But busting your ass all day, every day – every day feeling 10 hours long – every day being full of epic code pushes, and near impossible deadlines met in the 11th hour – that is a young man’s game. That is pretty appealing when you are 22, fresh out of college, and eager to prove yourself to the world. Stressing out at 4:50 on a Friday, trying to get something delivered while your wife and daughter patiently wait for you to get off work just isn’t worth it. I’d rather enjoy my time with them. I’m not mad about it – its just how the game is played.

Which is why this Sports Car is up for ownership. He is done with the rental game, being driven too hard, too long. He wants a nice garage somewhere, and a driver that just takes him out on Sundays for a trip around town. I want to spend time with my daughter while she is still young, instead of delivering some milestone that I wont remember in a month. If I wanted a stressful culture, I would have worked for a startup. Then at least I have some small chance of hitting it big when we get bought by Google.

Personal, Thoughts

Saving Money

As I walked out of the Lilburn International Farmer’s Market today with four full bags of groceries for $22, it struck me that I’ve been overpaying for groceries my whole life.

How to shop is a learned behavior, and my parents never took me to a farmer’s market. We went to premium chain grocery stores, and payed premium prices. I’ve been spending money on things without thinking about it for a long time. The way I bought everything all came down to doing what my parents did. But times are different now. The consumer has a lot more knowledge of competing retailers, and thus a lot more choice.  I thought I would pass on a few everyday (no financial advise!) tips for a more frugal lifestyle:

First off – the “Golden Rule”: Never pay full retail. Yup. There are simply too many competing products in every space, too many retailers, too many sales, and an abundance of used items to every pay top dollar.

Groceries: As I mentioned in my opening, find a local farmer’s market. There are probably plenty around you. If there aren’t brick and mortar stores, check with your city’s website to see if they have a market on the weekends. Buying local, and direct can saves lots of money, especially on produce. Eat less meat. Meat is expensive, and too much is unhealthy. Substitute expensive meat for cheaper, healthier options.

Dining Out: Skip dinners and go for lunches instead. The prices are usually one third to one half cheaper than their dinner counter parts. Usually the portion is reduced, but not by the same percentage as the cost. Reducing portions is healthier anyway, as restaurants have distorted what is a reasonable meal size. On the subject – skip drinks, appetizers and desserts at restaurants. There is usually a high markup for these items. If you go with someone, split an entree. Depending on the restaurant, this is usually more than enough for two people. If not, order an entree and a side.

Clothes: Try TJ Maxx, Marshalls, or Khols. You still get new, name brand clothing, but for a fraction of the price. Shoes can be purchased at Payless, or other discount sellers. You may not find exactly what you want, but I think forcing you to expand your wardrobe diversity is a good thing. You might like the look of something you never considered. If you are buying for kids, try consignment sales. Lots of items are never used, since kids grow so fast.

Furniture: Craigslist! People get tired of perfectly good furniture all the time. Let others take the hit of the retail cost. You get to pick from thousands of items on websites like Craigslist for a fraction of the cost. My wife’s latest Craigslist trophies include a $2200 leather sectional couch for $400, and a $600 ottoman for $115. Half of our furniture at this point was acquired from Craigslist.

Utilities: After spending almost three years in New England, I have learned that it’s acceptable to open your windows. Save the AC for when its above 80, or excessively humid outside. Cut cable and pick up a streaming service such as Netflix, Amazon, or Hulu. You don’t need 300 channels if you only watch a handful of shows.

Transportation: While Atlanta’s options aren’t overly appealing, there are usually enough public transportation options to use for your commute. Outside of commuting, you and your spouse can get away with sharing a car on the weekends. Carpool with friends, or alternate weekends in which you get the car. You will not only save on the cost and maintenance of a second vehicle, but also gas, and insurance.

Books: Stop buying them! I’m not advocating that you stop reading of course, but rather check them out from your library. You are paying taxes to fund these municipal services, so leverage them. If you must read the latest best sellers, check what your friends have. When I finish a book I never lend it out – I give it away to whoever wants to read it next. Even e-readers have services that allow for lending digital copies.

Games: Lots of video games quickly depreciate in value. Within a few months of the launch date, the game may drop $15-20. Within six months the cost is probably half the launch day price. Within a year, the game usually ends up as part of a bargain sale. Forget the hype of playing the latest and greatest. Lots of online deals websites are heavily biased towards electronic items, including games. Keep an eye out!

Interestingly, we have less income now that my wife stays at home. We also have more expenditures now than we did when we made more income. We pay considerably more rent, own a new car, and yet we still manage to pay down our debts we accumulated when making the higher income. The trick is to shortcut everyday expenses, and prioritize your wants, and differentiate them from your needs. You aren’t entitled to have all the nice things your parents have. They are older than you and have been accumulating their possessions their entire lives. You are younger, so don’t make the comparison.

I wish someone had imparted this advice on me when I was younger, and I hope that these tips helps others to stretch the all-mighty dollar and live a little more comfortably.

Computers, Events, Family, Personal, Thoughts, Vacations, Web

One Month Perspective On Working From Home

Today marks one month of being a remote worker for my employer. I’m still learning on how to be the most effective with this new environment, but I wanted to reflect on my experiences for anyone else considering this working arrangement.

Lets get this out of the way: its not all unicorns and rainbows. I think that was the biggest surprise to me. It seems like a dream to wake up, walk into another room of your house, work a few hours, and already be at home when 5 o’clock hits. For those expecting instant happiness – you will be slightly disappointed.

The reality is that, like most things in life, working from home is a mixed bag. For those looking to make the transition, consider the following issues:

Isolation can be a big problem, depending on your personality. I think this blow was softened because I am a software developer, and I am used to working with a computer more than people already. I have already cut my teeth on reduced interaction. What I do miss is the comradery in working in a team environment. You often have lunches with your co-workers, entertaining side conversations, and a million other things that contribute to the work culture. When you are working remotely, you exclude yourself from most of that, and it can be frustrating to feel like your avenue for interaction has been reduced.

Reduced visibility in the company is another disadvantage. I feel that I need twice the participation in communications just to prove that I really do still exist. You aren’t in the chatter loop anymore, so information may come to you seemingly out of the blue. Its important to remember that the company isn’t just swinging at things to see what sticks – they are in discussions that you aren’t part of anymore. There is something to be said for that office grapevine. I also get the feeling that I am quietly passed over when it comes to opportunities. The “online” indicator in a chat room isn’t the same as being a warm body in the room when it comes to picking a person for a job.

Getting into a rut in your routine is something that you have to constantly work against. While it seems so simple to sleep in one room, and work in the next, my mind craves more experiences in a day than the walls of two rooms of my house. Like it or not that soul-sucking commute, and those bleak off-white painted walls in the office provide some stimulation. I think it is key to be mobile. Work from a coffee shop for a day, or visit a local university, or other facility welcoming of guests, and providing free wi-fi.

Take your lunches out a few times a week, just to stay connected with the outside. You will be amazed to know that the rest of the world isn’t in a stasis. Things on the outside change. New restaurants open, roads get built, technology improves, books get published. Partake in the changes by going outside your house.

Join a meetup group for fun, or for professional development. In addition to providing networking, and keeping you up on the times, it is also and excuse to go have a few drinks with some peers.

Its not all gloom and doom, as there are some really positive things about working from home. Some of these you probably already know (and maybe even dream about!):

You will have a lot more time. Simply commuting is an average of two hours a day – 10 hours a week that you instantly get back. Also, if you cook at home for lunch, often you can use the remainder of your time to complete tasks mid-day instead of waiting until the end of the day when you are tired. I often do some laundry, or vacuum, take the dogs for a walk, sit outside and read my book, etc. My wife and I have a seven month old daughter, and every minute is precious to me. Having more time to spend with her is priceless.

There are cost savings to remote work, including reduced wear and tear on your car, and fewer fill-ups at the pump. I actually got to reclassify my vehicle as as “for pleasure” on our auto insurance, since it is no longer used for commuting and falls under the cap for average miles per year. Other savings include cheaper lunches (unless you go out) since you have a full kitchen at your disposal, and a thus are able to prepare a range of foods. You may find other savings including no more mid-day dog-sitters, saving on a parking spot, or public transit (just kidding – this is Atlanta!).

You will be hyper-focused. A co-worker once told me “an office is a great place if you don’t want to get anything done”. I understand what he meant by this now. Co-workers can be lots of fun, but when you are trying to buckle down and squeeze something in on a deadline, the office is the least likely place that is going to happen. I often get “in the flow” for 3-4 hour straight in a day when working from home. Its important that you recognize the speed you are working at, relative to your output before to understand how productive you are. The first week, I felt like I was moving in slow motion trying to adjust to the new environment, only to find that I had increased my work output. I would wager I am twice as productive in a day at home relative to a day in the office.

That being said – take frequent breaks. Your coworkers aren’t there to give your brain a break – so its up to you. I find it the most ethical to take breaks doing tasks I can relate to my work. I read HackerNews, read a technical book, or use the time to test out some new technologies. I have already been able to fold some of this exploratory knowledge back into the projects at work.

You are free to travel (and for extended periods!). Lots of people binge vacation, one or two weeks a year. When working remotely, you aren’t tied to a particular location anymore. As long as you have a laptop, access to the Internet, and power, you can be anywhere in the world. My wife and I are gearing up to spend a month in St. Augustine, Florida. I will work during the day most of the time, taking only a few PTO days. After 5pm, or when the weekend hits you are already in the middle of vacationing. The best part is that the month long vacation schedule is one you can physically sustain, with plenty of rest between the activities.

The final benefit I will mention is being able to set your own schedule. You can’t get carried away, especially if your employer enforces office hours. But if you need to take lunch earlier, or later, you can. If you need to step away from the computer for a few minutes to handle something, you can. There is trust that has to occur between employer and employee, but in my experience, your employer is most concerned with work output. It is a loaded gun to know that you are being entrusted to operate with almost total autonomy. You no longer have the eye of an overseer watching your every movement, which is a liberating feeling. Just get what you need to get done, and don’t go crazy with power!

So far, I am loving it. I have heard mixed reports of people adapting to working remotely. Some people crawl on hands and knees begging to come back to the office, and some people work remote the rest of their career. I think it comes down to your particular personality. If you are like me, you just have to try something to know if it works for you. This is one gamble I am glad that I took.

For anyone seriously considering a teleworking gig, I would highly recommend a few resources that helped me get started. First first is a short post like this one from Kyle-Kulyk. I don’t touch on it, but he makes a great observation about how working from home will affect your relationships with significant others. Benefits of, and managing your new teleworking lifestyle can be found in the 4 Hour Work Week. This book contains lots of great resources for how to negotiate a remote work arrangement, and tips for extended travel. Finally, Joel Gascoigne has some great pointers for keeping yourself mentally happy during this big transition.

Computers, Hardware, Linux, Personal, Software, Thoughts

Self Realizations – Part I

During World War II, when you needed to get communications between two points, you often had to run a telegraph wire through enemy territory. I’m picturing the scene from Enemy at the Gates – where a soldier puts on a helmet, gets a spool of wire, and crawls on his belly through the mud, dodging enemy fire, and landmines. The goal is to not get picked off before your reach your destination because everyone is counting on you to make the connection.

Lately I have been engrossed in a side project that has given me an opportunity to work with the Android SDK. I have been so tickled at figuring out everything for the first time. Though I am moving at a snail’s pace, and it can be painful to have to constantly reference the documentation, StackOverflow, and Google at large, it has been a fun experience. Small things like talking to a database, or rotating a bitmap feel like big achievements, and make the struggling worth it. Seeing the Java side of the world puts some things about Ruby into perspective too. I know I am better having tinkered with it, and I had fun while doing it.

I have come to realize that its why I love programming. I love running that first line across unknown territory. It is proof that I can accomplish what I set out to do even with almost no prior knowledge about an environment. It is the same rush I get when tinkering with my car, or building computers, installing a ceiling fan, compiling a kernel, or raising a kid. It is about creating something to solve a problem using common tools and applying knowledge to make something awesome of it all. If I didn’t program, I’m not sure what other career I would have that would give me this same chance to tinker with new stuff.

As part of this self realization, I have discovered by my child-like excitement in my accomplishments, how much I miss this in my current work capacity. I’m not building new things anymore. I’m just polishing the same things, and the details don’t really excite me like the prototypes do. I like “broad strokes”. We need people that do the detail work too, but its decidedly not for me.

So find out what it is that you love, and make it happen. Your job and your passion aren’t always in phase, but don’t let let your passion die out just because you are getting paid to do something else.

Open-source, Personal, Software, Thoughts

The Great ICS Upgrade Scandle: Everyone Just Calm Down

I have been hearing an increasing amount of chatter lately about the infamous Ice Cream Sandwich (ICS) delays for Android. I want to discuss the actual impact, and propose some resolutions to this problem.

The article that inspired me to write this is Jason Perlow’s post “I’m sick to death of Android“. Hopefully that title is a hyperbole, but it does address the primary issue that I have with people complaining about ICS delays – I don’t see it as show stopping. Name me the new features that are in ICS? How is this OS upgrade going to change your day-to-day phone experience? Sure it would be nice, and there are probably plenty of small touches, but this isn’t revolutionary.

Jason is the (proud?) owner of a Motorola Xoom tablet, and the Samsung Galaxy Nexus. The former was recently acquired by Google, and the latter of which is a Google Experience handset, meant to be a developer reference device. He argues that not receiving timely updates has caused him to “throw in the towel”.

I can sympathize with him about not getting updates on his Galaxy Nexus device, as its primary marketing angle appears to be “first” when it comes to updates. If I had dropped the money on that phone, I would be upset if major updates weren’t being released. However, Galaxy Nexus already has ICS, and he is addressing other updates from “bugfix iterations”. Not too exciting. I feel less bad for him about his Motorola tablet. Unless Jason is clairvoyant, he didn’t buy the Motorola tablet because of its strong candidacy for timely updates from Google after they acquired Motorola.

The Problem

ICS was released by Google in October 2011, which has been six months ago, but still accounts for only 1.6% of distribution of Android versions. I can’t defend that. It is a red flag for major distribution problems. Apple’s iOS adoption rate reached 61% in only 15 days and people are tempted to draw a comparison. Google’s Android, and Apple’s iOS are both mobile phone platforms, however they are operating on completely different distribution models. Android was never meant to be a closed ecosystem like iOS. You can’t install iOS on non-Apple hardware. You can with Android.

I think a more apt comparison is between Google and Microsoft’s distribution models. Microsoft makes the Windows operating system, and hardware manufacturers install it on their devices. Its not exactly the same since Microsoft charges for upgrades, and you bypass the hardware vendor to install the upgrade on your device. The mobile carrier middle-man is also non-existent in the Microsoft model.

When Google releases an Android OS upgrade, and handset manufacturers push it to their own devices when they are ready. Further, the mobile carrier may withhold a device OTA update until it deems it is ready (or even necessary). Handset manufactures have clearly prioritized selling new devices over supporting current devices. I’m sure they have ran the numbers, and have made this decision because it yields the most profit. They are a business after all. Apple pushes these updates because they get a cut of every App Store sale, and a failure to upgrade a device is a potential loss of revenue.

Why would a mobile carrier dedicate resources into deploying an OTA update for devices that are “working just fine?”. It comes down to money again, and their decision is clear. Apple probably provides monetary, or exclusivity incentives to the mobile carrier to push their updates. There are many Android phones, but only one iPhone, so carriers probably acquiesce to Apple’s demands.

Solutions

So how can we make this work, without abandoning the entire Android concept over just this one issue?

Incentivise upgrades for carriers/handset vendors. What if OS updates were not free, like in the Microsoft model? A nominal free for upgrading may offset the costs of handset manufacturer, and carrier costs for supporting such an upgrade. Businesses like money, and Ice Cream Sandwich is worth something to me, especially given that most of us are locked into a two year contract anyway. I would rather put some money towards an upgrade now, then wait until my contract runs out to upgrade to a device that has the update.

Educate ourselves. There is no correlation between handset manufacturer’s sales and past performance on OS upgrades. This doesn’t seem to be an issue with the majority of consumers with Android devices. Without it affecting sales, there is little reason to divert resources into maintaining already sold devices.

Open the device boot-loaders. Maybe OS upgrades aren’t the responsibility of handset manufactures or mobile carriers at all, like in the Microsoft model. If people who wanted the OS upgrade had a way to load the update themselves, then this would act as a pressure release value for the current scenario. The idea of a locked boot-loader seems to be archaic anyways, and is rooted in fear. Let the consumer own their own device and do with it as they please.

Make a kickass OS upgrade, and drive consumer demand. Ice Cream Sandwich just seems so lackluster to me. (Maybe I stopped believing it was so cool to keep from going crazy). Short of a few new features, there isn’t anything game changing about this release. Android has plenty of problems that are within the realm of the OS to address. Give me greatly improved battery life, blazing fast performance, zero boot time, fantastic reception, FM radio, overclocking abilities; something – anything to get me excited about an upgrade. I don’t see ICS as changing the day-to-day use of my phone in any meaningful way, and thus I’m not rallying hard for it on my device. I can’t imagine I am alone in patiently waiting for this meek update.

Forget UI customizations; the differentiator should be upgrade latency. People have prophesied about the race-to-the-bottom happening for Android devices the same way it did for PCs. Manufacturers are differentiating themselves in meaningless ways, such as skinning the stock Android UI, or building useless shit that consumers don’t care about. These customizations prolong upgrade turnaround times, when in fact manufacturers should be doing the opposite. As OSNews.com’s Thom Holwerda states: ” they’re wasting considerable resources on useless and ugly crap that does nothing to benefit consumers. Android may have needed customisation a number of versions ago – but not today. ICS is ready as-is. TouchWiz and Samsung’s other customisations add nothing.”. Instead of scaping the bottom of the bucket for ideas on how to differentiate, lets have one manufacturer try this. Hopefully stronger sales would substantiate the idea that consumers care about OS upgrades.

Acknowledge that the lifespan of a phone is only two years. The predominate cell phone sale model in the US is one of subsidized hardware. You pay inflated monthly prices to offset the cost of a low up front purchase cost on your device. Most people upgrade devices at the end of their contract period, since the inflated subsidized price never drops anyway. It is in your best interest to have the latest and greatest because the current model is so abusive to consumers. This being said, the average lifespan of a phone is around two years. How many major OS releases will occur in that timespan? Probably just one. Maybe this short lifespan doesn’t justify the need to have these devices be upgraded at all. Remember that computer you may have bought because it had extra slots to upgrade the memory? Did you actually fill those slots, or just buy a newer faster computer a few years later instead?

Final Thought

So Jason, enjoy your 2.3 experience, because it is probably near identical to the 4.0 experience you are dying to get. I wouldn’t throw in the towel yet on Android because ICS is taking a while to come out. It will get here, and as soon as Google is hurt by lack of adoption they will take action. I hope that my solutions provide some food for thought on how to fix the current problem. Instead of compulsively pressing the “Software Update” option, I’m going to enjoy my experience, and stop letting the media dictate how I should feel. Though “fragmented” we Android users may be, an app targeting the 2.1 platform can be run on 97% of the current devices. That is what developers will be targeting, and I’m sure I’m not missing much from the other 3% of apps that I can’t run before I receive my update.

Computers, Personal, Thoughts

The State of the Patent System

Next, by Michael Crichton carries a profound message about the state of the patent system. The end of the book offers an “Author’s Note” that outlines what Dr. Crichton proposed to mitigate the issues he outlines in his novel. Namely, he argues to stop patenting genes:

“Genes are facts of nature. Like gravity, sunlight, and leaves on trees, genes exist in the natural world. Facts of nature can’t be owned. You can own a test for a gene, or a drug that affects a gene, but not the gene itself. You can own a treatment for a disease, but not the disease itself. Gene patents break that fundamental rule.”

We could argue that genes are a fundamental element to life. It is the most basic information structure that instructs cells how to replicate. Without genes, no higher organization of cellular activity can exist because the “blueprints” are missing. I find this to have parallels with patents being held on basic computing operations. If we view the gene as a lower level mechanism that is used in the higher operations of a cell’s reproduction, then it is similar to basic lower level hardware and software operations that are used in a higher level computing devices.

Take for example patent #5,455,599: Object-Oriented Graphic System. Apple was issued this patent in 1995 and is very technical to the point that Engadget doesn’t even feel comfortable explaining it, but it covers a graphical system that is manipulated in an object oriented fashion. This is a basic mechanism of graphical interfaces. Patents #5,519,867 and #6,275,983: Object Oriented Multitasking System and Object-Oriented Operating System cover accessing OS services in a multi-threaded way. Basically, these patents would be impossible not to infringe on if you are building a computer today. These patents were issued to Apple, and were used in court against HTC for patent infringement on the Android OS. This is just the tip of the iceberg. Apple is not alone in using heavy handed litigation involving unavoidable actions in computing that are patented. Microsoft recently struck a deal with phone maker LG to pay royalties on the Android platform because of patents Microsoft claims they have against Google. Its simply “protection money”, and a way to abuse the legal system to slow down competition. Microsoft is now making royalties from 70% of Android devices being sold in the US. What if the patent on using a mouse to interface with a computer was still being used? What about displaying text on a screen for the user to read?

I would hate to think that my medical research is being inhibited in the same manner as the technology industry. Consider Crichton’s observation on the progress of the SARS vaccine:

“In its heyday, research on SARS (Severe Acute Respiratory Syndrome) was inhibited because scientists were unsure who owned the genome – three simultaneous patent claims had been filed. As a result, research on SARS wasn’t as vigorous as it might have been. That should scare every sensible person. Here was a contagious disease with a 10 percent death rate that had spread to two dozen countries around the world. Yet scientific research to combat the disease was inhibited-because of patent fears.”

Imagine if cures for cancer, or the common cold were being held up in the same such legal nonsense. I think the absurdity of patenting genes is best illustrated by Crichton in the following scenario:

“The patent consists of pure information already existing in nature. Because there has been no invention, no one can innovate any other use of the patent without violating the patent itself, so further innovation is closed. Its like allowing someone to patent noses. You couldn’t make Kleenex, nasal sprays, masks, makeup or perfume because they all rely on some aspect of noses. You could put suntan on your body, but not on your nose, because any modification of your nose would violate the patent on noses. Chefs could be sued for making fragrant dishes unless they paid the nose royalty. And so on…It takes little imagination to see the monopolistic patenting inhibits creation and productivity.”

This novel was revealing in its description of the same broken patent system in medicine that is facing the technology sector. Crichton aimed to illustrate the need for reform in this system, and I think he accomplished that mission by starting a dialog. What are your thoughts on patenting software and hardware operations? How far should these patents extend? How common an operation can be patent-able?

Apple, Computers, Linux, Open-source, Ruby, Software, Thoughts, Web

PostgreSQL for Ruby on Rails on Ubuntu

My new desktop came in at work this week, and the installation was painless thanks to the great driver support of Ubuntu 11.10. For anyone setting up a Rails development box based on Linux, I have some tips to get around some pain points when using a PostgresSQL database.

Installation:

Postgres can be quickly and easily installed using apt-get on Debian or Ubuntu based distributions. Issue the command:

apt-get install postgresql

Ruby Driver

In order for Ruby to connect to PostgreSQL databases, you will need to install the pg gem. This gem will need the development package of PostgreSQL to successfully build its native extension. To install the PostgreSQL development package, issue the following command:

apt-get install libpq-dev # EDIT: postgresql-dev was replaced by this package on Ubuntu 11.10

Setup A PostgreSQL Role

You can configure PostgreSQL to allow your account to have superuser access, allowing your Rails tasks to create and drop databases. This is useful for development, but is strongly discouraged for a production. That being said, we can create a PostgreSQL role by logging into psql as postgres as follows:

su postgres -c psql

This will open a PostgreSQL prompt as the database owner postgres. Next, we need to create an account for our user. This should match the response from “whoami”:

create role  superuser login;

We can now exit from psql by issuing “q“. Try to connect to psql directly by issuing the following command from your shell account:

psql postgres

This should allow you to connect to the default database postgres without being prompted for credentials. You should now be able to issue the rake commands for creating, and dropping the database:

rake db:create

Rspec Prompts for Credentials

I was being prompted by Rspec for credentials when running my test suite. If you would like to remove this credential prompt, please read the following:

There are differences in how the PostgreSQL package is configured in Homebrew on OS X, and how it is packaged in the Ubuntu and across other distributions. One difference is in the level of security configured in the pg_hba.conf file. This file is responsible for identifying which sources using which authentication mechanisms should be allowed or denied. By default, Rspec will cause a prompt for a password even if your shell account has trusted permissions. This is because Rspec connects not as a local process, but to localhost. To allow connections to localhost to be trusted, you will need to modify the pg_hba.conf file.

Next, we can modify the pg_hba.conf file located at /etc/postgresql/<version>/main/pg_hba.conf

Comment out the lines any lines at the bottom of the file and append the following:

local   all             all                                      trust
host    all             all              127.0.0.1/32            trust
host    all             all              ::1/128                 trust

This will allow connections from the shell, as well as connections to 127.0.0.1 (localhost) using both IPv4 and IPv6.

You will need to restart PostgreSQL for the changes from this file to take affect:

/etc/init.d/postgresql restart

PostgreSQL Extensions

If you want to make use of any of the additional extensions to Postgres, including fuzzystrmatching, you will need to install the postgresql-contrib package:

apt-get install postgresql-contrib

The extensions will install to /usr/share/postgresql/<version>/extension/

Using the Postgres version 9, you can create these extensions in your database by using the new CREATE EXTENSION syntax. In the case of the fuzzystrmatch extensions, you can issue the following command from inside a PostgresSQL command prompt to load the extensions:

psql ;

Once inside your database:

create extension fuzzystrmatch;