Stuff I’ve Bought

I seem to be buying a lot of technology products lately. Here’s what I’ve bought and why:

  • iPad (retina, 3rd generation)
  • Samsung Galaxy SII
  • Samsung Galaxy Tab 10″
  • Nexus 7
  • Roku 2 XD
  • Kindle Paperwhite
  • Apple iPod touch 32GB (5th generation)

The problem with being a programmer is that I am constantly buying devices. The two Samsung devices and the Nexus were specifically to test our new Android version of powerOne, for instance. For Android this “buying devices to test on” thing is a never ending battle. There are way more devices then I could possibly own. For the most part, these three devices sit on a shelf. I pick them up periodically to play around, although the Galaxy SII also serves as the old Infinity Softworks phone line. Of these three, the Nexus 7 is probably my favorite. If I didn’t have so much of my world already geared to work seamlessly with iOS, I could see using this more often at least as a reading device for blogs and basic web browsing. It’s too small to use for note-taking or any sort of long form typing, though, which is the other thing I do with my iPad.

Speaking of iPad, yes the iPad was a long ago purchase, way back in April when it came out. Of all the devices I’ve received so far it is my favorite. I use it hourly and generally is the first thing I grab in the morning and the last thing to get tucked away at night. The display is amazing. I recently had to do some testing on the second generation iPad. I forgot how much better the retina display is. I like smartphones but the technology I’ve waited my whole life for is definitely the iPad.

Roku is a device like Apple TV. I hooked it up to the television and it lets me watch movies, tv shows and stuff like that, streamed rather than live television. There’s a lot of crossover functionality with the Apple TV, which is the one I use most the time as it streams my personal content as well as has Netflix and MLB.tv. I probably wouldn’t have bought a Roku again but we added Amazon Prime after we canceled cable and needed some method to watch its content. Apple TV does not offer an Amazon Prime app yet. I’m still hopeful Apple will open that device for development soon.

The two recent purchases, neither of which I’ve received yet, is the Kindle and iPod. As mentioned before we need devices to test on. Apple and Google give us simulators, replicas of these devices that run on a Mac or PC, but they aren’t exactly the same. Speed is different, there can be differences in how the UI handles, and it is really hard to get the feel for how a device reacts to a finger press without the device itself. We usually try to collect one of each generation of Apple hardware. We have iPhone 3Gs, 4 and 4s, iPod touch 4th and 5th generation, and iPad 1, 2, and 3. The 5th generation iPod lets us test for the taller 4″ screen.

Probably the device I am most excited about getting is the Kindle Paperwhite. While owning a Kindle has allowed me to read more fiction than I have in years, I found the current model, Kindle Touch, a little too dark compared to paper and don’t like to carry and attach a light. At the same time, I don’t like using my iPad for reading at night since the light glows in my face and keeps me awake. The Paperwhite is supposed to fix this as it is not backlight but has lighting all the same. For $120 I’ll find out.

Conspicuously missing is the iPhone 5. I have concerns about my personal use of this device. For one, I want my phone to be smaller, not larger, and I have some concerns about the iPhone 5’s taller screen. I think I’d like to see one before buying. Now this would have been a moot point if I qualified for a discount right now, but for some reason we don’t until December. For $200 I would buy one sight unseen; for $600 I can wait.

A Very Controversial Programming Opinion

James Hague references a post titled 20 Controversial Programming Opinions and adds a few in his own post titled Hopefully More Controversial Programming Opinions. I don’t usually go for list articles but this one that James came up with jumped out at me immediately:

Computer science should only be offered as a minor. You can major in biology, minor in computer science. Major in art, minor in computer science. But you can’t get a degree in CS.

Don’t know why this one would jump out at me! Oh, right… I majored in business (accounting), minored in CS.

In some ways, that was an invaluable experience. Majoring in business has helped me immensely in the years I’ve run Infinity Softworks. It gave me a grounding in the finances of a business and how to project. I also happened to be in college so long that I came very close to degrees in finance, management and marketing, too, all of which I’ve used in this business.

What did I lose by getting a minor rather than a major? From what I could tell at the time, a lot more mathematics and a lot of theory. To be honest, though, my eyes glaze over with theory. I always want to jump into the code.

The one class I wish I would have had that I didn’t was compilers. I think it would have been a fascinating class as thinking through text and how a computer can break it down to derive meaning is very interesting. I even bought the compilers book thinking I’d self teach. I never got the time.

The irony, of course, is that Infinity Softworks hasn’t developed an app without a big compiler on the back-end in 12 years. Our compiler breaks down mathematical equations and turns them into templates and results. The good news, though, is that I don’t have to write it, update it or maintain it. My technical partner takes care of that!

The Problem With Software Patents

A friend sent me, along with a number of others, an article on the Apple-Samsung lawsuit. I haven’t commented on the trial here because I see it as a sideshow, one that means very little in the grand scheme of things. But one place where I think it means a lot is in the realm of software patents. My comment back to the crowd was this:

It’s not a loss for the American consumer, as Samsung said. Think they will vacate the market? Ha!

What it is is a reaffirmation of the supremacy of the patent system, which is bad news for every small company.

I was asked to explain. Here it is:

When I talk, I am talking specifically from a software perspective. None of what I say here applies to biotech, hardware, pharmaceuticals, or any other business with real costs to manufacture or huge up-front expense to get it to market.

First, patents do not lead to innovation. In fact, I would argue that patents cause a dearth of (again, software) innovation. Software is always built in layers. One guy’s idea is used to generate the next set of ideas, of which the next guy builds on. Interested in Twitter? What if SMS had been patented. Or instant messaging. You’d never had seen it. How about Facebook? What if News Corp had patented the timeline for MySpace. There is very little invention in the software space. Almost all has some lineage to something that came before, physical or otherwise.

Okay, so I filed for a patent this year on some stuff we are working on. When my lawyer did a review he found two patents that were in a similar area, both by Microsoft. He felt we were fine and had more than sufficient distance from their patents. But all the same. Let’s say we release our app and Microsoft decides we infringe and comes after us. It makes no difference how strong my patents are. The case would never make it to court. After all Microsoft pays each of their lawyers more per year than my whole company makes. They could lawyer me to death.

What if my lawyer had decided that our technology was too close to Microsoft’s? Maybe I would have bailed on the project instead of risking Microsoft’s wrath. These are patents that Microsoft is not using, they are just sitting on them. That means my innovative and potentially world-changing product would never have been developed because the threat was too great? How is that helping innovation?

Big companies hold all the patent chips. Big companies act as trolls against little companies, they have the muscle to force us into compromising positions. As with almost everything else in this country now, the little guy can’t win this fight. Software patents need to go.

Size Doesn’t Matter (Anymore)

I had a funny thing happen the other day. We have been updating a partner product, getting it ready for some new uses and fixing a couple of issues that have arisen over the years. We host the trial on our side and the partner company, ETS, includes a copy in the exams for College Board tests.

The original product was completed in 2004 and designed exclusively for Windows, although for a while it also worked on Mac. And then Apple changed something in their implementation of Java and broke the app, plus Microsoft made changes in Vista and 7 that broke the app. (Neither change really impacted usage, just delivery.) We got a new trial build up on the site last week, fixing the issues and adding new features, and in the process I updated the content.

One of the pages was for requirements and listed among the requirements was 8MB of hard disk space required for the application.

That struck me as funny. First of all, I can’t believe how little space it required (and most of that was the long-defunct installer). Second, that the hard drive space was listed at all. The more I thought about it the more I realized that I haven’t seen a listing for how much hard drive space an app requires in years!

In 2004 every sector of the hard drive was precious. Now, not so much.

Live By The Platform, Die By The Platform

As a software developer the biggest risk I can take is developing on someone else’s platform. The irony, of course, is that, as a software developer, that is pretty much all I do.

Let me explain: when I write applications for an operating system I am writing on someone else’s platform. I have no control over that underlying platform. If that platform breaks my code, too bad. If that platform dies on me, tough luck. If that platform changes the rules of engagement, so sad.

Often times, as developers, we rely on two platforms or more. Say, for instance, I write an app for Android. Not only am I beholden to every change made by Android but I am also beholden to every change made by every licensee of the Android operating system. Now, let’s compound that problem. Let’s say I require login authentication using Facebook. Oy! Add fuel to the fire. Any changes made to any of those could have a profound impact on my product or service.

I wrote apps for Palm OS, made a good living at it , too, and was highly influential in that space. Does anyone care now? No. I might have been developing for VAX systems. I lived by the Palm OS… and died by the Palm OS.

Look, folks. I know we are all upset about what is happening to Twitter (info here, here and here) but the reality is that developing on top of it has been a questionable decision for a long time now.

The web is open, right? With my own server I’m in control, right? Even the web provides no safety. I do most of Infinity Softworks’ web work in Ruby on Rails. When David Heinemeier Hansson and the crew developing Rails decide to make a change, I’m pretty much stuck. Yes, at least there I can make decisions about when to upgrade to the latest version [1]. All the same, though, it isn’t really feasible for me to run Rails 1 forever. Not only does underlying support and my ability to advance and improve my own software end but I also never take advantage of fixes (like those for stopping SQL injection, one of the more significant problems for any database-based web app).

Don’t buy into that argument and think the web is safe? You’d still be wrong. Even if I can control my own destiny on the server, I still can’t in the browser. As if it would be the first time that Microsoft broke Internet Explorer and left me scrambling at the last minute to make something look right.

The problem is very easy to compound. I’ve been developing Rails apps longer than Objective-C [2]. There is a new framework called RubyMotion that lets me write apps for iOS in Rails and then the framework recompiles it into Objective-C. But iOS 6 launches in a month and how likely is it that RubyMotion can keep up? Will it be able to support all the new software and hardware changes? And if the platform doesn’t take off or the developers lose interest then the problem is even worse. By choosing that intermediate layer, I’ve made a profound business decision that could haunt me horribly in the future.

Even within Objective-C there are various off-the-shelf frameworks (such as frameworks for parsing and creating JSON files used to pass data between an app and a website) that help me write code faster. Choosing one that I rely on, one that isn’t being updated for major new revs of the OS, is an extremely dangerous proposal. If I’m going to pick one, I damn sure better be certain that either 1) I can update and change the code myself; or 2) I can swap it out for a different framework.

Now, let’s get real. Unless I am going to write the operating system and develop all the hardware and figure out my own programming language, it is inevitable that I will write software for a platform. The trick is to minimize the risk.

  1. Choose platforms that will likely be around long-term
  2. Pick platforms that give me some level of control
  3. Decide to work with stable companies
  4. Minimize the number of intermediate layers

We don’t have a choice. As developers we rely on platforms. Let’s be smart about picking the right ones.

[1] Assuming I am running my own servers and have control over such things.
[2] Although I code more in Objective-C and am much better at it.