Tag Archives: Gnome

www.gnome.org

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.

GTK+ Multipress Input Method

I’ve done some more work on the GTK+ multipress input method, adding a GKeyfile-based configuration file, and some stability bugfixing, and Daniel Elstner has renovated the build files. The source code and packages for Debian Etch are online.

As soon as I figure out a good name that doesn’t use the (not ours to use) gtk/Gtk prefix, I’ll probably move the source into GNOME’s cvs.

Now we just need to add a way for applications to turn this off and on per widget, so that numeric-only entry doesn’t need multiple key presses.

(I also tried Movial’s input method, from Markku Vire, but I can’t get it to work. I commented about it there a few days ago but the comment hasn’t shown up yet.)

Going to FOSDEM

I booked my flights and hotel, so I’m finally going to my first FOSDEM conference, in Brussels, Belgium on the weekend of the 24th and 25th February 2007.

Technically, I am incredibly unproductive at conferences. I much prefer email for that kind of thing. For instance, I hate feeling forced to have instant opinions without first doing research and weighing pros and cons. Sometimes I want to put in-person conversations on hold while I do some fact-checking. However, actually meeting people is very good for development momentum, and it’s a chance to meet new European open source people and maybe drum up some more work for Openismus.

There are some GNOME activities at FOSDEM, but I’m not really sure what to expect. Dodji wants me to do a gtkmm talk, but I don’t really see the point. If you like gtkmm and C++ then there’s a lot of information about it out there already. I think conference talks should be for new things. So Dodji should tell us about Nemiver and what it needs from gdb, and I should maybe do a Glom status talk.

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++.

libgnomedbmm: Database UI widgets for gtkmm

Johannes Schmid and Armin Burgmeier have almost finished the C++ bindings for libgnomedb for Openismus, and the work so far is now in GNOME’s subversion repository, in the gnomemmm/libgnomedbmm module. There are already working examples in svn. This needs the latest version of libgdamm, which we have updated for the latest libgda API.

They will soon start on the documentation, to show how to use this stuff easily.

This work is for a company (Openismus codename: “The Austrians”) making some specialized embedded Linux equipment, using gtkmm for the UI.

A screenshot of a libgnomedbmm example:
libgnomedbmm_example_form

New printer: Lexmark E120n

I got tired of my HP Deskjet 3650 just sitting there flashing its light, though it has a new ink cartridge [1]. Even when it worked, the page often slipped while (slowly) printing, and the page took a while to dry.

So I bought a Lexmark E120n. It’s a small cheap laser printer rather than an inkjet printer. Refreshingly, it’s mono only – black and white. I rarely print color and I don’t want to worry about whether I have enough color as well as black ink. The HP 3650 went through a phase of printing everything in green, which I won’t miss.

More significantly, it’s networked by default (wired, not wireless), though you can use the USB connection instead. After powering on, it connects to your network and prints out a page to show you what IP Address it is using. It has a web-browser configuration UI at that address.

Lexmark E120n printer

The CD includes Linux drivers, and the html documentation on the CD states that they officially support Debian, Linspire, Red Hat, and SUSE Linux. All the Linux stuff is in the “unix” directory on the CD, though the readme.txt file there explicitly states that the directory name and other mentions of “unix” should not imply support for crufty old UNIX – it’s just Linux that’s supported.

Even when connecting over the network, you need to choose the printer driver. The GNOME/Ubuntu printer manager didn’t list this model of Lexmark printer. Also the CD doesn’t have a bare .PPD file, so the “Install Driver” feature can’t work. There is a .deb file (.rpm too) but it contains lots of other stuff that I’d rather not risk installing if I don’t need to.

Googling told me that I could instead just choose the “PCL 6/PCL XL Printer” model from the “Generic” manufacturer, after choosing to add a Network printer of type “CUPS Printer (IPP)”, specifying the IP address, and that works fine. I’m using Ubuntu Edgy. Update: Instead of using the generic PCL driver, use the PPD file that Sven mentioned in the comments – the generic one has problems printing graphics. Also, note that you can get the IP Address printout at any time by pressing the green arrow “continue” key.

When it prints, it has that pleasantly familiar airplane takeoff sound rather than the wheeze of an Inkjet. It’s quiet when on standby, though I’ll keep it turned off because it probably draws lots of power.

[1] If the 3650 was sending any status errors over the USB cable, they weren’t showing up anywhere in the GNOME printer UI. I did try installing the HP Deskjet 3650 driver and tools on a Windows laptop but, after self-extracting the 3600_enu_win2k_xp.exe file, it just showed me an otherwise empty and untitled error dialog with the text “1158:”. There was a button on the dialog, but it was empty too. Which was, frankly, Windowstastic.

Irrelevant Update: However, I absolutely can not get the thing to work with my girlfriend’s old Windows ME laptop. Lexmark say that the printer is supported on Windows ME, but the installer refuses to run, saying “This intallation method is not supported on this operating system”. Installing the driver manually via the wizard, typing in the IP address, because browsing doesn’t work, leads to Windows telling me that the printer is currently offline. I’m waiting for the Windows installation to become so broken that it must be replaced with Linux.