Upgrade the Android in your Life

So you have an Android phone, it’s a G1, you’re pretty happy with it. The hardware lets it’s down a little though doesn’t it? It’s a touch underpowered for an ambitious Linux-based OS like Android. Would it not be great to try some kind of enthusiast firmware and kernel on it to squeeze every last CPU cycle out of the thing? Battery life be damned! Oh, and chuck in some of those snazzy Android 2.0 icons and stuff while you are at it…

You want CyanogenMOD.

Update: get the 5.0.8 version and apply to the G1 and then stand-by for awesomeness.

I have given my UK T-Mobile G1 the CyanogenMOD treatment and it’s well worth doing. However some guidance notes apply which I will elaborate on in this blog post. Let me explain how I did it, some mistakes I made and how you should do it too.

Well, number 1 is to follow the instructions on the project wiki here. Before you start I recommend you scan that whole article and download the 4 or 5 files you need to install to your phone. Oh, and number 0 would be to have a USB microSD card reader/writer handy in case you brick your G1. Now when you download those files for $diety sake please do the MD5 check (use md5sum on any modern Linux desktop) and carefully compare them with what’s listed on the website.

I did not do this and, yes, I bricked my phone. Luckily it seems quite hard to irreversibly brick ones G1 so I recovered but my phone was out of commission for a week. More on that unhappy episode later.
So on to step 2 – carefully transfer ALL these files to your G1. Don’t transfer in order like the article says, just chuck them on in one go. After your transfer, double-check the md5sums of the files on the G1 match the ones you have downloaded and those on the website. Make sure you use a good quality shielded, branded USB cable for this bit (believe me, all USB cables are NOT created equal) and make sure it’s plugged in firmly in both ends, especially the G1 Mini-B jack end.

Monitor dmesg output to make sure the G1 sdcard is mounted properly. dmesg will warn you if the mount process craps out and I even saw a “bad cable?” message when the connection was shonky.
Step 3, now follow the instructions and you should be good to go. Make sure you get the Cyanogen Recovery Image (1.4) installed and working as it will help if you mess a step up by using the wrong file or something.

Now it’s been a few weeks since I did it so I have the experience of living with it for a while. You won’t find me rushing to document my modding exploits the nanosecond after doing it in some kind of nerdgasm. No sir. Your author is too experienced for that kind of thing. There are some issues with the defaults. What are they? Well for one thing, immediately after installing the mod expect the phone to reboot a few times. Although scary when this happens, things will settle down. So keep calm.

Next, you will notice some things seem to take several seconds slower than before. What the hell? I noticed the home screen sometimes took 5 seconds to render after exiting an app, this is an eternity when you want to check something on the move. The solution is to select the “Home app in memory” option (the very last one) in the “Spare Parts” application. This confusingly named option keeps the home app in the Android’s memory thus making it much quicker to render and more like how Android should be – fast and responsive. You will also notice a glaring lack of ringtones and audio material. The solution is to follow the section in the wiki article entitled “Audio Resources (optional)”. That will put back a good bunch of audio stuff back.

The battery life will take a hit and the area on the back of the phone get hotter than usual – I think this is because the CPU is being taxed a bit more. I use the Power Control widget on my home screen which gives instant on/off toggle to Wi-Fi, GPS and a bunch of other battery-hogging things. This lets me easily turn off GPS or Wi-Fi if I’m not in a hotspot or don’t need Google Maps right that moment.
Anyhow, things are generally more quick, especially scrolling through long lists of data. Also there are some cool window animations and those spiffy Android 2.0 icon sets are installed by default. There are some other in-built apps I have not tried yet like USB and Bluetooth tethering, this lets you share the internet connection of the phone with a PC or laptop.

Overall CyanogenMOD ranks as one of the best device mods I’ve seen since the fantabulous XBMC. If you install it and like it then please consider a donation to the project.

So back to the mistake I made. Well, number one is that I used a frakking cheap USB cable in doing the transfer which resulted in a truncated DREAM.nbh firmware image. Had I done an MD5 check I would have noticed this, the file was 28MB versus 80MB like it should be! This is what I saw after rebooting:

As you might guess, my choice of words at this point were not about admiring those pretty colours that greeted me.

As I was without a microSD reader/writer I could not recover straight away. I bought one on eBay and waited a week for it to arrive. When it did arrive it came with a cheap USB cable. I don’t like making the same mistake twice so the cable went in the bin. So in the meantime while awaiting that microSD reader/writer I switched to my backup phone, a rather battered but fully working, Li-Polymer powered, Made-in-Germany, Nokia 6310i.

Ironically, having that phone about my person induced more interest from people than any smartphone could have done. People would reminisce about owning one and there would be other praise like “thats a mans phone, that is.” 🙂 In fact, I have discovered that there are outfits that specialize in refurbishing this model of phone because it is regarded as something of a classic. I get that. The phone has an elegant simplicity to it and a robustness that any business-class tool should have. I have dropped the Nokia 6310i many times and it just kept going and going. I would not like to drop the G1 as frequently. That said, in this era of mp3 ringtones I did wince a bit whenever the Nokia rang with it’s retro low-tech ringtone… 😉

minidisc open-source tech

Minidisc, recording mp3 with DAAP and foobar2000

Yes! At last a way to work the word “foobar” into a blog post with it NOT meaning a Perl “placeholder variable”. Awesomes!

So I upgrade a lot less frequently than other folks. I favour “working with what you have” and really learning to get the best out of a tool. Admiral Adama knows what I’m talking about. In the re-imagined BSG, Adama repeatedly outmanoeuvres a technically superior opponent with his obsolete Battlestar Galactica. This is not just because he has guile, he knows the ship and it’s capabilities intimately too.

I have let my beloved Palm Treo 650 go to be replaced with the HTC G1 running Google Android 1.6. I had my Treo for about 4 years while people around me were upgrading every year and still complaining and not being satisfied. I am really happy with the Android so far. I plan to run CyanogenMod soon.

Also my trusty Debian Lenny slug (266Mhz CPU, 32MB) has been replaced with the more powerful plug (1Ghz CPU, 0.5GB, also Debian Lenny, purchased from service-oriented UK distributor New-IT). The HDD pictured is a fantastic bit of kit for it’s rugged simplicity, military-issue looks and build quality. It is a 1TB WD Elements USB HDD.

It stands apart from it’s brethen in the external HDD commodity market IMHO. Of note is its use of a USB-B plug rather than a ridiculous Mini-USB port which can be easily knocked out. The USB-B connector snaps in place with a reassuring click.

And finally the last upgrade in the series: my lovely piano-black Antec quiet case housing my Pentium III 800Mhz 512MB general use server/desktop is being put out to pasture… the PIII that is, not the case! I have had this since 2000 and it’s been very, very reliable. I put this down to the solid build quality of the Asus motherboard and Intel design. So 10 years later in 2010 I am upgrading to a P4 3.2Ghz HT chip with 2GB of OCZ RAM. I sourced this for the bargain sum of £50 from eBay (therein is another story, but thats another blog post).

I also needed a PCI-Express video card (£5 eBay) and SATA HDD (250Gb WD x 2, £25 each, eBay again). Most of my stuff is AGP and IDE so I prolly need a new PSU too. In another 10 years I will probably have a quad-core or whatever £50 in 2020 money can get me 🙂

The above are screenshots of my Windows 7 desktop. The reason for the Antec PC upgrade is, partly, that I was planning to use this PC as a MiniDisc recording station. Thats right – I’m a big MiniDisc fan. I will elaborate more on this strange condition in another blog post sometime soon. So back to the story – I installed a nifty PCI digital optical card and daughter board in this PIII based PC.

This is because I prefer to record to MD using digital optical for optimum sound quality and there is no faffing around with recording levels. I then decided to try Windows 7 (the Evaluation build) on this PC as I heard very good things about it and being a primarily Ubuntu desktop user I like to see what “the other side” are doing. It installed without of a fuss and I’m very, very impressed in it’s speed on such modest hardware. Only snag was that I had to go through about 4 different NICs before one was recognized (good ol’ Realtek). So with network in place I completed the updates and installed my favourite apps (Chrome, Picasa, I do without AVG this time). My verdict?

This is the best Windows yet by a country mile and one I would even consider buying a licence for.

So I excitedly configured my plug with mt-daap (Firefly) the DAAP server. I figured that something with the words “Audio Access” and “Digital Protocol ” in the title would be optimized for streaming audio in clever ways over a network. My plug is a primarily a media repository shared out with Samba with many gigabytes of music. However I am only to be disappointed. You see, DAAP is OK if you just want to stream stuff to somewhere but as soon you want to do something a teensy bit advanced then you are sh!t out of luck. Servers me right for not RTFM’ing.

I want to create playlists and then record them to a MiniDisc in realtime as a compilation. Creating compilations is one of the best things about MiniDisc and one reason I I have gone back to the format. Somehwat ironically, I install iTunes – surely this mighty flagship application will let me stream music over the network and contruct playlists with them?

Great, it finds my DAAP share and attempt to drag some tunes into a playlist but the mouse pointer has that “no entry” look about it. I try again. I search the options for the “bloody-create-playlists-from-daap” option but cannot locate it. Crap. I can’t do it. Well, opensource to the rescue right? I boot into Ubuntu 9.10 and try the same with Rhythmbox, and… same issue! Noooo! So it looks like it is a limitation of DAAP. Knackers! 🙁

So what now? A little Googling reveals suprisingly little sign of people complaining about not being able to make playlists with DAAP shares. Surely thats a fundamental bit of functionality? However, in performing my Google-fu I come across something else… something better than iTunes: Foobar2000.

This amazing bit of software is an advanced audio player with a ton of plug-in support. It’s all I admire in software – fast, low-footprint, responsive, a clean, simple yet attractive GUI and well engineered internals. There’s little sign of network support so I decide to use the good ol’ Samba shares to my music and import them into Foobar2000 – it does so with a minimum of fuss and I can of course construct playlists from these sources so I am very happy with it. Note that Windows 7 by default does not play nice with Samba shares, at least in Debian Lenny. Please refer to this post on the change to make to the Local Security Policy so that Samba shares become usable.

Observe the CPU usage history above – the peaks and troughs co-incide with the music being fetched over the network (peak) and buffered with playback (trough). This was part of the impetus for the upgrade. Windows 7 chugged quite a bit. Eventually I’d like to run Xen with a whole bunch of virtual Debian guests and this is why I need “moar rams” and the multi-Ghz CPU. Stay tuned for a blog post about that later.

With MiniDisc recording one has to ensure a 2 or 3 second gap between tracks to generate a track mark. A little searching and I find an appropriate plug-in for Foobar2000. Yeah baby! I am all set and I try an experiment with what I consider to be the best tracks from the BSG soundtrack (hard to do because the quality of all Bear McCreary’s music is very high). I cue the tracks, start synchro record and walk away. I come back in about an hour and presto – a fresh MD waiting to be enjoyed and savoured. Simples! 🙂