Below you will find pages that utilize the taxonomy term “Gnome”
Converting BigBlueButton recordings to self-contained videos
When the pandemic lock downs started, my local Linux User Group started looking at video conferencing tools we could use to continue presenting talks and other events to members. We ended up adopting BigBlueButton: as well as being Open Source, it's focus on education made it well suited for presenting talks. It has the concept of a presenter role, and built in support for slides (it sends them to viewers as images, rather than another video stream). It can also record sessions for later viewing.
Exploring Github Actions
To help keep myself honest, I wanted to set up automated test runs on a few personal projects I host on Github. At first I gave Travis a try, since a number of projects I contribute to use it, but it felt a bit clunky. When I found Github had a new CI system in beta, I signed up for the beta and was accepted a few weeks later.
While it is still in development, the configuration language feels lean and powerful. In comparison, Travis's configuration language has obviously evolved over time with some features not interacting properly (e.g. matrix expansion only working on the first job in a workflow using build stages). While I've never felt like I had a complete grasp of the Travis configuration language, the single page description of Actions configuration language feels complete.
Ubuntu Desktop
When the Ubuntu Phone project was cancelled, I moved to the desktop team. The initial goal for team was to bring up a GNOME 3 based desktop for the Ubuntu 17.10 release that would be familiar to both Ubuntu users coming from the earlier Unity desktop, and users of “vanilla” GNOME 3.
Seeking in Transcoded Streams with Rygel
When looking at various UPnP media servers, one of the features I wanted was the ability to play back my music collection through my PlayStation 3. The complicating factor is that most of my collection is encoded in Vorbis format, which is not yet supported by the PS3 (at this point, it doesn't seem likely that it ever will).
Both MediaTomb and Rygel could handle this to an extent, transcoding the audio to raw LPCM data to send over the network. This doesn't require much CPU power on the server side, and only requires 1.4 Mbit/s of bandwidth, which is manageable on most home networks. Unfortunately the only playback controls enabled in this mode are play and stop: if you want to pause, fast forward or rewind then you're out of luck.
Watching iView with Rygel
One of the features of Rygel that I found most interesting was the external media server support. It looked like an easy way to publish information on the network without implementing a full UPnP/DLNA media server (i.e. handling the UPnP multicast traffic, transcoding to a format that the remote system can handle, etc).
As a small test, I put together a server that exposes the ABC's iView service to UPnP media renderers. The result is a bit rough around the edges, but the basic functionality works. The source can be grabbed using Bazaar:
More Rygel testing
In my last post, I said I had trouble getting Rygel's tracker backend to function and assumed that it was expecting an older version of the API. It turns out I was incorrect and the problem was due in part to Ubuntu specific changes to the Tracker package and the unusual way Rygel was trying to talk to Tracker.
The Tracker packages in Ubuntu remove the D-Bus service activation file for the "org.freedesktop.Tracker" bus name so that if the user has not chosen to run the service (or has killed it), it won't be automatically activated. Unfortunately, instead of just calling a Tracker D-Bus method, Rygel was trying to manually activate Tracker via a StartServiceByName() call. This would fail even if Tracker was running, hence my assumption that it was a tracker API version problem.
Ubuntu packages for Rygel
I promised Zeeshan that I'd have a look at his Rygel UPnP Media Server a few months back, and finally got around to doing so. For anyone else who wants to give it a shot, I've put together some Ubuntu packages for Jaunty and Karmic in a PPA here:
Most of the packages there are just rebuilds or version updates of existing packages, but the Rygel ones were done from scratch. It is the first Debian package I've put together from scratch and it wasn't as difficult as I thought it might be. The tips from the "Teach me packaging" workshop at the Canonical All Hands meeting last month were quite helpful.
Sansa Fuze
On my way back from Canada a few weeks ago, I picked up a SanDisk Sansa Fuze media player. Overall, I like it. It supports Vorbis and FLAC audio out of the box, has a decent amount of on board storage (8GB) and can be expanded with a MicroSDHC card. It does use a proprietary dock connector for data transfer and charging, but that's about all I don't like about it. The choice of accessories for this connector is underwhelming, so a standard mini-USB connector would have been preferable since I wouldn't need as many cables.
PulseAudio
It seems to be a fashionable to blog about experiences with PulseAudio, I thought I'd join in.
I've actually had some good experiences with PulseAudio, seeing some tangible benefits over the ALSA setup I was using before. I've got a cheapish surround sound speaker set connected to my desktop. While it gives pretty good sound when all the speakers are used together, it sounds like crap if only the front left/right speakers are used.
Using Twisted Deferred objects with gio
The gio library provides both synchronous and asynchronous interfaces for performing IO. Unfortunately, the two APIs require quite different programming styles, making it difficult to convert code written to the simpler synchronous API to the asynchronous one.
For C programs this is unavoidable, but for Python we should be able to do better. And if you're doing asynchronous event driven code in Python, it makes sense to look at Twisted. In particular, Twisted's Deferred objects can be quite helpful.
Metrics for success of a DVCS
One thing that has been mentioned in the GNOME DVCS debate was that it is as easy to do "git diff" as it is to do "svn diff" so the learning curve issue is moot. I'd have to disagree here.
Traditional Centralised Version Control
With traditional version control systems (e.g. CVS and Subversion) as used by Free Software projects like GNOME, there are effectively two classes of users that I will refer to as "committers" and "patch contributors":
DVCS talks at GUADEC
Yesterday, a BoF was scheduled for discussion of distributed version control systems with GNOME. The BoF session did not end up really discussing the issues of what GNOME needs out of a revision control system, and some of the examples Federico used were a bit snarky.
We had a more productive meeting in the session afterwards where we went over some of the concrete goals for the system. The list from the blackboard was:
Prague
I arrived in Prague yesterday for the Ubuntu Developer Summit. Including time spent in transit in Singapore and London, the flights took about 30 hours.
As I was flying on BA, I got to experience Heathrow Terminal 5. It wasn't quite as bad as some of the horror stories I'd heard. There were definitely aspects that weren't forgiving of mistakes. For example, when taking the train to the "B" section there was a sign saying that if you accidentally got on the train when you shouldn't have it would take 40 minutes to get back to the "A" section.
Inkscape Migrated to Launchpad
Yesterday I performed the migration of Inkscape's bugs from SourceForge.net to Launchpad. This was a full import of all their historic bug data – about 6900 bugs.
As the import only had access to the SF user names for bug reporters,
commenters and assignees, it was not possible to link them up to
existing Launchpad users in most cases. This means that duplicate person
objects have been created with email addresses like
$USERNAME@users.sourceforge.net
.
Weird GNOME Power Manager error message
Since upgrading to Ubuntu Gutsy I've occasionally been seeing the following notification from GNOME Power Manager:
I'd usually trigger this error by unplugging the AC adapter and then picking suspend from GPM's left click menu.
My first thought on seeing this was "What's a policy timeout, and why
is it not valid?" followed by "I don't remember setting a policy
timeout". Looking at bug
492132 I found a
pointer to the policy_suppression_timeout
gconf value, whose
description gives a bit more information.
gnome-vfs-obexftp 0.4
It hasn't been long since the last gnome-vfs-obexftp release, but I thought it'd be good to get these fixes out before undertaking more invasive development. The new version is available from:
The highlights of this release are:
- If the phone does not provide free space values in the OBEX capability object, do not report this as zero free space. This fixes Nautilus file copy behaviour on a number of Sony Ericsson phones.
- Fix date parsing when the phone returns UTC timestamps in the folder listings.
- Add some tests for the capability object and folder listing XML parsers. Currently has sample data for Nokia 6230, Motorola KRZR K1, and Sony K800i, Z530i and Z710i phones.
These fixes should improve the user experience for owners of some Sony Ericsson phones by letting them copy files to the phone, rather than Nautilus just telling them that there is no free space. Unfortunately, if there isn't enough free space you'll get an error part way through the copy. This is the best that can be done with the information provided by the phone.
Investigating OBEX over USB
I've had a number of requests for USB support in gnome-vfs-obexftp. At
first I didn't have much luck talking to my phone via USB. Running the
obex_test
utility from OpenOBEX gave the following results:
$ obex_test -u
Using USB transport, querying available interfaces
Interface 0: (null)
Interface 1: (null)
Interface 2: (null)
Use 'obex_test -u interface_number' to run interactive OBEX test client
Trying to talk via any of these interface numbers failed. After reading
up a bit, it turned out that I needed to add a udev
rule to give
permissions on my phone. After doing so, I got a better result:
TXT records in mDNS
Havoc: for a lot of services advertised via mDNS, the client doesn't have the option of ignoring TXT records if it wants to behave correctly.
For example, the Bonjour Printing Specification puts the underlying print queue name in a TXT record (as multiple printers might be advertised by a single print server). While it says that the server can omit the queue name (in which case the default queue name "auto" is used), a client is not going to be able to do what the user asked without checking for the presence of the record.
gnome-vfs-obexftp 0.3
I've just released a new version of gnome-vfs-obexftp, which includes the features discussed previously. It can be downloaded from:
The highlights of the release include:
- Sync osso-gwobex and osso-gnome-vfs-extras changes from Maemo Subversion.
- Instead of asking hcid to set up the RFCOMM device for communication, use an RFCOMM socket directly. This is both faster and doesn't require enabling experimental hcid interfaces. Based on work from Bastien Nocera.
- Improve free space calculation for Nokia phones with multiple memory types (e.g. phone memory and a memory card). Now the free space for the correct memory type for a given directory should be returned. This fixes various free-space dependent operations in Nautilus such as copying files.
Any bug reports should be filed in Launchpad at:
Stupid Patent Application
I recently received a bug report about the free space calculation in gnome-vfs-obexftp. At the moment, the code exposes a single free space value for the OBEX connection. However, some phones expose multiple volumes via the virtual file system presented via OBEX.
It turns out my own phone does this, which was useful for testing. The
Nokia 6230 can store things on the phone’s memory (named DEV
in the
OBEX capabilities list), or the Multimedia Card (named MMC
). So the
fix would be to show the DEV
free space when browsing folders on DEV
and the MMC
free space when browsing folders on MMC
.
FM Radio in Rhythmbox – The Code
Previously, I posted about the FM radio plugin I was working on. I just posted the code to bug 168735. A few notes about the implementation:
- The code only supports Video4Linux 2 radio tuners (since that’s the interface my device supports, and the V4L1 compatibility layer doesn’t work for it). It should be possible to port it support both protocols if someone is interested.
- It does not pass the audio through the GStreamer pipeline. Instead, you need to configure your mixer settings to pass the audio through (e.g. unmute the Line-in source and set the volume appropriately). It plugs in a GStreamer source that generates silence to work with the rest of the Rhythmbox infrastructure. This does mean that the volume control and visualisations won’t work
- No properties dialog yet. If you want to set titles on the stations,
you’ll need to edit
rhythmdb.xml
directly at the moment. - The code assumes that the radio device is
/dev/radio0
.
Other than that, it all works quite well (I've been using it for the last few weeks).
FM Radio in Rhythmbox
I've been working on some FM radio support in Rhythmbox in my spare time. Below is screenshot
At the moment, the basic tuning and mute/unmute works fine with my
DSB-R100. I don't have any UI for adding/removing stations at the
moment though, so it is necessary to edit
~/.gnome2/rhythmbox/rhythmdb.xml
to add them.
Comments:
Joel -
This feature would truly be a welcome addition!
I'm especially pleased it's being developed by a fellow Australian! (If the radio stations are any indication)
FM Radio Tuners in Feisty
I upgraded to Feisty about a month or so ago, and it has been a nice improvement so far. One regression I noticed though was that my USB FM radio tuner had stopped working (or at least, Gnomeradio could no longer tune it).
It turns out that some time between the kernel release found in Edgy and
the one found in Feisty, the dsbr100
driver had been upgraded from the
Video4Linux 1
API to
Video4Linux
2. Now the
driver nominally supports the V4L1 ioctls through the v4l1_compat
, but
it doesn't seem to implement enough V4L2 ioctls to make it usable (the
VIDIOCGAUDIO
ioctl fails).
ZeroConf support for Bazaar
When at conferences and sprints, I often want to see what someone else is working on, or to let other people see what I am working on. Usually we end up pushing up to a shared server and using that as a way to exchange branches. However, this can be quite frustrating when competing for outside bandwidth when at a conference.
It is possible to share the branch from a local web server, but that still means you need to work out the addressing issues.
gnome-vfs-obexftp 0.1 released
I put out a tarball release of gnome-vfs-obexftp here:
This includes a number of fixes since the work I did in October:
- Fix up some error handling in the dbus code.
- Mark files under the
obex:///
virtual root as being local. This causes Nautilus to process the desktop entries and give us nice icons. - Ship a copy of
osso-gwobex
, built statically into the VFS module. This removes the need to install another shared library only used by one application.
As well as the standard Gnome and D-BUS libraries, you will need
OpenOBEX >= 1.2 and Bluez-Utils >= 3.7. The hcid
daemon must be
started with the -x
flag to enable the experimental D-BUS interfaces
used by the VFS module. You will also need a phone or other device that
supports OBEX FTP :)
UTC+9
Daylight saving started yesterday: the first time since 1991/1992 summer
for Western Australia. The legislation finally passed the upper house on
21st November (12 days before the transition date). The updated
tzdata
packages were released on 27th
November (6 days before the transition). So far, there hasn't been an
updated package released for Ubuntu (see bug
72125).
One thing brought up in the Launchpad bug was that not all applications
used the system /usr/share/zoneinfo
time zone database. So other
places that might need updating include:
Building obex-method
I published a Bazaar branch of the Nautilus obex method here:
http://bazaar.launchpad.net/~jamesh/+junk/gnome-vfs-obexftp
This version works with the hcid
daemon included with Ubuntu Edgy,
rather than requiring the btcond
daemon from
Maemo.
Some simple instructions on building it:
-
Download and build the
osso-gwobex
library:svn checkout https://stage.maemo.org/svn/maemo/projects/connectivity/osso-gwobex/trunk osso-gwobex
The debian/ directory should work fine to build a package using
debuild
. -
Download and build the obex module:
bzr branch http://bazaar.launchpad.net/~jamesh/+junk/gnome-vfs-obexftp
There is no debian packaging for this — just an
autogen.sh
script.
Playing Around With the Bluez D-BUS Interface
In my previous entry about using the
Maemo obex-module
on the desktop, Johan Hedberg mentioned that
bluez-utils
3.7 included equivalent interfaces to the
osso-gwconnect
daemon used by the method. Since then, the copy of
bluez-utils
in Edgy has been updated to 3.7, and the necessary
interfaces are enabled in hcid
by default.
Before trying to modify the VFS code, I thought I'd experiment a bit
with the D-BUS interfaces via the D-BUS python bindings. Most of the
interesting method calls exist on the org.bluez.Adapter
interface. We
can easily get the default adapter with the following code:
OBEX in Nautilus
When I got my new laptop, one of the features it had that my previous one didn't was Bluetooth support. There are a few Bluetooth related utilities for Gnome that let you send and receive SMS messages and a few other things, but a big missing feature is the ability to transfer files to and from the phone easily.
Ideally, I'd be able to browse the phone's file system using Nautilus. Luckily, the Maemo guys have already done the hard work of writing a gnome-vfs module that speaks the OBEX FTP protocol. I had a go at compiling it on my laptop (running Ubuntu Edgy), and you can see the result below:
Gnome-gpg 0.5.0 Released
Over the weekend, I released gnome-gpg
0.5.0.
The main features in this release is support for running without
gnome-keyring-daemon
(of course, you can't save the passphrase
in this mode), and to use the same keyring item name for the passphrase
as Seahorse. The release can be
downloaded here:
I also switched over from Arch to
Bazaar. The conversion was fairly painless
using bzr baz-import-branch
, and means that I have both my
revisions and Colins revisions in a single tree. The branch can be
pulled from:
Vote Counting and Board Expansion
Recently one of the Gnome Foundation directors quit, and there has been a proposal to expand the board by 2 members. In both cases, the proposed new members have been taken from the list of candidates who did not get seats in the last election from highest vote getter down.
While at first this sounds sensible, the voting system we use doesn't provide a way of finding out who would have been selected for the board if a particular candidate was removed from the ballot.
JHBuild Updates
The progress on JHBuild has continued (although I haven't done much in the last week or so). Frederic Peters of JhAutobuild fame now has a CVS account to maintain the client portion of that project in tree.
Perl Modules (#342638)
One of the other things that Frederic has been working on is support for
building Perl modules (which use a Makefile.PL
instead of a configure
script). His initial patchworked fine for tarballs, but by switching
over to the new generic version control code in jhbuild it was possible
to support Perl modules maintained in any of the supported version
control systems without extra effort.
JHBuild Improvements
I've been doing most JHBuild development in my bzr branch recently. If you have bzr 0.8rc1 installed, you can grab it here:
bzr branch http://www.gnome.org/~jamesh/bzr/jhbuild/jhbuild.dev
I've been keeping a regular CVS import going at
http://www.gnome.org/~jamesh/bzr/jhbuild/jhbuild.cvs
using Tailor, so
changes people make to module sets in CVS make there way into the bzr
branch. I've used a small hack so that merges back into CVS get
recorded correctly in the jhbuild.cvs
branch:
intltool and po/LINGUAS
Rodney: my
suggestions for intltool were not intended as an attack. I just don't
really see much benefit in intltool providing its own
po/Makefile.in.in
file.
The primary difference between the intltool po/Makefile.in.in
and the
version provided by gettext or glib is that it calls intltool-update
rather than xgettext
to update the PO template, so that strings get
correctly extracted from files types like desktop entries, Bonobo
component registration files, or various other XML files.
Ekiga
I've been testing out Ekiga recently, and so far the experience has been a bit hit and miss.
- Firewall traversal has been unreliable. Some numbers (like the SIPPhone echo test) work great. In some cases, no traffic has gotten through (where both parties were behind Linux firewalls). In other cases, voice gets through in one direction but not the other. Robert Collins has some instructions on setting up siproxd which might solve all this though, so I'll have to try that.
- The default display for the main window is a URI entry box and a dial pad. It would make much more sense to display the user's list of contacts here instead (which are currently in a separate window). I rarely enter phone numbers on my mobile phone, instead using the address book. I expect that most VoIP users would be the same, provided that using the address book is convenient.
- Related to the previous point: the Ekiga.net registration service seems to know who is online and who is not. It would be nice if this information could be displayed next to the contacts.
- Ekiga supports multiple sound cards. It was a simple matter of selecting "Logitech USB Headset" as the input and output device on the audio devices page of the preferences to get it to use my headset. Now I hear the ring on my desktop's speakers, but can use the headset for calls.
- It is cool that Ekiga supports video calls, but I have no video camera on my computer. Even though I disabled video support in the preferences, there is still a lot of knobs and whistles in the UI related to video.
Even though there are still a few warts, Ekiga shows a lot of promise. As more organisations provide SIP gateways become available (such as the UWA gateway), this software will become more important as a way of avoiding expensive phone charges as well as a way of talking to friends/colleagues.
Annoying Firefox Bug
Ran into an annoying Firefox bug after upgrading to Ubuntu Dapper. It seems to affect rendering of ligatures.
At this point, I am not sure if it is an Ubuntu specific bug. The current conditions I know of to trigger the bug are:
- Firefox 1.5 (I am using the 1.5.dfsg+1.5.0.1-1ubuntu10 package).
- Pango rendering enabled (the default for Ubuntu).
- The web page must use a font that contains ligatures and use those ligatures. Since the "DejaVu Sans" includes ligatures and is the default "sans serif" font in Dapper, this is true for a lot of websites.
- The text must be justified (e.g. use the "
text-align: justify
" CSS rule).
If you view a site where these conditions are met with an affected
Firefox build, you will see the bug: ligature glyphs will be used to
render character sequences like "ffi
", but only the advance of the
first character's normal glyph is used before drawing the next glyph.
This results in overlapping glyphs:
Re: Lazy loading
Emmanuel: if you are using a language like Python, you can let the language keep track of your state machine for something like that:
def load_items(treeview, liststore, items):
for obj in items:
liststore.append((obj.get_foo(),
obj.get_bar(),
obj.get_baz()))
yield True
treeview.set_model(liststore)
yield False
def lazy_load_items(treeview, liststore, items):
gobject.idle_add(load_items(treeview, liststore, item).next)
Here, load_items()
is a generator that will iterate over a sequence
like [True, True, ..., True, False]
. The next()
method is used to
get the next value from the iterator. When used as an idle function
with this particular generator, it results in one item being added to
the list store per idle call til we get to the end of the generator
body where the "yield False
" statement results in the idle
function being removed.
Gnome Logo on Slashdot
Recently, Jeff brought up the issue of the use of the old Gnome logo on Slashdot. The reasoning being that since we decided to switch to the new logo as our mark back in 2002, it would be nice if they used that mark to represent stories about us.
Unfortunately this request was shot down by Rob Malda, because the logo is "either ugly or B&W (read:Dull)".
Not to be discouraged, I had a go at revamping the logo to meet Slashdot's high standards. After all, if they were going to switch to the new logo, they would have done so when we first asked. The result is below:
Gnome-gpg 0.4.0 Released
I put out a new release of gnome-gpg containing the fixes I mentioned previously.
The internal changes are fairly extensive, but the user interface remains pretty much the same. The main differences are:
- If you enter an incorrect passphrase, the password prompt will be displayed again, the same as when gpg is invoked normally.
- If an incorrect passphrase is stored in the keyring (e.g. if you
changed your key's passphrase), the passphrase prompt will be
displayed. Previously you would need to use the
--forget-passphrase
option to tell gnome-gpg to ignore the passphrase in the keyring. - The passphrase dialog is now set as a transient for the terminal that spawned it, using the same algorithm as zenity. This means that the passphrase dialog pops up on the same workspace as the terminal, and can't be obscured by the terminal.
Comments:
Marius Gedminas -
Any ideas how to use it with Mutt?
Using Tailor to Convert a Gnome CVS Module
In my previous post, I mentioned using Tailor to import jhbuild into a Bazaar-NG branch. In case anyone else is interested in doing the same, here are the steps I used:
1. Install the tools
First create a working directory to perform the import, and set up tailor. I currently use the nightly snapshots of bzr, which did not work with Tailor, so I also grabbed bzr-0.7:
$ wget http://darcs.arstecnica.it/tailor-0.9.20.tar.gz
$ wget http://www.bazaar-ng.org/pkg/bzr-0.7.tar.gz
$ tar xzf tailor-0.9.20.tar.gz
$ tar xzf bzr-0.7.tar.gz
$ ln -s ../bzr-0.7/bzrlib tailor-0.9.20/bzrlib
2. Prepare a local CVS Repository to import from
Revision Control Migration and History Corruption
As most people probably know, the Gnome project is planning a migration
to Subversion. In contrast, I've
decided to move development of jhbuild over to
bzr
. This decision is a bit easier for
me than for other Gnome modules because:
- No need to coordinate with GDP or GTP, since I maintain the docs and there is no translations.
- Outside of the moduleset definitions, the large majority of development and commits are done by me.
- There aren't really any interesting branches other than the mainline.
I plan to leave the Gnome module set definitions in CVS/Subversion though, since many people help in keeping them up to date, so leaving them there has some value.
gnome-gpg improvement
The gnome-gpg utility makes PGP a bit nicer to use on Gnome with the following features:
- Present a Gnome password entry dialog for passphrase entry.
- Allow the user to store the passphrase in the session or permanent keyring, so it can be provided automatically next time.
Unfortunately there are a few usability issues:
- The anonymous/authenticated user radio buttons are displayed in the password entry dialog, while they aren't needed.
- The passphrase is prompted for even if
gpg
does not require it to complete the operation. - If the passphrase is entered incorrectly, the user is not prompted
for it again like they would be with plain
gpg
. - If an incorrect passphrase is provided by
gnome-keyring-daemon
, you need to remove the item usinggnome-keyring-manager
or use the--force-passphrase
command line argument.
I put together a patch to fix these issues by using gpg
's
--status-fd
/--command-fd
interface. Since this provides status
information to gnome-gpg
, it means it knows when to prompt for and
send the passphrase, and when it gave the wrong passphrase.
Drive Mount Applet (again)
Thomas: that behaviour looks like a bug. Are all of those volumes mountable by the user? The drive mount applet is only meant to show icons for the mount points the user can mount.
Note also that the applet is using the exact same information for the list of drives as Nautilus is. If the applet is confusing, then wouldn't Nautilus's "Computer" window also be confusing?
To help debug things, I wrote a little program to dump all the data
provided by GnomeVFSVolumeMonitor
:
Preferences for the Drive Mount Applet
In my previous article, I outlined the thought process behind the redesign of the drive mount applet. Although it ended up without any preferences, I don't necessarily think that it doesn't need any preferences.
A number of people commented on the last entry requesting a particular preference: the ability to hide certain drives in the drive list. Some of the options include:
- Let the user select which individual drives to display
- Let the user select which classes of drive to display (floppy, cdrom, camera, music player, etc).
- Select whether to display drives only when they are mounted, or only when they are mountable (this applies to drives which contain removable media).
Of these choices, the first is probably the simplest to understand, so might be the best choice. It could be represented in the UI as a list of the available drives with a checkbox next to each. In order to not hide new drives by default, it would probably be best to maintain a list of drives to hide rather than drives to show.
Features vs. Preferences
As most people know, there has been some flamewars accusing Gnome developers of removing options for the benefit of "idiot users". I've definitely been responsible for removing preferences from some parts of the desktop in the past. Probably the most dramatic is the drive mount applet, which started off with a preferences dialog with the following options:
- Mount point: which mount point should the icon watch the state of?
- Update interval: at what frequency should the mount point be polled to check its status?
- Icon: what icon should be used to represent this mount point. A selection of various drive type icons were provided for things like CDs, Floppys, Zip disks, etc.
- Mounted Icon and Unmounted Icon: if "custom" was selected for the above, let the user pick custom image files to display the two states.
- Eject disk when unmounted: whether to attempt to eject the disk when the unmount command is issued.
- Use automount-friendly status test: whether to use a status check that wouldn't cause an automounter to mount the volume in question.
These options (and the applet in general) survived pretty much intact from the Gnome 1.x days. However the rest of Gnome (and the way people use computers in general) had moved forward since then, so it seemed sensible to rethink the preferences provided by the applet:
Re: Pixmap Memory Usage
Glynn: I suspect that the Pixmap memory usage has something to do with image rendering rather than applets in particular doing something stupid. Notice that most other GTK programs seem to be using similar amounts of pixmap memory.
To help test this hypothesis, I used the following Python program:
import gobject, gtk
win = gtk.Window()
win.set_title('Test')
win.connect('destroy', lambda w: gtk.main_quit())
def add_image():
img = gtk.image_new_from_stock(gtk.STOCK_CLOSE,
gtk.ICON_SIZE_BUTTON)
win.add(img)
img.show()
gobject.timeout_add(30000, add_image)
win.show()
gtk.main()
According to xrestop
, this program has low pixmap memory usage when
it starts, but jumps up to similar levels to the other apps after 30
seconds.
Switch users from XScreenSaver
Joao: you can
configure XScreenSaver to show a "Switch User" button in it's
password dialog (which calls gdmflexiserver
when run). This lets you
start a new X session after the screen has locked. This feature is
turned on in Ubuntu if you want to try it out.
Of course, this is not a full solution, since it doesn't help you switch to an existing session (you'd need to guess the correct Ctrl+Alt+Fn combo). There is code in gnome-screensaver to support this though, giving you a list of sessions you can switch to.
DSB-R100 USB Radio Tuner
Picked up a DSB-R100 USB Radio tuner off EBay recently. I did this partly because I have better speakers on my computer than on the radio in that room, and partly because I wanted to play around with timed recordings.
Setting it up was trivial -- the dsbr100
driver got loaded
automatically, and a program to tune the radio
(gnomeradio) was
available in the Ubuntu universe repository. I did need to change the
radio device from /dev/radio
to /dev/radio0
though.
Playing with Google Maps API
I finally got round to playing with the Google Maps API, and the results can be seen here. I took data from the GnomeWorldWide wiki page and merged in some information from the Planet Gnome FOAF file (which now includes the nicknames and hackergotchis).
The code is available here (a BZR branch, but you can easily download the latest versions of the files directly). The code works roughly as follows:
HTTP resource watcher
I've got most of the features of my HTTP resource watching code I was working on for GWeather done. The main benefits over the existing gnome-vfs based code are:
- Simpler API. Just connect to the
updated
signal on the resource object, and you get notified when the resource changes. - Supports
gzip
anddeflate
content encodings, to reduce bandwidth usage. - Keeps track of
Last-Modified
date andEtag
value for the resource so that it can do conditionalGET
s of the resource for simple client side caching. - Supports the
Expires
header. If the update interval is set at 30 minutes but the web server says that the it won't be updated for an hour, then use the longer timeout til the next check. - If a permanent redirect is received, then the new URI is used for future checks.
- If a
410 Gone
response is received, then future checks are not queued (they can be restarted with arefresh()
call).
I've also got some code to watch the HTTP proxy settings in GConf, but that seems to trigger a hang in libsoup (bug 309867).
Bryan's Bazaar Tutorial
Bryan: there are a number of steps you can skip in your little tutorial:
-
You don't need to set
my-default-archive
. If you often work with multiple archives, you can treat working copies for all archives pretty much the same. If you are currently inside a working copy, any branch names you use will be relative to your current one, so you can still use short branch names in almost all cases (this is similar to the reason I don't set$CVSROOT
when working with CVS).
HTTP code in GWeather
One of the things that pisses me off about gweather
is that it
occasionally hangs and stops updating. It is a bit easier to tell when
this has occurred these days, since it is quite obvious something's
wrong if gweather thinks it is night time when it clearly isn't.
The current code uses gnome-vfs
, which isn't the best choice for this
sort of thing. The code is the usual mess you get when turning an
algoithm inside out to work through callbacks in C:
pkg-config patches
I uploaded a few patches to the pkg-config bugzilla recently, which will hopefully make their way into the next release.
The first is related to bug 3097, which has to do with the broken dependent library elimination code added to 0.17.
The patch adds a Requires.private
field to .pc
files that contains a
list of required packages like Requires
currently does, which has the
following properties:
Clipboard Handling
Phillip: your idea about direct client to client clipboard transfers is doable with the current X11 clipboard model:
- Clipboard owner advertises that it can convert selection to some special target type such as "client-to-client-transfer" or similar.
- If the pasting client supports client to client transfer, it can check the list of supported targets for the "client-to-client-transfer" target type and request conversion to that target.
- The clipboard owner returns a string containing details of how to request the data (e.g. hostname/port, or some other scheme that only works for the local host).
- Pasting application contacts the owner out of band and receives the data.
Yes, this requires modifications to applications in order to work correctly, but so would switching to a new clipboard architecture.
Anonymous voting
I put up a proposal for implementing anonymous voting for the foundation elections on the wiki. This is based in part on David's earlier proposal, but simplifies some things based on the discussion on the list and fleshes out the implementation a bit more.
It doesn't really add to the security of the elections process (doing so would require a stronger form of authentication than "can read a particular email account"), but does anonymise the election results and lets us do things like tell the voter that their completed ballot was malformed on submission.
Clipboard Manager
Phillip:
the majority of applications have no cut and paste code in them — they
rely on the cut and paste behaviour of the standard widgets. Since the
standard widgets like GtkEntry
in GTK 2.6 mark their selections as
being savable (in fact, any code that calls gtk_clipboard_set_text()
will have its selection marked as savable). Most of the remaining cases
are ones where you'd want to be selective in what gets saved (e.g.
selecting cell ranges in Gnumeric, or regions of images in Gimp), so
need to be handled specially anyway.
<tt>bgchannel://</tt> Considered Harmful?
Recently Bryan posted about
background
channels
-- a system for automatic updating desktop wallpaper. One of the
features of the design is a new URI scheme based on the same ideas as
webcal://
, which I think is a bad idea (as dobey has also pointed
out).
The usual reasoning for creating a URI scheme like this go something like this:
- You want to be able to perform some action when a link in a web page is clicked.
- The action requires that you know the URI of the link (usually to allow contacting the original server again).
- When the web browser activates a helper application bound to a MIME type, you just get the path to a saved copy of the resource, which doesn't satisfy (2).
- Helper applications for URI types get passed the full URI.
So the solution taken with Apple's iCal and Bryan's background
channels is to strip the http:
off the start of resource's URI, and
replace it with a custom scheme name. This works pretty well for the
general case, but causes problems for a few simple use cases that'll
probably turn out to be more common than you think:
8 March 2005
South Africa
I put up my photos from the trip to Cape Town online. Towards the end there are some photos I took while hiking up Table Mountain.
Building Gnome
It looks like with the Gnome 2.10 release, some packages fail to build from CVS if you are using a version of libtool older than 1.5.12. This is due to the way libtool verifies the version strings — in versions prior to 1.5.12, the check to make sure that the interface version numbers were non negative used a shell pattern that only matched numbers up to 3 digits long.
6 January 2005
Travels
I've put some of the photos from my trip to Mataró, and the short stop over in Japan on the way back. The Mataró set includes a fair number taken around La Sagrida Familia, and the Japan set is mostly of things around the Naritasan temple (I didn't have enough time to get into Tokyo).
Multi-head
A few months back, I got a second monitor for my computer and configured
it in a Xinerama-style setup (I'm actually using the MergedFB
feature
of the radeon driver, but it looks like Xinerama to X clients). Overall
it has been pretty nice, but there are a few things that Gnome could do
a bit nicer in the setup:
8 December 2004
Mataró
I've been in Mataró (about an hour from Barcelona) now since Sunday, and it's quite a nice place. It is a bit cooler than Perth due to it being the middle of Winter here, but the way most of the locals are rugged up you'd think it was a lot colder. It's great to catch up with everyone, and a number of pygtk developers will be turning up over the next few days for the BOF on the weekend.
Nautilus Extensions
One of the changes in the Gnome 2.9 development series is the removal of most of the Bonobo code from Nautilus, which results in a speed boost due to lower complexity and less IPC overhead. This had the effect of breaking existing bonobo based context menus, property pages and views. The first two can be converted to the Nautilus extension interface, but the second has no equivalent in the new code (partly because Nautilus is concentrating on being a file manager these days rather than a universal component shell like it was in the early days).
25 October 2004
Drive Mount Applet
The new drive mount applet is now checked into the HEAD branch of gnome-applets, so will be in Gnome 2.10. There are a few things left to do, such as making it possible to open the file manager as well as unmounting/ejecting it. I did up a screenshot showing what it looks like as an applet.
Libtool
Finally managed to reproduce a particular libtool bug that people have
reported on and off. It does show why some people decide that .la
files are evil, since it doesn't occur when people delete those files
...
20 October 2004
Even More Icon Theme Stuff
To make it a bit easier to correctly display themed icons, I added
support to GtkImage
, so that it is as easy as calling
gtk_image_new_from_icon_name()
or gtk_image_set_from_icon_name()
.
The patch is attached to bug
#155688.
This code takes care of theme changes so the application developer doesn't need to. Once this is in, it should be trivial to add themed icon support to various other widgets that use GtkImage (such as GtkAbout and GtkToolItem).
Drive Mount Applet
I started to look at bringing the drive mount applet from gnome-applts
up to scratch, since it hasn't really had much work done on it other
than porting to the 2.x development platform.
The applet is a classic example of Gnome 1.x user interface complexity. The applet shows a button that can be clicked to mount or unmount a particular mount point. For this simple functionality, it provides the following preferences:
11 October 2004
Looks like we are going to have at least another three years with The Rodent. It also looks like they will have a majority in the senate, which will reduce the senate's effectiveness as a house of review.
We might not have John Howard for the entire term though, since he is of retirement age. NineMSN seems to think that Peter Costello is already the leader.
It also looks like The Democrats senators up for reelection got completely wiped out, with much of their support going to The Greens.
4 October 2004
Icon Theme APIs (continued)
Of course, after recommending that people use
gtk_icon_theme_load_icon()
to perform the icon load and scale the icon
for you, Ross manages to find a
bug in that function.
If the icon is not found in the icon theme, but instead in the legacy
$prefix/share/pixmaps
directory, then gtk_icon_theme_load_icon()
will not scale the image down (it will scale them up if necessary
though).
jhbuild
Jhbuild now includes a notification icon when running in the default terminal mode. The code is loosely based on Davyd's patch, but instead uses Zenity's notification icon support. If you have the HEAD branch of Zenity installed, it should display without any further configuration. Some of the icons are a little difficult to tell apart at notification icon sizes, so it would be good to update some of them.
29 September 2004
Ubuntu seems to have taken off very quickly since the preview release came out a few weeks ago. In general, people seem to like the small tweaks we've made to the default Gnome install. Of course, after the preview came out people found bugs in some of my Gnome patches ...
One of the things we added was the trash applet on the panel. I made a fair number of fixes that make the applet fit in with the desktop a bit better and handle error conditions a bit better.
Applets vs. Notification Icons
It seems that a lot of people get confused by what things on the panel should be applets and what should be notification icons. Originally, the main difference between the two was this:
- The lifecycle of an applet is managed by the panel, which in turn is tied to the lifecycle of the session. So applets generally live for the length of the session (unless they are added/removed part way through a session).
- Notification icons are more transient. Their lifecycle is linked to whatever app they were created by. Once the app exits the notification icon goes away too.
There are some other differences though:
Notification Icons
I decided to go ahead and write the code to allow
Zenity to listen for commands on
stdin. It was pretty easy to add, and Glynn accepted the patch so it is
in the latest CVS version. The main difference between the
implementation and what I described earlier is that you need to pass the
--listen
argument to Zenity to activate this mode (without it, it acts
as a one-shot notification icon where it exits when the icon is clicked
on). The easiest way to use it from a bash script is to tie Zenity to a
file descriptor like this:
14 September 2004
Foundation Elections (continued)
bolsh: as I
said, many real elections make modifications to an idealised STV system
to simplify vote counting. The counting for the .au
senate
elections
sounds like it takes a random sample of votes when transfering
preferences too.
Also, in my description a candidate needed to get more votes than the quota and the quota could be fractional. In contrast, the Australian senate elections say candidates must reach the Droop Quota, which is the smallest integer greater than the quota formula I used. If you are using random sampling for preference transfers so that each ballot has a weight of either 0 or 1, then this is equivalent. However, if you count fractional votes, then it does make a difference.
13 September 2004
Foundation Elections
There has been talk on the foundation list about changing the vote counting procedure to something more fair. The method being proposed is Single Transferable Vote, which is the same system used within a single electorate for the senate vote in the Australian Federal Election. As with the Australian elections, some people have some trouble understanding exactly how it works, so here is a description.
- Each voter orders every candidate on their ballot in order of preference. Each ballot is assigned a weight of 1.
- The ballots are grouped by the first preference.
- If any candidate's total reaches the quota, then they get in. The quota is chosen such that if there are s seats, then at most s candidates can reach the quota. So a candidate must get more than n/(s + 1) first preference votes in order to reach the quota.
- If any candidate gets over the quota, then the highest vote getter is elected, and their votes are redistributed at a reduced strength. If x people voted for the candidate, then the weighting of each of the votes is scaled by (x - q)/x where q is the quota (x - q is the number of votes over the quota). The winning candidate's name is removed from all ballots and we go back to step 2 and repeat to find the next winner.
- If no candidate reaches the quota, then the candidate with the least first preference votes is removed from the election. Their name is removed from all ballots, and we go back to step 2. The votes for the removed candidate are redistributed at the same strength, since they didn't help elect a candidate.
Note that this vote counting system is identical to Instant-runoff voting when there is only a single seat. The quota calculation shows that the winning candidate needs to get more than 50% of the votes to win, as expected.
20 May 2004
Mail Viruses
The barrage of mail viruses and their side effects is getting quite annoying. In the past week, I've had a gnome.org mailing list subscriptions disabled twice. After looking at the mailing list archive, it was pretty obvious why.
The mail server that serves my account is set up to reject windows executables a few other viruses at SMTP delivery time (so it isn't responsible for generating bounces). Unfortunately, a number of viruses got through to the mailing lists and were subsequently rejected before reaching my account. After a certain number of bounces of this type, mailman helpfully disables delivery.
28 April 2003
Red Hat 9
Installed it on a few boxes, and I like what I see so far. The Bluecurve mouse cursors look really nice. It is also good to see some more of my packages included in the distro (fontilus and pyorbit).
Spam
Some spammer has been sending mail with random @daa.com.au addresses in
the From:
field. So far, I have received lots of double bounces, a few
messages asking if we know about the spam, and many automated responses
(some saying the message came from a blocked domain!). The Received
headers indicate that the mail comes from somewhere else, so there
isn't much I can do. I hate spammers.
17 June 2002
Work
Last week, one of the servers died because one of the sticks of memory died. After pulling it out, the system booted fine. It would have been a lot easier to test if I didn't have to open it up to plug a floppy drive in. I now have Memtest86 in the GRUB boot menu. Was pretty easy to set up:
cp memtest.bin /boot grubby --add-kernel="/boot/memtest.bin" --title="Memtest86"
This is the second stick of DDR memory we have had that died; probably due to overheating. As the server has 5 IDE ribbon cables, I might look at getting rounded cables which Jaycar is stocking these days.
12 May 2002
The Call for Papers is out:
http://conf.linux.org.au/pipermail/lca-helpers/2002-May/000109.html
There is also an HTML version on the website, but it doesn't quite match the final version of the CFP (yet).
Beer
Bottled the honey ale today. It will be interesting to see how it tastes in a few weeks. The sweetness was gone, but I could definitely taste the honey still. It should be very nice.
GNOME 2.0
Put out yet another beta of libglade for the GNOME 2.0 beta 5 release which should be comming out this week. I should also make new releases of pygtk and gnome-python as well. I have done a number of improvements to the code generator, so pygtk is a bit more complete. The last gnome-python release no longer compiles with the latest GConf, so it also needs a new release.