Wednesday, June 23, 2010

Development tools and host platforms

I've spent the last few days hacking up some Android code, and it has been a lot of fun. Android has an excellent development environment, which works on Linux and Mac, in addition to Windows. Once this is done, I will probably hack up a remote control for my Nikon camera using an Arduino board. The Arduino board can also be programmed in Linux and Mac, in addition to Windows.

It is tiring to see embedded hardware makers provide a development environment that only works on a specific platform. It is understandable if Windows software can only be developed on Windows, or Mac software on a Macintosh. I wouldn't advocate it, but I understand it. On the other hand, embedded devices rarely host the dev environment. You could develop Android software using the Android Scripting Environment, but that isn't a common practice. Most probably, you'll be on a big computer. With a big keyboard, and a bigger monitor. In that case, why limit yourself to one environment? Every platform wants developers, and it isn't hard to support at least Windows, Mac and Linux.

Parallax lost out to Arduino, even though Arduino initially could not match all the functionality of a Parallax board. The Arduino board is easy to hack in Linux and Mac, and there are lots of developers with Linux or Mac as a primary computer. Now, partly because of these Mac and Linux hackers, Arduino has a crazy momentum: the number of hardware and software add-ons is mind-boggling.

Something similar is happening with Android. I see much more momentum around Android hacking. Here is a sample:
  1. Serial port on an Android G1 device.
  2. Using a Wii controller to play games on Android.
  3. USB Host mode on a Nexus One.
On that last video, notice how Sven, the person giving the demo, is using Linux?

I thought I'd spend some time learning how to program a Nintendo DS, or Nintendo WII, using the variety of tools that people have written in their spare time. These tools don't always work, and they don't always work well. Nintendo is selective about who should be allowed to program their devices, and will not support these tools. In fact, they'll go out of their way to ensure that you can't program their devices. After some time of struggling with it, I figured it was futile. The tools and dev kits of free environments is so much better. It is a lot more fun to program Arduino or Android instead of a Nintendo device. You don't have to struggle with random library versions, you can make your software available to others, and more importantly, you aren't treated as a criminal. So with that, my DS was quickly sold, my Wii will be given away, and I'm back to devices that I am welcome to program.