Oct 24 2009

A Rational Argument Against FCC Regulated Net Neutrality

I’ve largely tried to keep my somewhat conservative politics out of this blog.  Net Neutrality, however, is a topic that I think safely crosses the lines.  This topic has hit the discussion boards with a vengeance thanks to John McCain’s recent stupid, and probably lobbyist driven, bill.

Without further qualification let me just come right out and say it:  I’m a professional software engineer and I don’t support laws regulating Network Neutrality.  Before you call me an idiot, corporate shill, or anti-free speech Nazi (all things I’ve been called on message boards in the past) let me explain why.

The Idea of Net Neutrality

The concept of network neutrality is a good one.  Companies should not be able to set up a ‘fast lane’ for traffic that benefits their own business over others’.  For example, Comcast shouldn’t slow the packets coming from Hulu.com.  This concept is a fantastic one.  The Internet has thrived over the past few decades precisely because it hasn’t been controlled, prioritized, or regulated in any meaningful way. Anti-competitive monopolies are bad for everyone, this is a no-brainer. So to be clear, I fully support the concept of Network Neutrality.  How we implement this vision, on the other hand, is where the advocates and I disagree.

The Road to Poor Regulation is Paved with Good Ideas

Really, the disagreement I have with the Net Neutrality zealots is one of theory vs. practice.  We all agree that network neutrality is a good thing, we just disagree with how it should be practically applied.  Most NN folks want to hand regulation of this aspect over to the FCC.  So, to look past the immediate, lets look at the communication channels the FCC currently regulates…

Cellular Spectrum: The United States has, hands down, some of the worst cellular coverage of any first world country.  A near monopoly is maintained by AT&T and Verizon which leads to poor coverage, slow wireless bandwidth, and constantly stifled technology  (I’ve seen some of that first-hand, where carries kill a mobile phone technology because it competes with a service they want to provide).  The US has geographical issues making cellular coverage a difficult proposition, but the FCC contributes to the issue as well.

FM Radio Spectrum: Another near monopolistic communication channel.  FM Radio, is, for lack of a better word, crap.  But don’t trust me on that one, ask anyone who likes, produces, or works with music.  Further, the FCC actively censors the content of both the Radio and TV spectrum.  I’ll say that again.  The FCC regulates the content of both the Radio and TV spectrum.

There are more examples of the incompetence of the FCC but I’ll save you from a detailed examination of them all.  But I’d posit, based on the above evidence alone, that the FCC both actively regulates the content of their appointed communication channels and stifles our technological innovation.  These two qualities are antithetical to a thriving internet culture and the internet’s health as a whole.

BUT, you say, We, The People, can Control the FCC!

Even if we give the FCC a very tight mandate for regulating the internet, the fact remains that the FCC will have to install comprehensive monitoring tools to verify claims of violated Network Neutrality.

Once the FCC has these monitors in place, I promise you, within 5 years, a senator will task the FCC to monitor the internet for something related to children.  It’ll be called the ‘Protect our Children’ act or some such nonsense.  It’ll be the first step towards censorship of the internet.

At the same time, AT&T, Verizon, and Comcast will pump tens of millions of dollars into lobbyists who will sneak loopholes into fast-tracked security-related legislation.  These loopholes will allow the major telecoms to violate Network Neutrality rules in any number of ways, and, it will turn the bill in their favor to maintain their revenue channels.  For a modern example, look no further than the RIAA and MPAA.

Think Long Term, Please!

Once we allow the FCC to regulate the internet even in this small capacity, we open the door for a host of legislative abuses.  We were able to beat back attempts to protect our children from the internet by censorship before….how will we continue to do this when censorship can be introduced by a simple modification of the FCC regulatory powers?  Once the FCC has it’s hooks heavily into the internet, we won’t be able to pull them back out.

Alright Negative Nelly, What’s the Solution Then?

There are several non-regulatory solutions to this problem.  Most of them involve breaking monopolies and encouraging competition so when a broadband company does violate the tenants of Net Neutrality customers can switch providers.  I’ll get into the solutions in another post because, if you’re reading this far I’m impressed.

The bottom line is thus:  If you’re in favor of government regulated Network Neutrality, you don’t have to agree with me (in fact I’d rather you didn’t); but I implore you, consider the long term ramifications of what you advocate.  Consider that the internet will, eventually, become like every other communication medium the FCC is tasked to regulate.


Oct 14 2009

Augmented Reality on Android prt 2

My latest DevX article is up.  You can find it here.


Oct 13 2009

A Chink in the Developer’s Armor – or how I learnd to stop fighting and love the droid

Every time I read a story like one of these I put on my imaginary tweed jacket and take a smoke from the corn cob pipe I don’t have.

More than one developer has told us that this isn’t just a matter of debugging their existing application to ensure that it works on the various handsets. They say they’re going to have to build and maintain separate code for various Android devices. Some devices seem to have left out key libraries that are forcing significant recoding efforts, for example. With others, it’s more of a mystery.

Over the past few years I’ve written some pretty gnarly code on some very gnarly mobile platforms.  Like many engineers, overcoming three impossible things before breakfast is pretty much the only thing that gets me out of a comfortable bed every third morning before noon.  Android, in this case, doesn’t disappoint.  Its development landscape is fractured, multifaceted, complex, and hard to deal with on every level, and we’re only on the fourth version.

This, my mobile developing friends, is exactly what keeps us in business.  Mobile software is difficult.  Have code that only runs on one platform but not another?  Easy: classloaders and a well constructed factory.  Different drawing behavior and different screen sizes?  Cake-walk, dynamic screen resources, a very clever designer, and a good build system.  Compatibility issues?  Of course, these are nothing that hasn’t been solved a dozen times before.

Where there’s difficulty there is opportunity.  Where there’s opportunity, there is money, a chance to gloat, and the veritable lack of attractive women.  Will Android go the way of Sun’s J2ME?  Who cares.  If it does, my life gets easier because I don’t have to keep coding at a third grade level (curse you Java ME).  If it doesn’t, I get to write tools to help people make sense of a chaotic environment.  Either way, my life stays interesting and my bank account has more than fluttering moths in  it.

The bottom line is this:  Mobile software is still hard.  It’s not for everyone.  You spend most of your time forcing every device play in the same sand-box, and you build tools and toys that make this job easier.  You piles of time telling very smart people, clients and friends, why what they want to do on a mobile device is impossible.  It’s a write once debug everywhere mentality I wouldn’t trade for a web developer or mysql job any day.

If it were easy, everyone would do it…and no-one could get paid for it.


Oct 5 2009

Quick, and very dirty, Android Development Trick

In my main Activity (or any of them for that matter) I always include the following line:

public static volatile Context ctx;

Then, when the Activity is created (in onCreate), I set it to the following:

ctx = this.getApplicationContext();

This does three things.

1) It means I have easy access to a context pointer that won’t leak (if the device rotates or the original Activity is destroyed)
2) It makes anyone who knows what they’re doing die a little inside when they look at my code.
3) It means I don’t have to lug around a context pointer as a parameter whenever I need one.  I just make a call to “MyActivity.ctx”