Ikke's Blog

Category: Linux

Apr 12
First CDIS "proof of concept"

Well, proof of concept, it's not that much actually :-)
Been fighting with DBus today to get something as I described yesterday working. Thanks to the people on the mailing list and IRC (#dbus@freenode) for all help, hints and pointers!

I hacked together a very small sample in Python (yes, I hardly know Python, so the code might be very very bad, I just wanted to test whether what I want to do is possible using DBus).

The setup uses a central daemon (don't shoot! It looks like it's the only usable way to cut the job) which keeps track of all objects that want to implement some CDIS interface. Objects subscribe to the concentrator (thats how I called it anyway), and clients talk to it too.
See this screenshot to get an overview how it works. First the concentrator is started. Then the user starts Gaim and Kopete (this is just a sample, obviously). They both register to the concentrator, which keeps track of them. Now some user app (think "a screensaver") connects to the concentrator, and asks it to set the status of all IM clients to "idle".
The concentrator receives this request, checks his list of connected objects, and runs the "SetState(s)" method on all objects implementing org.freedesktop.CDIS.InstantMessenger.

All of this is completely transparant to the actual application: it doesn't know about DBus, it shouldn't care about subscribing to the concentrator (unsubscribing can be done using NameOwnerChanged etc, not implemented yet) etc. Just provide all functions to implement the inteface.

The best way to tackle this, I think, is to write the specs using some XML format (we might want to look at the dbus-glib-bindings format), then generating code using that (plain C using function pointers, GObjects and their signals, QObjects and their in-process signal mechanism, dunno about the best way to do this in Python and others). It should be fairly painless to get this working.

Other TODO's:

  • Write a *decent* concentrator (this one can be started using DBus activation on the first subscription call, jay!) that's error-savvy, handles killed applications, can scan the bus on startup for existing objects it should handle,...
  • Write a spec XML format
  • Write specs (this one will be the hardest part I guess)
  • Get desktop apps to use this beast!
  • Tons of other things

[edit] Per RealNitro's request, code is online. Beware, it's ugly.
I've been thinking: for the Python "bindings", function decorators could be very well suited...
Tomorrow I'll send something about this to XDG, I hope something useful can come out of this.

Apr 11
Common interfaces

The recent discussion on desktop-devel on the inclusion of GNOME Power Manager into the 2.16 desktop release (big thanks to the developers for this software, it took a while to get suspension working on my desktop but now it does, I really like GPM even if it's no laptop) ended up in two completely different discussions: the usage of notifications (libnotify) and the notification area versus normal applets, and sharing a base daemon with eg the KDE power manager (somewhat related to what NetworkManager does: a central daemon running as root, and a client applet on top of that, using DBus for IPC, although the power management daemon should not run as root, as all privileged tasks are handled by hald, which runs as root).

The second issue is one which interests me a lot, as more than a year ago (IIRC I was still using Windows as main desktop at that time :oops: as my Linux machine was too slow to run any desktop app) I sent an email to the XDG list about what was to become CDIS, the Common Desktop Interface Specification (the email I link to is just the first of bunch of long threads, from the initial idea almost nothing was kept). Lots of email on the list later, no actual result came out of it (which is mainly due to me).

Shared interfaces are, just like open file formats etc, very important. We got some great desktop specifications that ensure a developer his/her code and application will work on all platforms supporting the specification. Think of the notification area spec, autostart spec, .desktop files,...
Shared IPC interfaces (think DBus) are very important too. In the case of a power management app like GPM or it's K* equivalent, they should both use the same interface for several functions, eg "DontHibernateNext5Minutes" (dumb and useless example, but hey). If I write an application that doesn't need user input, but does a lot of work (think of a CD burning app), I don't want the machine my software runs on hibernates during the burning process, whilst it's perfectly possible the user leaves the machine and his sessions idles out. But I don't want some construct like

if(user_runs_gnome)
    do_gpm_dont_suspend_call();
if(user_runs_kde)
    do_kde_power_manager_dont_suspend_call();

or something alike. Maybe this isn't a big issue for some simple program, but think of a large app that should be cross-desktop made by some ISV...
Same thing for a DVD player: I don't want to notify both gnome-screensaver, kde-screensaver and whatever they shouldn't pop up next minute, I just want to notify the org.freedesktop.ScreenSaver service it shouldn't take control of the desktop.

Another sample: I'm a VoIP softphone (think Ekiga), and I get an incoming call. Obviously, I'd like all media players that might run on the current console/desktop to pause. I don't want to send one signal to PlayerA using some custom socket, one to PlayerB using his own DBus interface! I just want to notify all media players they should pause, and send a "Pause" signal to (eg) org.freedesktop.CDIS.MediaPlayer. When the call is ended, I could send a "Resume" signal to the same object path.

I don't know whether all this is possible using DBus, still need to read the docs once again (there's some black magic in there, really!), but I guess you get the idea.
Obviously, an application implementing a CDIS interface can also implement extra functionality, and if multiple applications start implementing the same extra functions, this functionality might be added to the a new version of that interface spec. Like this, we never limit the service developers. There can even be "NotImplemented" errors etc.

The only thing we need is getting some developers together in all fields to write down such a spec in some standard format. Not too many people though, so there's less chance of huge flamewars and more results.

Some application types I think of now that can use a shared interface:

  • Screensavers
  • Power management
  • Media players
  • Instant Messaging apps ("SetStatus(STATUS_AWAY)",...)
  • Email clients ("NewMailArrived")
  • ...

Maybe it's time to get this on XDG again...


Completely unrelated: dear lazyweb, within a month or so (at least, I hope) I should get a laptop computer (Asus W3J, dualcore 2*1.83Ghz, 1GB, 80GB, pretty cool stuff). Obviously I'd like to run Linux on the machine (oops, GNU/Linux, sorry!) once I can, as it got an ATI X1600 GPU which is completely unsupported today.
I was thinking to run both Gentoo Linux (like I do now on my dekstop) and Ubuntu on it: Gentoo for development things and just playing around, Ubuntu as "serious" desktop and university stuff. Next to that I also need Windows on it (some university soft is Windows-only).
I wrote down a possible partition layout for this setup today, and got some questions about it:

  • Will this work? The Gentoo part will, as that's +- what I run now, but will Ubuntu be able to handle a foreign bootloader, and the LVM stuff?
  • Won't I get in trouble by sharing my homedir between both distributions? I shouldn't, but there are no more certainties in life these days

Thanks!

Feb 27
FOSDEM06 Flashback

So, last weekend (25-26/02/06) FOSDEM, the Free and OpenSource Developer European Meeting (right?) took place at the ULB campus in Brussels, Belgium (Europe). Just like last edition (I wasn't "into" FOSS before last year, flame me) it was great to be there. Interesting talks and demo's, some great people, productive discussions,... No Social Event with unlimited drinks like at LinuxTag but hey, at least there was no MS booth.

After only 2 hours of sleep (yawn) I took off to Brussels by train with some of the Zeus people. Public transports (bus) in Brussels are expensive!
Once arrived at the campus we headed to the Janson room for RMS' keynote. Once you know RMS'll do a talk, you can be fairly sure about what you'll hear. This year he talked about why software patents are evil (and I won't disagree on most of his ideas there), there was the always-returning GNU/Linux frustration (hey, where's HURD at?), some jokes (if they were intended like that?) on GIF/PNG,...
Anyway, one major comment on the keynote: I hope his "Thank you for removing that source of noise" quote won't be published too much. Not all hackers only love their computer, some of them do like little kids or human beings in general. Of course crying babies can be irritating sometimes, but there are limits. Maybe I'm just old-fashioned though.

After the keynote there was some little talk about how to fight software patents, and GPL3, which me and Ward skipped as we were fairly hungry. After a while we found some little restaurant (with some other visitors in there, with and without laptop) where we had a good meal (spghetti carbonara, yum).

In the afternoon we went to the GNOME devroom for the introduction (oh my, the room was crowded!). Everyone was invited to introduce himself and say what he/she(?) was working on, after which Damien Sandras started his talk on Ekiga (former GnomeMeeting). In fact I didn't intend to go to that talk (sorry!) but to the XDevConf overview in the X devroom, but as the GNOME room was so crowded I couldn't get out of there :-S
Anyway, Damien's overview was pretty interesting. I installed Ekiga on my system this afternoon, but didn't manage to get it working though yet, STUN problems I think. Bloody router. Ekiga (relase date 16/03 IIRC?) seems to be some nice software though (although I must admit I'm not really convinced by Damien's idea on Jabber integration...). Now if only I'd have a mic and/or webcam :-)

At 15:00 I wanted to attend the DTrace talk in Janson's. It was the first time I really saw what DTrace is, how it works, and some samples were showed. Hot stuff! I certainly got a reason to play around with OpenSolaris one day.

I intended to go to Tor's talk on "Writing Win32-friendly GNOME libs/apps" in the GNOME devroom afterwards, but didn't get in as the doors were closed (I guess the room was overcrowded again?). Too bad, as win32 could be a big market for our platform. Don't the KDE guys want to get most of KDE4 apps running on it?
Oh well, after a while there was Philip's interesting talk on Design Patterns combined when using GObjects. Some great information (although most people already know most patterns presented from things like DBUS (Proxy) and any event-driven widget toolkit like our beloved GTK+ (Observer)) and samples. Philip is right, things like this are very important to keep our lib API's both manageable, future-proof and fast.

After the talk some more discussion (with Jeff, Philip and a couple of other guys I didn't know) on several subjects. I wasn't active in it, but heard some interesting things. One of them was the fact we should be fairly proud of all the work we do. Sometimes it looks like we make no progress, or almost none, due to the 6 months release cycles. This might be somewhat true: it's not easy to make really big changes in our existing applications in "only" 6 months. The changes should be fairly obvious though if you'd run a GNOME 2.6 desktop (Sun's Java Desktop?) nowadays. That's "only" 2 years ago, and changes are, well, fairly obvious.
Some more technical discussions took place too, but I must admit I can't remember what it was all about at the moment :-S

After a while I took of with RubenV and some of his friends to Leuven (slept there). Had a meal in the city, walked around a bit, and discussed lots of things 'till 02:00 or something. Pure tech stuff (GIM!), related issues (secret ;-)), whatsoever.

On sunday we had to get up at 07:00 so we could attend the first talk in the X room (blame me!) about automatic configuration of displays. Sometimes very hard to understand what they were talking about, but it was fairly interesting (the parts I did understand). There's still a lot of work to do, most obviously.

At 10:30 we intended to attend jdub's talk on "GNOME advicacy, stuff like that" in the GNOME room again. Sadly enough he was unable to be there. Better luck next time! We just sat back and went to the X talk on "DTracing the Xorg server" as planned. More DTrace hotness, too bad real demo's were lacking a bit. As the shedule was broken a little, I wasn't able to go to the Valgrind talk as I intended to do.

After lunch the GNOME room was the place to be again as Jon talked about Beagle in there. No real talk, just some chatting about lots of things. Why we should use C# instead of C to develop our desktop applications, what he's doing at Google (well, at least what he was allowed to tell us), what Goobuntu is,...
Some great new on the Mono front. Last year in the GNOME room I had a long discussion with Alex Larsson and several others on Mono's memory performance and garbage collector, as Beagle did suffer from these issues (I tried to be a Beagle contributor in those days, but didn't dare to ask Jon a signature... I was that soylent guy, remember?). Now it looks like the Mono people are working on a less conservative garbage collector. Some great news!

After Jon had to leave for his "real" Beagle talk, I waited for Sebastien's talk on GScore and Cairo. As I'm a musician too, wanted to write a GTK+-based score editor too one day and did intend to use Cairo there (where are those "OXO" times?) it was interesting, also to get some insight in the GScore internal workings. Rock on!

Finally there was Kristian's talk on Project Ridley and GTK+2.10. If you read Planet Gnome regularly, most things said over there were "old news", but now seeing everything bundled, I guess everyone in there knows 2.10 will rock. Finally libegg can die die die.

After some more food and drinks I wanted to go to the OpenOffice.org talk in Chavanne, but doors were closed and the entrance is in front. Oh I hate those rooms.
Had a little talk with Jon and some others on Beagle/Project Soylent (RIP) etc. Great to be able to talk to some developers IRL.

After hanging around a little longer the talk on XUL started. It was aminly about XULRunner, which wasn't what I expected. Too bad we didn't see some examples on how to write XUL applications.

Finally there was Jeff's ending talk. Some great things in there. Funny winks, but also some thorough analysis of both problems the FOSS community faces, and some great things already done. Very pragmatic/liberal views too, which isn't a bad thing at all.
I can imagine some non-G* people were a little upset but hey, after all Jeff is a GNOME and Ubuntu advocate, next to FOSS in general.

Train to Ghent, luckily my bike wasn't stolen or damaged at the station. Got home, fairly tired, slept 'till 14:00 today...

Overall it was a great weekend. Superb to meet some people for the first time IRL, or meet some of them again (Hey GNOME-NL, GNOME, X.org and x-tend guys! Hi Genstef!). Sadly enough I didn't meet some of the people I intended to see (sorry [url=http://raphael.slinckx.net/]Rapha

Feb 10
Hija, and first XGL steps

First of all: hey Planet GNOME! It's an honour to be listed between all those hackers whose work I use every day again.

Like lots of other people (I think) I tried to get XGL + compiz working on my desktop today. XGL was a breeze (worked yesterday too), I did have some issues with compiz (mesa-issues, to be more precise). It doesn't work yet, but I hope I'll be able to sort out all remaining issues tomorrow or this week-end (although I'm no low-level X/OpenGL guru)... The whole problem could be related to some function/constant/enum renaming sutff.

The issue I got is this: I can start XGL/compiz and X apps, but the XWindows are empty black or white rectangles on the screen... The issue is (I think) related to some OpenGL extension call not working inside compiz:

Couldn't bind redirected window 0xdeadbeef to texture
pixmap 0x12345 can't be bound to texture

Oh well, even with empty windows, the result is fairly amazing. I tried to make a little amateur video of what I got now ("scrot" refuses to work?). I'm sorry for the bad angle, I only got 2 hands ;) Get it here (18MB).
There's a little problem with the wobbly effect too, which leaves "traces" on the desktop (image).

Anyway, after working on Metacity's compositing some weeks ago, and now seeing this beauty, I think we should prepare for some more great progress regarding our beloved (hmm) graphics subsystems.

Jan 12
Linux Distribution Chooser

Always wanted to try Linux, or thinking about trying some other distribution? Just came across this link, the "Linux Distribution Chooser".

It's damn accurate (for me at least): Gentoo/Arch/Slack! Very good for newbie users too...

Ikke • LinuxPermalink 8 comments

<< Previous Page :: Next Page >>

Categories

Who's Online?

  • Guest Users: 430

Misc

XML Feeds

What is RSS?