So, I’ve tried many ROMs for my HTC Desire but the latest, Oxygen, has to be the best. If you have a HTC Desire and are looking to give it a new lease of life then I would highly recommend it. Also rooting your phone is easier than ever thanks to Unrevoked.
I formerly used AOSP which is a fairly vanilla Froyo ROM but very stable. I used this ROM for pretty much the last year. However with my upgrade date for my contract due later this year, and the release of quad-core phones throughout 2012, I started to look at custom ROMs again rather than feel jealous about the shiny new models. And to be honest with you – all I use my phone for is to get at GMail, Calender, Remember-the-Milk, Reddit and WhatsApp – no gaming (like I have the time), no video playback (I like battery life for communicating with people), no music playback (I have the excellent Sansa Clip+ thanks). So I figured I can save some cash by keeping the phone and going to a SIM-only contract when it expires. Yeah, new phones have promising stuff like NFC but AFAICT there is no commonplace infrastructure for that yet – hopefully in 2014 when I am ready to upgrade
So back to selecting a ROM: I first tried CyanogenMod 7.1 (probably the custom ROM most people know about) which installed smoothly. However two problems became apparent – a shockingly fast battery drain and unreliable screen auto-rotate (I think the latter might be due to accelerometer driver problems). Thankfully trackball-wake worked otherwise it would not have lasted the two weeks I ran it for. Both of those problems cannot be sustained so I looked around with the words “stable”, “bug free” with “HTC Desire ROM” and found Oxygen which is based on Gingerbread.
I now have what is almost like a new phone – it’s fast, stable and looks smart. For me there are just two small issues – no trackball wake and no way to disable the photo shutter sound – everything else is cool. If you want to install via Clockwork ROM then it will not work, there is currently a broken link to Oxygen. Instead follow this guide and grab version 2.3.2.
Thank you very, very much Oxygen developers/maintainers – enjoy!

Yes, another step into the 21st Century for the Chaudhry household has been taken with the addition of a PVR (thats “Personal Video Recorder” for the un-initiated). Check photos below, I’m sure the “fox” in the name refers to it’s sleek understated appearance. Hereafter it will be referred to as “Hummy”.
This amazing little black box records Freeview and Freeview HD and does it extremely well. I never really appreciated the power of easy timeshifting of TV content that these allow. It is so easy to bring up the TV schedule for the next few days and choose to record a show or an entire series – all with one button press. Simples! This means I can watch them back at a time to suit me – case in point: this morning at 7am I watched a documentary on spectacular rise and fall of the Hittite Empire from BBC Four
It also means that when I’m relaxing with the Missus we can choose to watch something more interesting than “The Kardashians” (btw, I love teasing her by referring to them as “The Cardassians“).
Anyhow, the PVR functionality is not the only thing I bought it for. It can also playback arbitrary digital media such as videos, music and photos. It also has a very decent BBC iPlayer and YouTube “app” built in which is a much more usable effort for a TV form-factor than practically all others I have seen. That said, I’m not giving up my trusty Xbox XBMC systems any time soon. The reason is that even though the “Hummy” can playback hi-def video (e.g. a 3G Avatar blu-ray rip – in mp4 format, not tried mkv yet) and can stream over a network or playback from local USB media – the network streaming is limited to UPnP only. Yes, I can install Mediatomb or Twonky on my LAN Debian server but I already run Samba and NFS already. Given the Hummy runs Linux then why not support these other protocols? They work so well for media streaming dammit (XBMC).
Did I mention that the Hummy runs Linux? Case in point – the HDD is formatted with ext3. This also means it opens up a world of modding potential and a community has of course built up around it over the last 3 years.
If you want to buy one then I would advise looking for a good condition used specimen from an eBay private seller – lots of folks are choosing to go with Virgin Media or Sky to get the premium sports channels and thus selling on their Hummys. Now and again you might see a listing of a Hummy missing the HDD – go for these and you can get a bargain as installing and formatting the HDD is very easy (see blog post above).
OK so a few bad points – HD channel reception is unreliable and I just ignore them even though they look amazing. There are only 5 of them on Freeview HD at present. Sometimes there is rare signal breakup in SD mode, I have the latest firmware I think so hopefully an update from the Humax will help. I don’t think this is due to my Freeview reception as the Freeview tuner built-in to my TV never had this issue. I would also like some way to turn on and off the TV and Hummy with one button press. I have a Samsung LE32R7 TV so if anyone knows how to do that with the standard remote then let me know. By the way, the 3-digit remote code for this TV I used is 115.
Now excuse me while I find some more shows to fill up my 500G HDD with…
The haproxy loadbalancer is amazing and can be used to reverse proxy a whole bunch of HTTP connections to a webserver farm behind it. The HTTP proxy bit has some neat features like cookie handling so that a HTTP session “sticks” to one webserver in the pool and some smart healthcheck features. haproxy can also loadbalance TCP connections and this feature can be used with MySQL to loadbal connections. Being at TCP level though, one cannot really judge the health of a MySQL server in one of the backend pools. haproxy knows that port 3306 is open and thats about it. Couple that with the fact that haproxy is not really loadbalancing MySQL connections but “distributing them”, after all haproxy does not know if a connection is a simple one row lookup, an update to thousands of rows or a complex join returning thousands of rows.
So why not leverage HTTP to act as a middleman to MySQL and perform a healthcheck based on any parameters we choose? (eg. MySQL connection threads, replication status etc)
Well, don’t tell Perl but I have been continuing my secret love-affair with Python. Recently I have had some time to get hacking again. My effort is the first version of a MySQL health checker which implements a HTTP server on the MySQL server and returns a “pass” or “fail” assessment of it’s health. It’s pretty basic right now but should allow a sysadmin to perform HTTP healthchecks against it to look for the magic words: “pass” or “fail”.
Get it from my github: https://github.com/imran-uk/mysql-health-check
With my new job comes a significant element of MySQL DBA work. It is also opportunity to help my fellow MySQL DBAs by sharing tools, tips and tricks so expect more frequest blog posts!
Today I had to recover a from a bunch of corrupt MyISAM tables in a “cache database”. Client code will throw an exception if these tables are accessed so it is not a good idea to let corrupt tables hang around for long. The fix was in theory easy – just recreate the tables and then rename the corrupt table, rename the new table to the old and then run myisamchk on the old table.
The problem is that “create table foo as bar” does not work if the table is marked as crashed. Some Google-fu found this.
Refer to the MyISAM bit – it really does work. I wrote a bash script to automate it which you can grab here.
However, there is an even quicker way. I discovered that a simple “rename table foo to foo_corrupt” will create a fresh, clean copy of table foo. Not sure if this is intentional but thanks MySQL!
Oh, and sadly these tables cannot be converted to InnoDB – we’re using “INSERT DELAYED” and for some other reasons.