Initial Nexus One Impressions

January 06, 2010 at 06:39 PM | categories: android | View Comments

Just got my Nexus One delivered :)

Although I had a company issued Blackberry (7100t) several years ago, I've never owned a smart phone of my own. I've certainly watched the technology progress over the years, but for the last several of those years I've been content to own a generic 3g slider phone (Samsung A737) and just tethering it to my Nokia N800.

Recently, smartphones have seemingly gotten a lot more powerful and I decided it was time for me to get one. Having loved my N800, I certainly had my eyes on the N900, not only because it adds a phone feature, but maemo 5 looks fscking awesome. However, I did my due dilligence and researched the other options available, and here are my thoughts on what's out there right now:

  • iPhone 3Gs: I've played with it several times at the Apple store, and held several owned by friends. It runs on fantastic hardware and even better core software. The iPhone is seriously stable and runs smoothly as far as I can tell. It only has one problem: Apple designed the software to be completely locked down. As a software developer (who wants to program for whatever phone he gets) I can't bring myself to become a slave to Apple, not being able to develop on anything but a mac, using a language that seemingly is only used to build Apple software, having to pay a large license fee to put applications on the only available method of distributing applications (THE app store), and to top all that off, I have absolutely no guarantee whatsoever that Apple will even accept my application, let alone in a timely fashion. No thanks.

  • Nokia N900: Oh, this phone has everything I want. Everything the N800 had and more. Completely open-source, completely unlocked device, surrounded by a (small by comparison) community that wants me to hack this device. Yea, this is my kind of phone. The idealist in me knows that this is the best phone on the market right now, and if adopted en masse, would shake the telecom industry to its core. A powerful phone like this, giving me as much freedom as it does, has the potential to force the telecom providers to compete solely on terms of network quality as opposed to competing over who has the coolest (locked down) phone. However, like with Betamax, there's more to winning than just superior technology. Nokia just doesn't have that something. This phone will serve geeks and enthusiasts well, but it just doesn't have the character to be adopted widely, and as a developer, I'd like to see the programs I write, as well as the skills that I will develop, still have relevance several years from now.

  • Android: Android is this happy medium between the two. The Android platform is open source. The phones... well, not so much. While they all run more or less the same open source android OS, they are still chained to the whims and pleasure of the manufacturer and telecom carrier, not the consumer. The recent Motorola Cliq is a perfect example of this. This is a new phone, having only been released since last November. But already the OS is quite outdated, running android 1.5, it's now three versions behind the latest that the Nexus One is running (2.1). I certainly understand that there are complications in upgrading the device, but it's the fact that Motorola/Tmobile has delivered a device that although is running an open source OS, is completely locked down disallowing the user to upgrade the phone himself. Ingenious hackers have rooted the device (without motorola's help mind you) but there is still trouble in installing new OS images. The Motorola Cliq is NOT an open source friendly phone and is defeinitly not the phone for me.

So a few weeks ago I was reading Android developer docs and was becoming really impressed with the platform. Even though it's all Java based, and not my beloved Python, at least it wasn't Objective C. And even though there are some closed source google APIs included, the great majority of android is open source. I was starting to the get feeling that this was a platform I could roll with. But the most modern phone available on a carrier I can afford (have you seen the prices for family plans on Verizon, sheesh) was the Motorola Cliq, and that phone deeply depresses me. So, did I want one of the older Android phones, the MyTouch or the G1? Hell no, I wanted something at least as powerful as the droid, if not as powerful as the N900 itself. Ah, but then all the rumors of the Nexus One starting cropping up all over the web.

  • Nexus One: A brand new, modern android phone, more powerful than the droid, hell more powerful than the N900 (at least on paper), not running any proprietary Motorola firmware, made by google who has an interest in making this the flagship android offering and playing nicely with developers, they made it easy to unlock the bootlader (literally just reboot holding down the trackball and entering a special command).. the list goes on. This phone is still no N900, but this just might be the first mainstream, truley open-source phone, that has the gumption to compete directly with the iPhone.

So I bought one :)

Here's my initial impressions:

  • Fedex is soo good at what they do. I set firefox to continuously reload during the Nexus One press launch, and as soon as the page went live I purchased the phone. Google paid the shipping and HTC sent it Fedex overnight. Less than 24 hours later, it was in my mailbox. Nice!

  • It's going to take me a while to get used to the keyboard. I have zero experience with touchscreen keyboards without the aid of a stylus.

  • Dictation works pretty well, kinda alleviates the problem above, although I probably would feel awkward using it in public.

  • The software keys at the bottom of the phone are very finicky. Although having used the phone for a few hours now, I think I got the handle of them now.

  • Navigation is fantastic. The GPS lockon was instantaneous, using dicatation to give the desired address worked flawlessly, the turn by turn speech is understandable, and the map displayed is updated quickly (even over EDGE) and looks great.

  • Just got Sipdroid setup and I can make VoIP calls for practically nothing :) (I have only tested it on WiFi so far, don't have 3G yet)

  • I can't connect to my home router that's only 8 feet away, even though it sees it, no idea why. I'm using WPA2 PSK AES, maybe it doesn't like AES? Can connect to the neighbors unprotected wifi ("linksys") no problem though ;)

  • The web browser works great and is speedy even on EDGE. I think something was terribly wrong in the Edgadget browser test because when I tried the same test (on WiFi), I got the page to load up at the exact same time the iphone did in the video, and seriously, why wouldn't it? Both the iphone and the Nexus One use webkit.

I'll update this list if anything else hits me.

Read and Post Comments

Writing an Calc extension in Python

December 13, 2009 at 10:08 AM | categories: python, | View Comments

A very well organized group of thugs steals my money every day. I'm getting really tired of it, but I found a way to save at least some of my money so they don't steal nearly as much of it, nearly as often. For whatever reason, this gang hasn't devised a way to steal gold and silver nearly as efficiently as these little green pieces of paper that they call money. So I buy gold and silver whenever I can as a hedge against 'inflation' (which is really just their gang-speak for the wholesale-theft of my money.)

I want to keep track of how much gold and silver I've bought, when I bought it, and inevitably I'll still want to know how many green pieces of paper I could theoretically trade it all in for.

The easiest way to track all this information was to create a spreadsheet in's Calc. I created a sheet for gold purchases and another sheet for silver purchases. Everytime I make a purchase, I record the number of ounces, what form it is in (coins, bars, junk etc), who I bought it from, when I bought it, and the price I paid in FRNs (Federal Reserve Notes, aka green pieces of paper.) On another sheet I total the number of ounces I own and multiply it by the current spot price for the metal, which gives me the current price I could get if I sold it for FRNs. When tallying this total, I reference a special cell on the sheet, one that has the current spot price for gold, and another for silver.

But checking the spot price myself and manually updating those cells was just too tedious for my programmer's heart. I wanted to automatically retrieve this information for me. So, I started researching extensions (plugins).

Turns out, extensions can be written in my favorite programming language, Python (yea!), so I wrote the following extension a few weekends ago. It's on github and can be downloaded with git:

  git clone git://

If you just want the pre-compiled extension, it can be downloaded here locally:


You install it inside by going to Tools -> Extension Manager and clicking on Add and browsing to the SpotMetal-0.1.oxt file you downloaded or built yourself.

Once you have it installed, you now have a new Calc function available called SPOTMETAL which takes two arguments:

  • metal - Which metal you want to look up. Can be one of "gold", "silver", "platinum", or "palladium"
  • bidAsk - Whether you want the bid or the ask price. Can be either "bid" or "ask".

The price will automatically be refreshed every 5 minutes by default, but you can also force a refresh with the Calc function called SPOTMETALREFRESH.

Here's an example spreadhseet that shows how you might track your own precious metal investment portfolio. The big button labeled "Refresh Spot Price" does what it says it does, but requires a bit more boiler-plate code in order for it to actually display on screen. In, you can see another macro called doReCalculate:

  • Tools->Macros->Organize Macros-> Basic
  • MetalTrackerExample.ods->Standard->SpotMetal->doReCalculate.

This extra macro is necessary to actually force the spreadsheet to request new data from the extension when you click the "Refresh Spot Price" button.

While this extension might be of use to you if you also invest in precious metals, I guess the main reason I posted this is because it took a good deal of time researching how to write a Python extension for Check out the source code on github if you're looking to write your own extension, it's got it's own Makefile and hopefully it's documented well enough for it be useful for someone in the future.

Read and Post Comments now powered by Blogofile

July 20, 2009 at 10:04 PM | categories: blogofile, | View Comments


I've just finished porting this entire site over to my new blog engine, Blogofile. Blogofile is something I've been working on for the last several months, and really it's been pretty much complete for the last two of those months; it turns out that transferring the 100+ posts that I've made on this blog since 2005, first using TikiWiki, then Wordpress (using a myriad of different plugins over the years) was a much larger task than writing Blogofile itself. Or, at least writing Blogofile was a lot more fun, which is why it probably took me so long to do the relatively mundane task of porting EnigmaCurry to the new platform.

Blogofile is best described as a Blog Compiler -- just as a programmer's compiler takes source code and spits out a running program, a blog compiler takes a special blog source code language and spits out raw HTML, the native format of all blogs everywhere. What this means is that any webserver can host the Blogofile based blog, without having to install any special software, not even Blogofile, it's just HTML. You can run Blogofile on any computer that has Python installed, upload the HTML it generates to your webserver, and your webserver remains lean and fast.

You can read more of the great features of Blogofile on it's own site.

One of the biggest motivators in my finishing up moving over to Blogofile is because, quite frankly, MySQL 5.x blows chunks. It consumes ridiculous amounts of RAM for my pitifully small wordpress database, and when it eventually overwhelms my VPS and forces a restart, the tables are corrupted, especially the mysql user table which requires running "mysqld --skip-grant-tables" in order to get running again just so I can get in to repair the damage. I've seen this happen on two different (but pretty much stock configured) Ubuntu 9.04 servers, so I know it's not an isolated case. I've pledged to myself to never use MySQL in future projects. Do yourself a favor:

sudo apt-get remove mysql-server-5.0

Please don't hesitate to let me know if you see something awry with the site, there's bound to still be a few things missing/corrupted from the transfer.

Read and Post Comments

Ambient Composition 1

May 31, 2009 at 03:24 PM | categories: music | View Comments

I've always wished that I was a musician, I love music. When I was young, my parents even paid for piano lessons, although I gave that up shortly after. Back then I saw it as tedious, and I never saw any real improvement.

I'm hoping to change direction. I seem to always have a tune inside my head and it needs to get out!

I recently bought a new computer powerful enough to run some pretty amazing software synthesizers, so I've started composing some music. Here's a pretty basic one I wrote today:

(press play or right click here to download)

It's pretty ambient. This is for two reasons:

  1. I actually like ambient music, eg. Harold Budd or The Dead Texan.
  2. It's got a low barrier to entry, nice long whole notes. :)
Read and Post Comments

Distributing Jython Apps in a Single JAR file

May 20, 2009 at 02:20 PM | categories: python, java | View Comments

I've been writing a lot of one-off type applications at work lately, which is always kind of a joy for me because these sorts of applications don't need to be maintained or supported in any way, which means I can write them however I want.

So I write them in Python :)

Jython allows me to interface with all the plethora of Java libraries that we use at work, and it lets me program in a language that not only I can tolerate, but one that I respect and love.

But even though these are one-off applications, they still need to be easy to use, and in some cases I won't even be the one running the application. I want these applications to just work damnit.

So, packaging my Jython application into a single executable jar file that contains all of the third party dependancies inside is my goal. I want to send the user the jar file, have them double click on it, and have it immediately start running. It can't get a whole lot easier than that.

The Jython wiki has a page about doing something along these lines. The recipe there called the Jar Method works quite well. The one drawback that it has is that all of the Java dependancies need to be exploded into the main jar root, which when you're dealing with dozens of jar dependancies, it can start to get tedious, messy, and in some cases will even violate the license of a particular library.

One-Jar is a special class loader that can load a jar file that is inside of another jar file, something that the regular class loader from Sun is incapable of doing. Using One-Jar lets my application reside inside of a jar file and contain all my dependancies as seperate jar files inside the main jar file.

I've created a sample project that shows how I normally create a new Jython project hosted inside a single jar file with One-Jar. You'll need the following tools to check out the project:

Check out the project like so:

 git clone git://

Build the project:

cd single-jar-jython-example


Run the example by double clicking it or via the command line:

 java -jar JythonExcelExample.jar

This is just a demonstration app, it doesn't do a whole lot, it outputs an excel file in the current directory listing some computer parts. The point of the application is to show how Jython can integrate with existing Java third-party libraries (in this case Apache POI.)

Instructions for basing your own application on this example are contained inside the README.txt file.

Read and Post Comments

« Previous Page -- Next Page »