Tag Archives: Maemo

www.maemo.org

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.

Maemomm: Maemo for C++, with gtkmm

gtkmm is now available for the new Maemo 3.0 “Bora” version, as used on the Nokia N800 Internet Tablet. It’s in the extras repository.

There are also gtkmm C++ bindings for the Maemo UI (hildon-libs and hildon-fm) widgets, covered in the online maemomm documentation. Nokia tasked Openismus with updating these bindings for the N800 and writing the documentation, which was done mostly by Johannes Schmid and Daniel Elstner in the last few weeks of 2006. Of course, no applications use maemomm just yet, though gtkmm is already used enthusiastically on other embedded devices, and the demand for gtkmm on Maemo has been strong, so let’s see what happens.

It’s a slightly cut-down version of gtkmm for embedded devices, but most programmers won’t notice much difference in the API. I’d welcome patches to reduce the code size and memory requirements even more. It’s gtkmm 2.6 for now, but it looks like Maemo will update to GTK+ 2.8 or 2.10 in the near future. For the “armel” architecture that runs on the device, the (stripped) gtkmm library is 1.4M, which is a (small part of the) small price to pay if you prefer C++.

Laika Eclipse plugin

I sneaked out of bed early this morning to invest some time in setting up Eclipse, hoping it can speed up my current tedious build/check/fix/build routine while working in Scratchbox.

  • You’ll want to install the recommended eclipse-gcj package as well as the eclipse package, because it seems to make it faster.
  • The Laika plugin requires a newer CDT (C/C++ development plugin for Eclipse), because Ubuntu Edgy has an old (and apparently incompatible) one. You can install that via Help/Software Updates/Find and Install/Search for new features to install/Callisto Discovery Site/yadda yadda yadda.
    I guess this will clash one day with the Ubuntu-packaged CDT, when they update it, but that’s some fun for later.
  • You’ll get “permission denied” and “file does not exist” errors during the install unless you fix the permissions (maybe this is OK in a fresh Ubuntu Edgy install?), like so:
    /usr/lib/eclipse$ sudo chown youruser:youruser plugins
    /usr/lib/eclipse$ sudo chown youruser:youruser features
    Update: In later versions, you will also need to do the same thing in /usr/local/lib/eclipse/
  • Install the Laika plugin by the same method, after adding the http://www.cs.tut.fi/~laika/update remote location. Don’t use the URL as the human-readable name for that location, or it will fail.
  • In Window/Preferences, there are now Scratchbox preferences. The defaults are mostly good, but you’ll want to change the X Environment preferences to run your start_xephyr script instead of vnc. There are details about this in the Laika manual (in the left-hand menu on their web site).

When using File/New/Project, you’ll now have extra wizards under C and C++, such as “Standard Make C Project inside Scratchbox”. When you create one of these projects you’ll see convenient toolbar buttons to start the X Server, and to start the Maemo desktop (af-sb-init.sh start) inside scratchbox, on that display. You can even start your project with a GTK+ helloworld.

Note that clicking the Run button will show an “Internal Error” until you open that Run combobox, select “Run …” and select a path to a generated executable in the “Application” entry (the second one).

Eclipse has awfully obscure UI, and I can’t be the only one who thinks this. I wonder why it isn’t getting better as a result of being open, or maybe it used to be worse. Unfortunately, people have become used to IDEs that hate them (MS Visual Studio).

Workspace schworkschpace

Now there’s just the usual IDE problem of it forcing you to import (copy) your projects from other directories instead of just letting you open your existing project. (This is not Laika’s fault.)

As I’ve mentioned before, I don’t understand why Eclipse defaults to forcing me to put my source code in $HOME/workspaces, and copying existing projects into there. Just let me edit my files and build my executables without pretending you’re special. It’s good to make it easy to make your first helloworld project, but don’t make it hard for me to actually work with this thing afterwards.

The fix for this is to:

  • Open Window/Preferences, choose General/Startup and Shutdown, and select “prompt for workspace on startup”. Notice how it’s cryptically named – it affects project creation, not program startup, and it doesn’t prompt, it just lets you choose a non-standard workspace, without telling you why you’d want to do that (see the next point). And it’s hidden away among hundreds of other options, without even a tooltip to guide the user.
  • When creating a project (The import feature is now unnecessary), the Project Contents frame now lets you select an existing project’s path instead of $HOME/workspace. If there’s a project there already then it will just add the Eclipse files without moving or copying your existing files. If there had been no files there, it would have offered to create some. That’s implicit, hidden, and unexpected. This “feature” should be made explicitly available.
  • Update: Aargh, no, it silently overwrites your build files, such as autogen.sh, configure.ac, all your Makefile.am files, and even the license (!) in COPYING. Bastard.

Further ranting: Why oh why can’t an Eclipse project contain characters such as “-“? Why go to the trouble of implementing UI to prevent users from entering this, instead of just fixing whatever text escaping bug it’s hiding.

Update: I was looking forward to code-completion, but I had to turn it off in Window/Preferences/C/C++/Editor/Content Assist and unclicking all 3 triggers. One minute of hang (100% CPU) whenever I type -> is not working out for me. (Or only 20 seconds when I tell it to search only the current project and not the include files.) When the user clicks or types away from the line, the code-completion search really should silently cancel.

Building modified debian packages

I recently had to create modified versions of some debian packages, to apply some custom patches and use some special compilation options for a scratchbox environment. It was time that I learnt something about actually making debian packages. These were packages that Daniel Holbach couldn’t do for me, but he did explain some stuff, which I’ll note here for my reference. He’s not to blame for my errors.

To get existing debian package stuff, make a directory and do this:

This gives you 3 files, of these types:

  • .orig.tar.gz: The original source tarball, exactly as you would get it if you downloaded the source code directly.
  • .dsc: The Debian Source Control file.
  • .diff.gz: A patch to add the debian sub-directory.

You don’t need to uncompress and apply all that manually. There are tools to help:

  • dpkg-source -x something.dsc, to expand the source tarball and apply the .diff.gz patch. You then have the source directory, with the debian sub-directory inside. If you did apt-get source then this has been done for you already.
  • cd into the source directory.
  • Do debuild (or debuild -us -uc to avoid the GPG signing). This builds the package, by reading information from the debian sub-directory, building the source, and putting it all in .debs in the parent directory.
    (On scratchbox, where debuild does not work due to fakeroot problems, do dpkg-buildpackage -rfakeroot -sa)

That should confirm that you can actually build the packages. If you are missing some dependencies, try “apt-get build-dep yourpackagname”.

Now you might want to change some things before building the packages again. For instance:

  • Using a newer source tarball release:
    • Get the source tarball of the latest release.
    • Rename it to match the debian convention. For instance:
      mv gconfmm-2.14.1.tar.gz gconfmm2.6_2.14.1.orig.tar.gz
    • Unpack the new tarball.
    • Copy the debian directory from the old source directory to the new one.
    • cd to the new source directory.
    • Do dch -i to edit debian/changelog with the editor. Export EDITOR=editoryoulike if you don’t like vi.
    • Change the version number in the new changelog entry. debuild/dpkg-buildpackge actually uses the version number in the changelog for the version number of the debian packages.
  • Changing dependencies:
  • Using special compiler options, or configure options:
    • Edit debian/rules and edit the appropriate makefile rule. Try to use a makefile variable, to keep things simple. Some debian/rules files already use CFLAGS or CXXFLAGS variables.
  • Apply patches:
    • Some debian/rules files have makefile rules to automatically apply any .patch files. If yours does then just add the .patch file in appropriate place. Otherwise, just apply the patch manually and store it in a debian/patches_applied/ directory.

After you have changed the sources and the debian files appropriately, debuild (or dpkg-buildpackage – see above), should build the packages again, putting them in the parent directory. It will even create the .dsc and .diff.gz files, completing the circle.