Nokia’s N800 “Canola” media player

Here are some of my thoughts after trying the latest beta version of Canola. The smooth über-simple UI very nearly turns the N800 into a home internet media player, but falls slightly short. If it was open source then it would get there sooner. If Canola doesn’t then someone else will first, which would be a waste of the developers’ hard work.

Installation

This is great. Just open a link from the browser and the thing is installed after a few straightforward button clicks. It seems that Maemo supports .INSTALL files, offering to add a line to the apt-get sources.list file, and then using it to install the specified package. Well done, someone.

Separate configuration

Canola can use UPnP and Dmap (part of DAAP, I think) servers to get shared audio and video from your PC or media server device. I think this concept has encouraged the developers to take the client/server idea a bit too far. So there is a separate Canola Configuration menu item, which starts a web page which connects to a local web server. There’s no reason for this to be a web UI, and no reason for it to be a separate application, interrupting the user experience. It’s an implementation detail that has been exposed to the user unnecessarily. For instance, there’s no good reason that I should have to use a web page to change Canola’s UI theme. If the developers want to get and set application configuration via a local http service then that’s fine, but it doesn’t need to be exposed to the user via a web UI. This is architecture astronautism at the expense of user experience.

The same goes for radio stations and podcasts. Please let me choose them from a list or wizard via the regular UI. At the moment they are even hidden under a “plugins” section in the web UI. Give me instant gratification now, please.

Too many clicks

I can’t click on things as soon as I see them. The simple menu is nice, but quickly annoying for one reason: To select something I have to scroll with the arrows until the item is in the selection rectangle and then click it. I should be able to click it as soon as it comes on screen, as I keep trying to do. Then the selected-item rectangle would be meaningless and could be removed.

It would also be nice if I could scroll with a sweep gesture, as I can in the browser. Trying to do this causes me to accidentally select one of the horizontal icons when my stylus touches it.

When I select an “iRadio” station, it should start playing. Don’t make me click the play button too.

Bugs

Something is causing the list of radio stations under each category to be different each time I open the category. I think it’s doubling the list each time.

Media Server

I haven’t tested the Shared Audio and Shared Video features. What upnp server should I use on Ubuntu? The Canola web-page recommends Twonky, which seems to be proprietary.

Scratchbox on Ubuntu Feisty

I’m using a dodgy fork of Scratchbox 0.9.8 so I can use apt-get through https instead of http, but the following tips should be relevant for the regular Scratchbox 1.0.x that I’d rather be using.

  • Make sh point to bash instead of dash (probably not necessary for Scratchbox 1.0.newenough):
    sudo rm /bin/sh
    sudo ln -s bash /bin/sh
  • Install linux-image-2.6.20-6-generic and boot from it. You’ll probably need to press Esc when booting to see the boot menu. This vdso bug might be fixed in Ubuntu’s linux-image-2-6.20-10 soon.
    If you don’t do this then you’ll see this error after logging in:
    Inconsistency detected by ld.so: rtld.c: 1192: dl_main: Assertion `(void *) ph->p_vaddr == _rtld_local._dl_sysinfo_dso’ failed!
  • If you see this error while installing some packages, such as docbook-utils,
    ERROR: ld.so: object ‘/usr/lib/libfakeroot/libfakeroot-tcp.so.0’ from LD_PRELOAD cannot be preloaded: ignored.
    then fix your fakeroot like so, while logged in:
    sbox-config –copy-libfakeroot
  • Update: You’ll need to correct the hosts line in your /scratchbox/etc/nsswitch.conf file, so that apt-get can resolve domain names (wget will work without this, which is confusing).
  • Update2: That nsswitch.conf corrections seems to still be necessary with Ubuntu Gutsy and the latest Scratchbox version (as of July 29th 2007).

Ross Burton helped me with most of this. Thanks, Ross

FOSDEM and the Dreaded Lurgy

I spent the weekend at the FOSDEM conference, an impressively chaotic meeting of diverse software developers. At any one time, there were three talks that I’d like to have seen, and there were so many great people there that I usually got waylaid on the way to talks. All of these people really need to move to Munich.

The GNOME room was a well-organized safe haven. Thanks to Christophe Fergeau and Vincent Untz and GNOME.fr friends. As a GNOME Foundation member, I was entitled to a free T-shirt. It’s the best yet, and actually fits me. It’s a tasteful shade of gray with a small logo, so it can be worn in real life. Conferences normally discriminate against Mediums. For instance, XL was the smallest FOSDEM T-shirt available.

I did a little introductory talk on Glom, which was just an update of my GUADEC talk, and I suspect was very dull. Glom’s a lot more interesting than a bunch of bullet points. Some time I should dedicate a few days to doing some screencasts. Preceding me was the Bling talk by Mirco Müller. When talks are too successful at FOSDEM, the vibrations from the applause trigger the fire alarm. So I had to delay for a few minutes to let people get back into the room. We should maybe alert the authorities before Mirco’s next talk.

I caught some kind of cold on the early morning flight to Brussels, and my voice was almost completely gone by Sunday night. I had planned to spend Monday looking around the town, but instead I went to the airport early in the hope of an early flight back to a warm bed. That didn’t work out, so I shivered on an airport bench for 8 hours. Not being able to speak above a whisper is a really odd experience. It turns out that speaking is really useful.

The are various important things that I need to do, but I’m knocked out for a day or two.

Linux-compatible wireless USB adaptor: Results

After my 3 previous posts, I decided to get serious. I tried four different USB wireless adaptors – the most widely available ones that were most likely to work based on my previous entries. I knew one of them would work, but I wanted facts.

My interpretation of “widely available” is “available from Amazon”, partly because they have a wide range, including products from extra sellers. And because I’d like to fund my research through the Amazon associates links, by creating an über-simple page of just-works Ubuntu hardware. If that works then I can use the income to keep the results up-to-date by buying new devices for testing. It’s unlikely that I’d make a profit on that.

Maybe it’s a silly idea, but nobody else is offering a list of just-works hardware for just one distro, for the people who want a simple answer. All the lists I’ve seen so far are vague and out-of-date and/or have a bizarre understanding of “works out-of-the-box”. It’s time to simplify the question that we are trying to answer.

IMG_2166

Summary

Update: Get a ZyXEL ZyAir G-220 v2. Otherwise try to get the MSI US54SE (more difficult as time passes). The ZyXEL ZyAir G-220 v2 now works perfectly in Ubuntu Gutsy, and it’s still available. There is no improvement in the support of the other cards in Ubuntu Gutsy.

Old text: Get an MSI US54SE if you possibly can. That seems difficult in the USA, but it’s on Amazon Germany. It works out-of-the-box on Ubuntu Edgy, and Feisty, but not Dapper. There don’t seem to be any alternative non-working versions with the same model number. This is how it should be. If someone finds a source for MSI US54SE sticks in the USA, please let me know. Richard Hughes’ experience with a 3CRUSB10075 suggests that it might be just as good, probably with the same chipset, using the same zd1211rw driver, but the model name is vague and I suspect there are various different versions.

And Linux Emporium generously sent me a sample of their Edimax 7318USg wireless USB stick. They know this doesn’t work out-of-the-box, due to driver problems with the new RT2571 chipset, but they’ve done lots of research and testing on various Linux distributions, and provide drivers on a CD, with a very simple command-line script that installs everything, and then works on Dapper, Edgy, and Feisty. This model is not available on any Amazon sites, so they seem to have found something special. They’ve spent considerable time on a product that probably has a very small profit margin, because they want to give back to the community, out of the goodness of their hearts. So buy stuff from them.

Note: This test was only on an open wireless network. Frankly I was glad to get something that worked at all, and more detailed tests can happen later.

Details

ASUS WL-167G

  • Ubuntu 6.06 “Dapper”: Not recognized in any UI, and not even by iwconfig on the command-line.
  • Ubuntu 6.10 “Edgy”: wlan0 and wmaster0 show up in the Networking control panel, but can not make connections. Shows up as “Unknown USB Vendor Specific Interface” in the Network Manager applet, without a list of access points.
  • Ubuntu Feisty: Recognized by Network Manager applet, but could not connect to any of the listed access points, which are also listed as having zero strength. Listed as wlan0 and wmaster in the Networking control panel, but trying to configure either crashes the control panel.
  • Ubuntu Gutsy (as of 7th September 2007): Hangs the entire system when it’s inserted, or when logging in with it inserted.

Notes:
It’s no longer available from Amazon.com right now anyway. You can still get it from amazon.de.
The script/driver from Linux Emporium for the Edimax 7318USg also made this ASUS WL-167G work, though with the same lack of integration with the Network Applet or Networking control panel.

Edimax 7318USg

  • Ubuntu 6.06 “Dapper”: Not recognized in any UI, and not even by iwconfig on the command-line.
  • Ubuntu 6.10 “Edgy”: wlan0 and wmaster0 show up in the Networking control panel but can not make connections. Shows up as “Unknown USB Vendor Specific Interface” in the Network Manager applet, without a list of access points.
  • Ubuntu Feisty: Recognized by Network Manager applet, but could not connect to any of the listed access points, which are also listed as having zero strength. Listed as wlan0 and wmaster in the Networking control panel, but trying to configure either crashes the control panel.
  • Ubuntu Gutsy (as of 7th September 2007): Not recognized by Network Manager applet.

Note that this worked on all vesions of Ubuntu with the supplied driver, though you’ll need to use the command-line to connect, and you’ll need to rebuild the driver every few months when your Linux kernel is automatically updated.

MSI US54SE

  • Ubuntu 6.06 “Dapper”: Not recognized in any UI, and not even by iwconfig on the command-line.
  • Ubuntu 6.10 “Edgy”: Works out-of-the-box. It is recognized by the Network Manager applet, which lets you choose an access point from a list. You may also configure it via the Networking control panel.Slight imperfections: The Network Manager applet lists all access points with the same 80% signal strength, though I know some are very weak. The Networking control panel does not show a list of access points, so you must type in the access point name manually.
  • Ubuntu Feisty: Works, as in Edgy.
  • Ubuntu Gutsy: Works, as in Feisty.

Note: I also tried to get the MSI US54G, because it’s available in the USA, and I suppose there’s a remote chance that it’s similar to the MSI US54SE, but after two weeks Amazon.de has not yet been able to deliver it. Frankly, it’s not very likely that it works. I’ll update this information if I get my hands on one.

ZyXEL ZyAir G-220 v2

  • Ubuntu 6.06 “Dapper”: Not recognized in any UI, and not even by iwconfig on the command-line.
  • Ubuntu 6.10 “Edgy”: Not recognized in any UI, and not even by iwconfig on the command-line.
  • Ubuntu Feisty: Recognized by Network Manager applet, but could not connect to any of the listed access points, which are also listed as having zero strength. Listed as wlan0 and wmaster in the Networking control panel, but trying to configure either crashes the control panel.
  • Ubuntu Gutsy: Works out of the box.

This was a wild-card choice, because I’d read somewhere that some of their other models, now unavailable, worked out of the box. I think this one has a zd1211b chipset. In Ubuntu Gutsy it seems to use the “zd1211rw” driver. I’d love to hear reports about the more recent ZyXEL models.

Glom: Relationships Overview

Glom’s relationships overview bounty mostly complete, thanks to Rasmus Toftdahl Olesen, with code checked into Glom.

glom_relationships_overview

 

Hmm, that window title is obviously wrong. I’ll fix that.

We still need to implement right-clicking to edit a table’s relationships from this overview. I’d also like some horizontal lines in the relationship connection lines, where they meet the table rectangles, to more obviously show the indicated key fields. And the arrows need to point both ways when there are relationships in both directions.

Note that 1-to-1, 1-to-many, many-to-many markings are not relevant in Glom, at least for now, because it does not try to enforce these things, though they would be useful extra information for the user to add to the overview.

However, this feature won’t be enabled for the upcoming Glom 1.4, because it depends on GooCanvas which is, quite rightly, taking some more time before it is declared API/ABI stable. This bug report has a patch to enable the feature if you would like to play with the code.

GooCanvas is making great progress, and now is the time to take a look if you are interested in a future gtk/cairo-based canvas API.

libgda and libgnomedb and C++

libgda and libgnomedb provide a generic database API and UI for a variety of database systems, built on glib and GTK+.

The version 3.0 C++ bindings (libgdamm and libgnomedbmm) are taking shape pretty well, along with a task-orientated tutorial for C++, and reference API for libgdamm and libgnomedbmm. The libgda and libgnomedb C documentation is also online at openismus.com while we wait for some way to get it on to the GNOME servers.

Johannes and Armin and I are still working hard on finishing it. As part of this, we’ve had to do far more work than I’d prefer on the underlying libgda and libgnomedb, but I feel much more confident about them now that it’s done. I’ve also given lots of attention to the many open libgda and libgnomedb bugs and patches in bugzilla, so you’ll see lots of new names in the ChangeLog files. Some of these bugs have been ignored for four years, which I think is a real waste.

libgda 3.0 and libgnomedb 3.0 have a much bigger API than their 1.2 versions, due to the addition of new concepts, abstractions, and features. I’d be surprised if these really meet all the expected needs, so I personally guess that another parallel-installable libgda 4.0 might do some refactoring in the future. Vivien Malerba, Daniel Espinosa and Bas Driessen (blogless?) have done the heavy thinking to get us so far.

Some parts of the API have been simplified, but I still worry that other often-used parts are too complex, exposing API that should not be public, requiring repetition, and requiring data that can only be discovered at runtime. But this can be improved with API additions.

Dealing With Zealots in Open Source Communities

Some people who I respect have recently been surprised and frustrated by the extreme responses they’ve encountered in the wild outer badlands of various free software forums. They thought it would be a good idea to provide an introduction for others, so this doesn’t come as a shock. This is my first draft. It’s still too wordy, it should be phrased more diplomatically, and it should emphasize the positive. You may also find the GNOME Code of Conduct interesting, which I also created.

By its nature it will be flamed in the comments section. Maybe that can serve as an appendix.

Update: The improved version is here.

Dealing with Zealots in Open Source Communities

The world of Open Source and Free Software is like the Internet. It is big and full of variety. It has what you need, but sometimes it has so much that things become confusing. People on the Internet sometimes organize themselves into opposing tribes.

This should not detract from the great opportunities and advantages of open source software and its development methods.

You will certainly encounter people with strong opinions. Sometimes their opinions will seem unusual, and sometimes they will speak with such conviction that you’d be forgiven for thinking they are the law. But most people represent only themselves. As with any information on the Internet, you must assess the accuracy and authority of the information that you find.

Specifically, you are likely to encounter the following points of view in public forums, among the more positive responses:

  • All commercial software is wrong, meaning that it is immoral to earn money by writing software or even providing services.
  • All proprietary software is wrong, meaning that it is immoral to provide executables without all of their source code.
  • All open source software or free software is wrong, often based on simplistic economic reasoning.
  • All use of proprietary software is wrong. Thus, you may be attacked as immoral for using third-party hardware requiring closed-source drivers while otherwise open sourcing your entire development platform. It is immoral to use your company’s proprietary email system, even if you have no control over it.
  • All use of proprietary formats is wrong, meaning it is immoral to even support interoperability with proprietary or patented systems such as FAT32, NTFS, Samba, MP3, WMV, etc.
  • All compliance with software patent law is wrong, meaning that it is immoral to allow people to use software that would be illegal in their country if not paid for under a proprietary license. Likewise, it is correct and moral to allow people to unknowingly break the laws of their governments, regardless of the legal or financial consequences for individuals and the companies that make this possible.
  • Use of certain words is wrong. For instance, Linux-based systems must be called GNU/Linux systems, or vice-versa. Open Source must be called Free Software, or vice-versa.
  • Acceptance of alternative opinions is wrong. Thus, it is immoral to mention projects or opinions which do not fully agree with certain aims, because condemnation must be total.
  • Various user interfaces are wrong. For instance, it is immoral to choose a simple default environment for a user, or it is immoral to deemphasize the details of how a system works, even if those details are not interesting to your target users and are in fact available to those who are interested.
  • All demands must be met simultaneously, regardless of your priorities or resources.
  • Change is wrong.
  • Change must happen.

These are opinions, though the people expressing them may be convinced that their logic makes them absolute facts. It’s best to let them have the last word, unless you wish to continue until you accept their indisputable logic.

You can safely ignore most of these conversations unless an actual copyright holder is telling you what they would like you to do. You are free to have your own opinions and free to take part in these conversations only if they interest you personally. You do not need to tolerate offensive or aggressive behavior. If you do not choose to take part, these people will happily argue amongst themselves. Because the majority have learned to ignore these conversations, you should not assume that these conversations represent the majority.

You are not at the command of every random person who expresses an opinion regardless of whether you find that opinion personally convincing. You are free to decide what is best for you, your business, and your customers.

You’ll find that most actual project maintainers and developers speak more clearly and recognize that people with slightly differing priorities can work together. They may try to convince you of their opinions, but they will do so with understanding. Where a copyright holder has a very strong opinion about exactly what you should do with his/her software, he/she will choose a license that makes that clear. Of course, you need to have good relations with your fellow developers, so do try to comply with the spirit of licenses rather than just the exact legal interpretation. In general, open source licenses provide mutual advantages.

This article is also an opinion. You are free to ignore it.

N800, Internet Radio Player

Yesterday I received my Nokia N800 internet tablet.

General impressions

It feels thinner and lighter than the N770 and looks more like a consumer product, though it’s still fairly anonymous looking.

I was already happy with the N770 as an instant-on mini web browser so there’s no particular features or bug-fixes thst I needed in the N800. The software doesn’t have radical advances compared to the N770, but there are various small improvements. The browser does crash fairly often with an “Internal Error” dialog, but the vastly increased (available) memory means that it doesn’t crash so often just because it’s run out of memory when you open too many pages. Hopefully an open-source browser will be used one day.

But the N800’s browser is now capable of showing Google Maps – a very useful feature when out and about. Map drag-to-scroll still doesn’t work, but you can use the little arrow buttons.

The new video calling feature is a nice gimmick but a bit rough. Sound quality is just about good enough, though I don’t think both people can talk simultaneously and I sense some lag. Picture quality is very rough – similar to the first camera phones. The positioning of the camera means that you have to hold the N800 out to the end of your arm, or tilt it away from you, to get your whole face in the picture.

In general, I think the N800 is the best product on the market with these features, for a competitive price, though you need to be realistic about your expectations. I expect to see similar products over the next few years. In particular, I think it needs to be marketed (and optimized) for some very specific uses rather than as a general device. Today that could mean web-browsing, internet radio, video for journeys, and vertical-market applications, and in the future it could mean communicating.

N800 + stand = Internet Radio Player

The N800’s built-in stand feels like a big new feature, though I admit that I could have leaned the N770 carefully against something. This makes it very suitable as an internet radio player. I had been looking for an internet radio for the kitchen, but there are surpisingly few available. I found products such as the Roku SoundBridge and the SlimDevices Squeezebox, but they generally need separate speakers or Hi-Fi systems, need (eco-unfriendly) non-rechargable batteries and/or annoying mains power. And they are about the same price as the N800. The most suitable is this chunky expensive thing. The internet mentions several other devices, but they are not actually widely available. The N800, however, just sits there and plays internet radio without any extra nonsense.

The media player UI does need to be improved a lot. It needs a default list of radio stations, instead of just one (AccuRadio) station. The UI should require less clicks on tiny buttons to change radio stations either in the desktop applet or the full media player, and we need some way to specify radio station names other than “rtsp://rmlive.bbc.co.uk/yaddayadda” [1]. One nice new feature is that you can now context-click on a radio stream in the web browser to add it to the list of radio stations in the media player.

I hope that the soon-to-be-released Canola UI can make this more fun. The videos look very promising. But it’s a big shame that Canola is not open source. Things that aren’t open source have lots of annoying bugs that don’t get fixed.

Update:The N800 has an FM Radio receiver too. The hardware feature was not advertised by Nokia, but the Nokia FM Radio player software enables it via an easy installation.

Touch screen

I’ve been using the thumb keyboard more, particularly now that the iPhone people are aiming for something similar. I can not figure out what determines how long you have to hold your thumb over text fields to make the thumb keyboard come up when you raise your thumb. Sometimes it needs 3 seconds. Sometimes it’s only 1 second. It works pretty well, but the sides of my thumbs or fingers keep hitting the casing around the screen. The screen is actually sunk into the casing 3 or 4 millimeters. A flush screen would make the touch-screen more pleasant. I’m not sure if the iPhone has this lip around the phone. If it does, I suspect that touch buttons don’t touch edges.

I think that the touch-screen UI could be improved quite a bit, so that the stylus wouldn’t be necessary any more. The stylus is fine, but the iPhone should inspire some improvements.

Some more blabbering about the iPhone:

I think Apple made a big mistake pre-announcing the iPhone, though they had no choice due to the lengthy licensing/testing system for mobile phones. By the time it’s actually on the market, people will no longer be that impressed. They get used to new stuff very quickly. And there will be a variety of other similar-enough mobile phone products. The (subsidized, at least indirectly) price is going to put it out of reach of many people, and it’s not going to be easily available because it’s tied to one network. Maybe they will make it seem desirable again with a radical new marketing push at the time.

I also don’t think that the iPhone looks that stylish but I thought that the iPod was too ugly to be a success.

[1] By the way, I don’t expect those bug reports to get any attention whatsoever. The separate-public-bugzilla strategy is an awful failure whose time is running out. It needs to either be integrated with the internal Nokia bug-tracker or someone inside Nokia needs to be paid to tend to it.

subversion: diff between branches

Emmanuel Bassi just showed me how to get a diff between subversion (svn) branches. It’s not obvious. It should be easier. But here it is:

  • Discover the revision numbers: You need to know the revision numbers of the latest versions in each of the branches. It looks like svn log is the only way to do that. If your svn has the –limit option then you can see the revision number by cding into the branch’s directory, and typing svn log –limit 1. Otherwise, just look at the start of the svn log output manually. That will give you two numbers, such as 123 and 145.
  • cd into one of the branch directories, such as trunk.
  • Supply the revision numbers to the svn diff command: svn diff -r123:145

I’m much rather do something like “svn diff ../branches/thing-1-0”. Surely that should be possible?
Also, here’s how to get a diff with the -p option, so that patches have function names to make them more readable.