Tuesday, November 20, 2007

Programming Truths

Repeat after me:
Programming is difficult

Again, for effect:
Programming is difficult


Here something else to ponder about:
Just because the computer seems to do what you wanted it to do, does not mean you've written the program correctly.

A analogy to a pack of cards that collapses because one card wasn't properly placed at the bottom is helpful to understand the above.

And above all:
If your code isn't working, it's not perfect.

Never come up to me and tell me "My code's perfect, but it's not working". Please re-parse that sentence to understand how silly it is. I've lost count of the number of people who tell me that. The computer makes mistakes, but more often than not, your code's not right. Let alone perfect.

And yes, of course:
Perfect code is a thing of beauty.

Never forget that.

Monday, November 12, 2007

Supporting Linux

Many of my friends have recently switched to Ubuntu, making me the tech-support guy again. Not that I like to play that role, but if there's something new to learn, then I'm game!

Unfortunately, the support has largely been anti-climatic. When the wireless wasn't working on a friend's laptop, he lugged it to my lab, only to find out that the "wireless enable" switch was off. Turning it on got it working immediately.

Another friend recently installed Ubuntu, and he has a TV tuner. It worked out of the box, except that there was no sound. We finally tracked it down to a mute AUX mixer control. Raising the volume there got that working again.

The second could be attributed to bad defaults -- the AUX control isn't shown by default, and is muted too, but frankly there are no sane defaults in this case.

Thankfully both of these friends do read manuals and explore, so helping them is not quite the pain it usually is.

There have been more "complex" problems that I've handled, installing the Flash and Java plugins on a 64-bit machine. Neither are officially supported (Java's 64-bit JRE ships without the browser plugin!), so problems are to be expected. For Flash, nspluginwrapper worked like a charm, but for Java, the only recourse was a custom 32-bit install of Firefox.

Tech support is boring, especially when you've done it again and again. And these days, if the problem is something that Google can solve, I refuse to solve it. Sometimes rudely.

Tuesday, October 16, 2007

Amazon EC2 is out of beta!

So Amazon's Elastic Compute Cloud is finally out of beta, meaning anybody can sign up for it. Now, you can hire a computer on the net for 10cents an hour. Want 10000 machines computing for you? It'll cost you only $1000 or INR 50,000.

You don't have to worry about where these machines will live, how they're setup, who pays the electricity bills -- nothing.

Does this mean that I now win the NetFlixPrize? Maybe...

Tuesday, September 04, 2007

The IA64 Experience

The machine in the Supercomputing Bay is old. Older than most people in the lab. Yet it has impressive specs. Four Itanium processors. 8GB RAM. Two 80GB SCSI HDDs. And Red Hat 7.2.

This Itanium "server" was condemned to that slow death that is inevitable when you install a distribution that doesn't support in-place upgrades. It grows so old, software-wise, that nobody wants to use the perfectly good hardware anymore. So, last week, when a friend wanted the latest kernel on this machine, I decided to install Debian Etch onto it.

The first thing, of course, is that Itanium machines don't have a BIOS bootloader. Like the Intel Macs, they have EFI. Think of it as a inbuilt Grub, but with lots of additional features. For example, it can boot over the network using PXE directly. There is a command prompt with commands faintly reminscient of DOS commands. It even features a full screen text editor that you can use to edit files on a FAT partition. And yes, it takes a glorious 100MB partition for itself. No more 512-byte boot sectors for EFI.

Unfortunately, this EFI bootloader couldn't boot from the ATAPI slave CD-ROM, without a master.

So it was upto network installation to save the day. Debian installed onto the IA64 over the Internet nicely (yay for Mbps internet speeds!), and booted up just fine. Like all Linux distributions, it uses elilo to boot on the IA64 -- Grub is not supported. However, elilo seems much nicer than its cousin which has been supplanted by Grub on
the x86.

Here are somethings I learnt:

  • The Pause key is useful for paging through output at the EFI console.
  • If the "EFI Shell [Built-in]" option does not drop you at a shell, but starts up elilo instead, the file startup.nsh might exist. You can press CTRL+C quickly after selecting EFI Shell to get to a prompt. This will cancel elilo and allow you to delete/edit the startup.nsh file.

Wednesday, July 25, 2007

Simplicity and the Beast

Go read the WSJ article.

This blog post is about the sentence that says:

"If you're a wonk and you want lots of controls and features, Microsoft is right for you," Mr. Kay says. "If you want a simple experience and you're not tech-savvy, then you'll probably do better with Apple."


Why is this wrong?

It's simply the wrong way to think about the UI for an application.

There are two issues here: Features and configuration. Features govern what go into the program. The configuration controls which features are turned on, and how they behave. Programmers will usually put in all the features they can imagine, and then produce a hideous UI that controls which feature is enabled and how.

But that's the lazy way out. As a programmer, you'd reduce a lot of your load if you figured out which were the most common features used by your users and in which configurations. Then by choosing such a configuration as the default, you're going to make a lot of your users happy because they don't have to fiddle with your program's settings. Note that it's not *all* users, it's a majority of users. For the fringes, make sure you have configuration options, but I'm willing to bet that the UI that results will be a lot more manageable.

One story I've heard tells of a programmer who released a program with some configuration options accidently removed. Nobody complained. In fact, nobody even noticed. That was sign of overdesign. He promptly ripped out the features in the next release. Less code == less maintenance. The original Unix programmers were sparse in their outlook, adding features only when asked to, not mis-anticipating user's demands.

GNOME 2.0 went this way, and I'm extremely happy they decided to take it that way. It's no less powerful, but I spend time working instead of tweaking my GNOME configuration. Ubuntu pared down the menus, bringing down the number of image editors to one from maybe a dozen, one web browser, etc. The rest are still available, but most people use Firefox, so why install Elinks and clutter up the menu?

The only program that I use that is overflowing with features is Amarok. Thankfully, it can be used in a simple mode to play my music and I use the exotic options only rarely. But it's a remarkable program able to tackle everything I've thrown at it (iPods, album art, synchronization, queues, auto-mounting, replay gain, etc.) but I fear as these features will become more "standard", other programs will include them in the GNOME fashion -- it just works -- and I'll move away.

In short, let the users do their work, make your program get out of their way.

And it isn't the number of buttons that count.

Sunday, July 15, 2007

Suspend works again!

Decided to spend a peaceful Sunday pursuing Feisty's inability to suspend my laptop.

After a dozen reboots and no solution in sight, I decided to install the latest 2.6.22-8 kernel from Gutsy. I'd tested suspend with 2.6.22-6, but that hadn't worked. But with 2.6.22-8, it worked! Kinda. The nv driver doesn't bring up the backlight, so I had to go back to the nvidia driver. But now it works!

Regressions: bcm43xx doesn't really work with my card, and ndiswrapper is not included in 2.6.22-8. Dunno why. The changelog has this cryptic comment "No longer provide ndiswrapper or ivtv modules (l-u-m does)". Unfortunately, I've no idea what l-u-m is!
Attempting to recompile ndiswrapper results in some dependency problems which I'm in no mood to fix (requires linux-headers, but linux-headers requires libc6 2.6, etc.).

Ah well. It's still a couple of months away.

Update: l-u-m is linux-ubuntu-modules, which I found out by following the dependency chain from linux-generic.

Tuesday, July 10, 2007

Intel BIOSes require the Bootable flag on partitions

Not much on my tech blog these days, but here's a quick solution to what seems to be a common gotcha. We recently got new machines for our lab, and they all run a 946 chipset. The installs went smoothly with grub getting installed, but after rebooting, the BIOS refused to boot from the hard disk, pretending as if it wasn't there at all!

It turns out the BIOS on these machines refuse to boot from the hard disk if none of the partitions has the bootable flag set. This is a bit crazy, and can make you go hunting for unconnected hard disks and stuff like that.

Here's the quickest solution, for the above mentioned problem:
  1. Boot from CD, I used the Ubuntu CD.
  2. Choose "Boot from Hard Disk" or equivalent.
  3. In the resulting grub menu, press 'c' to get to the prompt, and execute the following commands, where hd(X, Y) is your boot/root partition:

    root (hdX,Y)
    makeactive
    This will set the bootable flag on (hdX, Y).
  4. Press 'Esc' to get back to the menu, and boot normally.

Saturday, May 26, 2007

Does Windows have that?

Sometimes I wonder, on seeing some wonderful new feature in Linux, whether Windows possesses the same feature. The feature this time, was dynamic ticks, that headline grabbing, gut-wrenching (atleast for 2.6.21) patch that allows Linux to save a lot more power than your Windows laptops. Or does it? I mean, if Windows has that feature, then Linux has just "caught up", and I can't claim advantage.

Thanks to Kernel Comparison: Linux vs Windows -- whose motto is "Everything you wanted to know about your kernel, (but were afraid to ask)" -- I now know that Windows does not support dynamic ticks.

Useful reference that.

Wednesday, May 23, 2007

An Open Source Google Base

I think Google Base is far too good an idea to see only an implementation from Google, accessible only through their APIs.

Is there an open source clone?

Or wanna build one? *grin*

At the very least, it'd require the following components:
  1. A frontend to convert and store the XML data into the backend. See the "* Feeds" reference documentation for the formats.
  2. A query engine to understand and execute the URL query syntax. At high-speeds. This is the hard part. See also: Query Lang Specification.
  3. A mechanism to store data in such a way to enable high-speed lookups as well as support all those different types of data. This is the very hard part, in my humble opinion.
Think of it, at a minimum, as a way of putting an URL query mechanism to an existing database like PostgreSQL. We could probably take it from there.

What's the use? Well, the web could do with a database service that can do everything Google Base can, but without any Google-specific idiosyncracies. Plus, it'd be compatible with Google Base!

Unlike most of my projects, this one is not so well thought out, as you can probably see from the fact that I don't even have a name for this project yet. Suggestions?

Friday, May 18, 2007

Why FOSS is Better, Yet another Case Study

Recently developers at Intel released a tool called PowerTOP. For users familiar with top on Unix systems, this tool is similar, except it displays information on programs that are "waking" up the CPU often. What does this mean? To cut a long story short, it means you can now identify which programs are interrupting a CPU's sleep, and determine if that interruption could have been handled in a better way, letting the CPU sleep longer. That way, battery power could be saved.

Why is this tool a good example of Free Software at work? Not only did the developers create this tool, they also identified many free/open source software programs where things could be done better. Because the source was available, they were even able to make patches -- or modifications -- available so that battery life was extended by "an hour or more!" This is amazing. Imagine doing this on your insert-favorite-proprietary-operating-system here. It'd take years for the OS vendor to get it, then the programmers to get it, and then for them to get together and do it.

Why is this on my blog? I use liferea, a feed reader that manages my RSS feeds, and the latest release has this cryptic changelog: "This release decreases CPU power consumption for laptop users". My life is already better, thanks to PowerTOP.

Oh yeah, bonszai says, "Thank you, Intel!"

Monday, May 07, 2007

Summer Surprise




This is a PicoPeta Simputer...you are assimilated!


blob version 2.0.5-pre2 for PicoPeta Simputer

Copyright (C) 1999 2000 2001 Jan-Derk Bakker and Erik Mouw

Simputer platform Copyright (C) 2002 Vivek K S, PicoPeta Simputers Pvt. Ltd.

blob comes with ABSOLUTELY NO WARRANTY; read the GNU GPL for details.

This is free software, and you are welcome to redistribute it

under certain conditions; read the GNU GPL for details.

Memory map:

0x01000000 @ 0xc0000000 (16 MB)

0x01000000 @ 0xc8000000 (16 MB)

Loading blob from flash . done

Loading kernel from flash ... done

Autoboot in progress, press any key to stop ..

Starting kernel ...


Uncompressing Linux............................................ done, booting the kernel.


Simputer login: root
[root@Simputer /dev]$cat /proc/cpuinfo /proc/meminfo
Processor : Intel StrongARM-1110 rev 8 (v4l)
BogoMIPS : 127.38

Features : swp half 26bit fastmult

Hardware : Picopeta-Simputer
Revision : 0000
Serial : 0000000000000000
total: used: free: shared: buffers: cached:
Mem: 31494144 19243008 12251136 0 1429504 9195520
Swap: 0 0 0
MemTotal: 30756 kB
MemFree: 11964 kB
MemShared: 0 kB
Buffers: 1396 kB
Cached: 8980 kB
SwapCached: 0 kB

Active: 3452 kB
Inactive: 11716 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 30756 kB
LowFree: 11964 kB
SwapTotal: 0 kB
SwapFree: 0 kB

[root@Simputer /dev]$


Saturday, May 12.

Monday, April 30, 2007

The Feisty Fawn Upgrade

I finally did it last Thursday, upgrading from Edgy to Feisty. I thought it would be fun to relax by installing Feisty after a rather tough academic session. Oh boy, was I wrong! Regressions, a root file system corruption, and the eventual re-installation kinda disappointed me. But I'm running Feisty now! Here's how it went off.

After burning the DVD, I noticed the cdromupgrade script on the DVD, and decided to run it, instead of the normal aptitude dist-upgrade. A couple of clicks and one hour later, my system was upgraded to Feisty Fawn. Such simplicity -- I thought -- it can't be this easy! Yet it was. In a way.

Unfortunately the reboot failed. It would come to the boot screen and simply hang. Turns out, I had installed a custom kernel in Edgy, which was also set to be the default. This was simple to solve. Just select the Feisty kernel in the grub boot menu, and later reconfigure the previous kernel, dpkg-reconfigure linux-image-old, and it booted fine. I guess upstart's not really working well with the old kernel's initrd. Boot time is now 45s, down from 55s for Edgy.

The nv driver, as I mentioned in an earlier post, works perfectly. The coolest feature about X.org 7.2, is its ability to run without a xorg.conf file. Just remove the xorg.conf file, and see it run perfectly! It did, for me, atleast. I did have problems with the scrolling on the touchpad, but that was easy to fix, just add options psmouse proto=exps to /etc/modprobe.d/options.

Unfortunately, there were two regressions. The most evident, and a show-stopper for my laptop was support for the headphone jack. Unlike Edgy, where it wasn't even recognized, and I had to install the latest ALSA, in Feisty, both speakers and headphones work, but have a single volume control. Unfortunately the speakers aren't muted when I plug in my headphones. Incredibly annoying, as my labmates will testify, as I blasted Jonny Quest's theme song again and again. Feisty ships with ALSA 1.0.14rc1, and I had to compile and install 1.0.14rc3 from Debian, which was, thanks to make-kpkg, a breeze. Now, plugging in my headphones automatically mutes my speaker, and vice-versa. It's not perfect yet, I've to trigger the detection by muting/unmuting, but this is how it should be. The speakers also seem to sound much louder. FYI, the sound card/codec is a NVIDIA/Conexant CX20549 (Venice).

The second regression was Suspend/Hibernate. I use Suspend rarely, and it used to work beautifully in Edgy. Unfortunately it's broken in Feisty. I first thought it was a problem with nv, but the nvidia driver has the same problems. Also it turned out that my forced shutdowns ended up in me corrupting the root filesystem. Ouch.

Recover or re-install? Well, I always wanted to re-install Feisty (just for kicks), and here was the opportunity. So I wiped the root partition, and re-installed Feisty. Took about another hour, and I'm still re-installing apps -- but thanks to aptitude that's not much of a pain. All of my settings and data were not affected -- thanks to the good fortune of having a separate /home partition. What is a painful is that main in Feisty does not fit on the DVD, and you'll need the web repositories too. Irritating.

Oh yes, beryl 0.2.1 doesn't work either. The window decorator (emerald) doesn't work.

After all of this, what's Feisty worth to you? If you're using Edgy on a laptop and it's working, I recommend you continue. However, Feisty's GNOME feels much faster and lighter (and is too!), and having the latest and greatest applications always feels good. As I said, fun, but not relaxing. It works, but keep your fingers crossed!

What's really different about this install is the amount of software I had to add to make it all work. For Feisty, only ALSA. For Edgy, I had to do ALSA, ndiswrapper, network-manager, and some other stuff I've forgotten. So, this is progress. Two steps forward and one step backward, but progess nevertheless. Now to wait for the Gutsy Gibbon.

Update: May 7, 2007 Monty is my hero! Here are the options to add to the screen section in xorg.conf to get beryl working:

Options "AddARGBGLXVisuals" "True"
Options "DisableGLXRootClipping" "True"

Thursday, April 26, 2007

Flash 9.0 on 64-bit Ubuntu with Firefox 2.0

I'm watching the Mac vs. PC ads on Youtube, in the 64-bit Firefox 2.0 browser. This shouldn't be working, Adobe does not have an official 64-bit Flash player for any operating system, let alone Linux. You ask how? Here's the trick:

  1. Get nspluginwrapper sources from the Debian website.
  2. Compile and install.
  3. Get the Flash 9.0 player from Adobe.
  4. Untar, and copy libflashplayer.so and flashplayer.xpt to ~/.mozilla/plugins/
  5. Run nspluginwrapper -i ~/.mozilla/plugins/libflashplayer.so
  6. Enjoy!
I've done this before, with an older version of nspluginwrapper, but could never get sound working. Maybe the fact that I used RPMs (converted by alien) messed things up. Even now, however, nspluginwrapper segfaults. Thankfully it works for nspluginwrapper -i, which is all I that's required.

As an aside, swfdec is a free software Flash viewer that plays Flash videos, and so is gnash.

Furthermore, youtube-dl allows you to download the flash videos to your hard disk, where mplayer or ffplay (better) can play them.

Freedom in Sight?

I justed booted into Feisty Fawn today, using the live CD. Some pleasant surprises were in store.

Video worked perfectly. With the nv driver. Yes, the free nv driver. And from what I can tell by reading the X log, it seemed to have detected the external video outputs as well. If this really works, drivers from nvidia get thrown out.
Not only did the nvidia driver give me fewer resolutions, it also messed up my console. I used it only because it gave me VGA-out support, which is needed for presentations using bonszai. If nv can do that, well, nv it is then!

And bcm43xx, the free driver for Broadcom-based chipsets? It works too. Not only can the latest bcm43xx-cutter (006) use the drivers provided by Compaq, it also warns me that support is not in mainline yet for those drivers. So I must use the older drivers. Which is fine with me. So far web-browsing works. Web downloading does not, with speeds of 4--5 KByte/s (which is worse than dial-up)But to be fair, I really haven't tried wireless from my new location, so maybe I better check out my older version. Ubuntu now has network manager, which is really a painless way to configure networks, across operating systems I must add.

Given that video and wireless were the only two components of bonszai that used non-free drivers, I'm looking forward to running a fully-free bonszai!

Saturday, April 14, 2007

We're now Doctors!

Found when browsing a list of not-so-well categorized books:

Under section "Medical Books"
  1. Artificial Neural Networks
  2. Genetic Algorithms
:D

Thursday, March 08, 2007

The Death of the Web 2.0 Company?

I recently attended a talk by a Yahoo! executive on "Socially Immersive Media". That's the term they use for the phenomenon of user-generated content and other Web 2.0 elements. He was rather gung-ho about the prospects of these new Social Media companies, and how traditional media was finding it difficult to compete.

And then it hit me right in the middle of the talk. These "Web 2.0 companies" will be going the traditional way very soon. Their victory is a short victory.

Let's take a look at the web as being composed of "content", "applications" and "infrastructure". Early on, all these three components were supplied by one central, logical entity, not unlike how "old media" does it. And then came these new media companies, the "social media" companies, who ceded control over creation of content to the masses. They just provided the application (like Blogger, Flickr, etc.) and the infrastructure, but content was by the masses, of the masses and for the masses.

Of course, it's not written anywhere that applications or infrastructure are the exclusive domain of these social media companies. Open source applications, community-owned, have existed for a very long time now. Indeed, many users are already constructing applications (or "mashups") using APIs provided by some of these companies. These companies are the lucky ones. They'll go, but slower. It's not difficult to surmise that a few years on, these companies will be relegated to just providing infrastructure on which the masses write and run their applications.

But to truly democratize the web, we must own the infrastructure too. Now, this is a difficult problem. Can we set up a masses-owned Google, for instance, that meets similar standards of quality and performance and even exceeds them? Peer-to-Peer applications have already demonstrated that infrastructure can be owned by the masses, but how long is it before these protocols go "mainstream"?

Pipe-dream? Science fiction? Thanks to the Democracy TV/Player, it's not. This is a perfect example of what I'm talking about. The content for this Wired Magazine's "future of Net TV" application is all user-generated. It's a Free Software application written by the community. And it uses BitTorrent to get around the nasty problem of hosting video broadcast infrastructure. And it works!

Me doth think these companies rejoice too soon.

Saturday, March 03, 2007

On the Mechanics of Code Writing

Code writing contains some mechanical activities which are best automated by your editor. Here are some features any decent code editor should provide, to make your code writing more pleasurable. If you didn't know that these features existed, you should revisit your editor's manual now!

Block commenting and uncommenting of code

You've written some code, and you want to try out some other approach. You don't think this is worth a version control system, so you comment out code, and write new code. You probably do this frequently.

So it makes sense for your editor to support automatic code commenting and uncommenting features. You select a piece of code, press a few keystrokes, and the code selection is commented out. Beats inserting comment characters, especially when certain languages don't have a single-character comment delimiter.


Indenting and Re-indenting

Indenting improves code readability. I do not find reading badly indented code a pleasure. Perhaps the editor they used to write the code didn't support code indentation. Indentation affect newly written code, or old already written code. A good editor supports both.

When new code is being entered, the editor keeps track of the current indenting level, and then automatically indents the next line of code for you. Most editors do this.

Then re-indenting old code, some editors provide manual block indent and un-indent block features. You select a block, and then you can indent the block in or out, but manually. This is better than nothing.

The really good editors will allow you to select a region of code, and re-indent that region as per surrounding code.


Syntax Highlighting

After indenting, the next best feature that improves readability is syntax highlighting. Unlike most other features, this is something that you don't invoke, but something that always works in the background.


"Locate Symbol" Feature

Most editors have a Find feature, but a "locate" feature isbetter. You position the cursor underneath a symbol (function name,constant, etc.) and invoke locate. You'll find yourself at the definition of that symbol, regardless of whether it's in the current file or somewhere else.


Autocomplete Features

Autocompletion of variable names, function names, and other symbols. Very very productivity enhancing when done right. Unfortunately it's not easy to do this for some languages, and hence not many editors support it.

Wednesday, February 28, 2007

Copyright Myths and Misunderstandings

I first learnt about copyright the "hard" way. I was on the verge of releasing a program, and that entailed that I learn as much as possible on copyright and software licensing --- I'm one of those guys who actually reads the license agreements! As a pleasant side effect, I learnt about "copyleft", the GNU GPL and Free Software, which eventually led me to stop considering licenses for my software: my software is usually in the public domain (i.e. no copyright) or is GPLed (i.e. copylefted).

Here are some things you should know about copyright:
  1. Copyright registration is not required. It's very useful if you ever expect to go to court, but as a friend pointed out, just e-mailing the source to yourself at some public e-mail service, such as Gmail, would probably establish that you did it earlier. And you can keep your work secret too.
  2. Copyright is assigned automatically to you. There is absolutely no need to even say "Copyright (c) Year, Author". At least after 198x, I think.
  3. Copyright is available for all works, regardless of quality. It protects both your kindergarten drawings and Escher's complicated and beautiful works equally.
  4. Copyright covers only distribution. That should be evident from the name, but a lot of people put restrictions on use and ascribe them to "copyright". If you intend to distribute the work, for profit or otherwise, you need permission from the author. Note that if your use of the material falls under "fair-use", permission might not be required. However, fair-use is never defined explicitly, it's upto the courts to decide what exactly is fair-use.
  5. Copyright is limited. It expires. However, current copyright time limits are so generous that you may have to wait for a very long time for any part of current culture to fall into the public domain.
  6. The public domain, as a legal expression, means that there is no copyright asserted. A public domain work belongs to all, and everybody is free to do whatsoever he/she desires with it. Copyright and public-domain are mutually exclusive. You can put your works in the public domain by stating so, without having to wait for the expiry of your copyright.
Note that I'm not a lawyer, and the US Copyright Office's Copyright FAQ page has lot more information.

Wednesday, February 14, 2007

I'm Kewler than You Think (!)

Behold! My new SHE-F18P MP3 Music player!


This little baby brings me into that hallowed land of people who possess hardware digital audio players! Well, these days that's about almost everybody, and so nothing "kewl" about it, but who goes for technicalities anyway?

It's a 1GB player with MP3/WAV support. Unfortunately. Why did I get this? Well, it was gifted to me, and I couldn't refuse a freebie. I had my eyes on the Cowon iAudio family of players, which would have set me back a couple of thousand bucks, but no price can beat FREE when it comes to a poor student :)

Removable LiIon battery, with both wall and USB-based charging, support for about a dozen languages---it started up in Traditional Chinese! (This is probably why I got it!) I concentrated and hit the right buttons, and there was the French interface! Soon after there was the English interface. Some fumbling on part, Japanese followed by German/Deutsch and then finally English. I bet I can now do this in my sleep now.

In other notable features, supports LRC (Lyric files), can display text files as well, easy USB transfer mechanism (though seems very very slow on the download path). Notable anti-features: MP3-only support (no OGG!), doesn't seem to support M3U playlists (haven't tried PLS), no FM radio (though the manual does hint at FM support, I can't read Chinese!) and tacky buttons.

Amarok seems pretty happy with it, though it does seem to have it's own individual ideas of how to place files (configurable, of course), though the player doesn't seem to mind. But I do want playlist support.

As another sweet thing, I also got that old 256MB player that I lugged around once or twice in Jan 2006 (remember?), which means I can get down to reverse engineering it. My folks were kind enough to send rechargeable batteries and a charger too!

It does have firmware upgrade support, but I doubt the manufacturer has released anything at all. Retails for 199 Yuan (around 1200 rupees) in Walmart China I suppose.

Now I can get down to practising for Marathon 2008!

Update: It does play OGG! I've never been so happy to be wrong! Can't seem to read the metadata, but who cares (for now)! Note that the OGG support isn't advertised anywhere, it justed started playing the files! Whoo-hoo!

[Photo courtesy: NP]

Tuesday, February 13, 2007

Open your Data!

[Warning: Long long rant]

I'm scratching a rather irritating itch. I'd like to travel around in Bangalore, but I don't have the money to move around in rickshaws, nor can read Kannada to figure out where a particular bus goes (No dual language boards here!). After having been pampered by BEST, the BMTC is getting to be a royal pain.

I've bought maps, guide books, route maps, time tables, but they've all been "designed" without even consideration for the most common use-case. Just know the stop names? You're out of luck. No source lists stop names, only stage names (which is what the BEST also does, BTW).

Well, not exactly no source, for there is one source that has stop-level granularity. The superbly detailed large-format BMTC route map (50 bucks!) is that only source, but nobody intended it to be used that way. In fact, it's a mystery to me how people are supposed to use this thing. Only a laborious search through the entire map will reveal the locations of the stops, and once that is done, correlating that information to route numbers is next to impossible. In fact, the map wastes precious space on "segment numbers" (which I guess actually constitute routes), but that information in its present format is only intelligible to somebody on the inside--it's not used by any other information on the map.

Well, this is Bangalore, the IT capital of India, and so the BMTC provides a web-based interface to search. Except that it sucks big time. There are two versions, (and I'm guessing here) a "professional" JSP edition, and a "final-year project" PHP version. Forget the technical mistakes---using POST for idempotent data---the UI design is horrid. It's what most UI designers would say is the perfect example of the programmer-designed interface. Letting the UI reflect your code, and not the opposite. Both the "search engines" present drop-downs, presenting stage-to-stage information. Wow. I imagine that everybody travels from stage to stage only.

So what do I do? I do what I do best. I'm now writing a search engine for finding information about buses. Its called busfinder, and will initially provide "similar" functionality to the existing "search engines". Except, of course, it won't be tied down to the BMTC. I intend it to be used by any bus service. It will be small, fast, and featureful. It'll be written with the traveller in mind, and not the backend database structure. I've got a little experience doing this sorta thing, and hoping this will also clear up some of my programming blues.

Which brings me to the real topic of this post. Which is data. Everyone who's spent some time in this industry knows that programs are a dime a dozen. It's your data that's actually valuable. That's why vendors prefer to use proprietary data formats--once locked in, they know you'll be at their mercy forever. And that's why there exists even a data conversion sector.

But for my search engine, I need data. The BMTC could do me a wonderful service by giving me access to their data in a machine-readable form (maybe they will, if I ask, but I haven't and won't). But for now, I had to scrap their HTML pages. And as I have found, their data sucks. There are missing routes, incorrect stop names, and inconsistent information that all stink to heaven of five-buck-an-hour typists and even cheaper database architects (normalization, anyone?).

And then I had this idea inspired by their application to make their route maps available via Google Maps (which now has street-level data for Bangalore, but not yet searchable, aargh!), but there seem to be no public-domain (or even freely-licensed) geo-referenced information available for Bangalore. The info exists--see http://traffic.mapunity.org (functionally similar to busfinder, but with the same UI problems)and http://www.janaagraha.org/jmap/, but no data is available for download. It's all locked up behind the respective applications. No APIs either, so no mash-ups possible.

Which is why I make this appeal. Free your data! Make your data available in machine-readable format with liberal licenses for use by the general public. If you're a government institution or somebody who doesn't necessarily have computer expertise---tap the internet! Release your data and see how the brilliant minds of the 'Net breath life into your data. Remember, there is always a better program. But you may have the best data.

Monday, February 12, 2007

G'bye Windows Support

With Windows Vista, it's now two windows versions that I've never seriously used. I stopped using Windows when XP was released about 5 years ago, and have never looked back. I moved to Red Hat Linux, then to Ubuntu, using Debian along the way. This has meant that I'm really out of touch with the "mainstream" computing world.

That is not so bad. Imagine the tons of support requests I'd get, which I now decline with "Sorry I don't use Windows". And I'm not lying either.

Thursday, February 08, 2007

Wirefree!

I received a Jabra BT135 Bluetooth Headset, courtesy HP, a couple of days ago. Funny thing is that they import it to a place that's ten minutes from the Institute, but I had to wait for two months for it!

My primary purpose for this new toy was to use it with Bonszai, rather than with a mobile phone. Yes, it's mono and not stereo, but going wireless with audio would be fun! Turns out Linux does support these headsets out of the box, with the snd-bt-sco driver. Essentially, this driver supports bluetooth headsets by appearing as another sound card to all applications. This page has more details.

Unfortunately, nothing ever works out of the box for me. Turns out that because I'd re-compiled ALSA separately from the rest of the kernel, the snd-bt-sco driver refused to load, citing lots of missing (and version mismatched) symbols. Either I could recompile the entire kernel or go back to the older version of ALSA (and lose the normal headphone support!). I decided instead to upgrade to kernel 2.6.20 which I knew would have the latest ALSA. The only thing that would break would be the nvidia drivers.

So there I was, snd-bt-sco loaded, btsco running, and trying to get a song to play using aplay or mpg123. Except it just wouldn't play! The headset would pair up, authenticate, send messages to the computer whenever I pressed buttons, emit a ringtone when I commanded it from the computer, doing everything short of playing a song. All the music playing apps would just freeze. Others had encountered this situation too, but nobody seemed to have found a solution to it. Just bugreport after bugreport. I struggled for a long day, before giving up.

Today, I found this bluetooth-alsa page and this thread that documented a fix to exactly the same problem. The solution was simple: use the force_scofix argument to the hci_usb module (when you load it the first time), especially if you're running a Broadcom adapter.

Voila! It worked! Sound is not that great, but it is convenient to listen to music about 5 meters wire-free away!

I hate Broadcom. What's wrong with them? First wireless adapters, now Bluetooth adapters. Sigh.