eu crap

EU council bullshitting about streaming media

There's been some fuss lately about the EU council, who's streaming some stuff online, in Windows Media format. There is no Linux support, because, they claim,

We cannot support Linux in a legal way

Which obviously is a load of crap. There is no need to require DRM or anything on council meetings, so there is also no need to require Windows Media or any other closed protocol. Hence, using open standards (such as Ogg) would be more than sufficient.

Meaning, this petition asks for the right thing.

Posted
5 things

5 things most people don't know about me.

Okay, Hanna didn't really tag anyone; but I'm still going to take the bait, since this sounds interesting.

  1. My high school carriere included 4 different schools for 6 different options (latin, science, and drama, to name but a few)
  2. My boyscouts totem is 'walrus'
  3. Although I play the flute today, there was a time when I was dreaming of playing the oboe, and I also followed lessons to play the recorder for a few months
  4. I have a bet running against someone since a few years about which of us is going to be the first to buy a Porsche 911
  5. I have a minor chocolate addiction (I don't need it every day; however, I can't go a week without this divine substance)

There. Philip, Kris: your turn now.

Posted
vista content protection

Vista's Content "protection"

There seems to be a bit of a fuss around Vista's Content "protection" mechanism going around the 'Net these days; someone made some review of it in terms of the effects this will have on the hardware industry, which was mentioned by a few people on Planet Debian, and also on Bruce Schneier's blog.

The argument, basically, goes like this:

  • To view "Premium Content" on Vista, you must have a computer that consists of drivers and hardware that are vetted by Microsoft as being "ok".
  • For this hardware and these drivers to be "ok", you need to have created your hardware to implement cpu-to-device encryption, and have done a number of other things that require huge gobs of money to properly develop.
  • Hardware manufacturers will do this, but that will require them to ask more money from consumers.
  • As a result, everone will pay, even those who don't run Vista (such as Linux and MacOS users)

Personally, I don't buy that argument. "Premium Content" (really, Crippled Content) will only be available to those users who actually have hardware and software which is capable of viewing Crippled Content. While it might be a problem for home users not to be able to view Crippled Content, I can't think of any reason why you would want to be able to view Crippled Content on your enterprise desktops. As a result, Enterprise users will continue to buy the cheapest hardware available that still accomodates their needs, much as they do now (I have yet to see the first enterprise desktop with one of those extreme 3D-capable cards...). And if just one manufacturer decides that the Enterprise market is enough of a market for them not to support Crippled Content with (a subset of) their hardware, then I can't imagine there being a problem in finding affordable hardware anymore. Eventually, people will understand that Crippled Content is much more of a trouble than it is worth—a DVD player is just as cheap, and doesn't require you to have a humming, noisy PC in the living room—and Vista's Crippled Content will go the way of the dinosaur.

Where it belongs.

Posted
credit card online security

Credit card online security

Martin Krafft blogs about the "security" in credit card numbers, where you can theoretically pay anything with just a number and a name, which can be just read off of any credit card.

Since fairly recently, this is no longer true. As I discovered last week (when I wanted to renew my grep.be license), banks now have the ability to require that a user is redirected to their site in order to confirm a payment. In my case, this requires me to sign the payment with my digipass. This obviously requires me to have an account for their online banking system, but I don't think it is unreasonable to require an online banking account if you want to be able to do payments online.

This is both good and bad. Good, because it increases security tremendously. Bad, because I'd lost my digipass again, so I couldn't go ahead with the payment :/

(I have gotten a new one from the bank in the mean time, and just renewed the domain).

Posted
lilypond documentation

AAAAAAAAAAAAAARGH!

Lilypond is a great piece of software, but its documentation is sucky as hell.

I've been trying to tweak the output of a particular piece of music which turned out to have just one system on the final page using the default settings, so that this final staff would end up on the first page, too.

The documentation on how to do this, however, is less than helpful. If there is a mistake that could've been made by the people who wrote the manual, be sure they made it:

  • In the "lilypond-internals" manual, there is mention of the fact that a particular variable needs to be a "moment", but no mention of how to do it; in fact, the default setting that is listed there for that variable is listed as #<Mom 1 4>, but trying to use that will give you a syntax error. It took me 15 minutes of trying, and finally more or less accidentally stumbling upon an actual example somewhere which sets a moment variable, to figure out how to do it; the right syntax is #(ly:make-moment 1 4)
  • In the section on horizontal spacing, there is no single mention of the fact that settings on horizontal spacing apply to the score as a whole, and cannot be changed on a per-measure basis, or halfway the score in other ways. A pretty important detail, in my opinion.
  • Yet, even if settings on horizontal spacing can only be made on a per-score basis, you still have to modify them by using \override commands somewhere in between your notes. Logic? Not really.
  • In the section on horizontal spacing in the 2.10 version of the manual, there is also no reference to the new \newSpacingSection command, which allows one to split the score up in multiple sections in which the horizontal spacing can be changed anyway. Way to go.
  • Even after reading and understanding most stuff in both manuals about horizontal spacing, my attempts still resulted in no visible changes on the page, and I have no clue why. There is no message, no way to be sure whether I did the wrong thing, or whether I did do stuff correctly but that it failed because of unrelated reasons.

Really, I would be very happy if the lilypond authors were to just find someone who actually knows how to write decent documentation.

Posted
libgjs

libgjs

About a year and a half ago (has it been that long already?), I blogged about wanting to write some gobjects. People did give me pointers to some documentation then, but for various reasons I never looked into it in detail afterwards.

Since yesterday, though, that's changed. For the last two days, I've been writing on something which I'll eventually release to the world as libgjs:

wouter@country:~/code/c/libgjs/src$ ./gjstest 
There are 1 joysticks on this system
Joystick 0 is a Logitech Inc. WingMan Gamepad Extreme,
	with 10 buttons and 4 axes.
wouter@country:~/code/c/libgjs/src$ 

Wonderful, isn't it? Obviously the above doesn't require the 306 LOC that I've written now (which isn't much, but that's mostly because I had to read a lot of documentation in between); but when finished, the API of that library will be approximately something like this:

if(gjs_joystick_get_max>=0) {
	GjsJoystick *joystick = gjs_joystick_new(0);
	if(joystick->buttons >= 1) {
		g_signal_connect(joystick, "button-pressed",
			start_firing, NULL);
		g_signal_connect(joystick, "button-released",
			stop_firing, NULL);
		g_signal_connect(joystick, "axis-moved",
			move_crosshair, NULL);
	}
	gjs_joystick_set_interval(1);
}

where start_firing, stop_firing and move_crosshair are, obviously, callback functions (they get the button or axis number as a parameter). The set_interval function sets the time between two polls of the kernel device file; this will use the glib mainloop, but it'll also be possible to use a different event loop with gjs_joystick_poll and/or gjs_joystick_poll_all.

As of now, it's almost finished; only the signals seem to be something I'm having issues with still. But that's only a matter of not having used gdb enough—I'm sure I'll get there.

What gave me the sudden idea to write this library? Something silly, really: for a project I'm currently negotiating, it might be nice if I knew how GObject works; and what better way to find that out than by writing something fun for it? Exactly.

Update: Bugs squashed, and the library (along with a small test/demo application) is available. Please try it out and let me know what you think.

Posted
2007-keysigning

FOSDEM key signing party

I was appointed by the FOSDEM orga team to be the "volunteer" to organize the FOSDEM key signing party again this year, because "I did it so well last time". Hah.

In other news, I still have keys to sign from the DebConf5 and FOSDEM 2006 key signing parties. As a result, I had resolved not to participate in any key signings anymore until I caught up my backlog. Yes, I know about caff, and yes, I'm using it, but I still have a lot to do.

So now I'm in the strange position of having to organize a key signing party that I'm not going to attend (at least not until the end).

Or perhaps I might do so after all... otherwise it's going to be very boring. I'll see.

For those who care, the announcement has been out since yesterday (Sunday) and can be read on the FOSDEM website, complete with instructions. In the day and a half that this was true at the time of this writing, 15 people already submitted keys. That's quick.

Posted
new domain

New domain

% WHOIS uter
Domain:      uter
Status:      REGISTERED
Registered:  Sat Jan 13 2007

Licensee:
   Not shown, please visit www.dns.be for webbased whois.

Yes, .be whois sucks, but that's not the point of this blog post.

I noticed that the last part of my first name, 'uter', is still available in the .be DNS namespace, so I registered it. Apart from giving me the ability to have an übergeek email address, this also opens up the ability for some silly puns—like comp.uter.be and m.uter.be. The latter one is especially interesting for IRC trolls.

Why did I register it? I've been having grep.be since almost five years now, and it's getting old. The initial idea I had with it and for which I registered it, has never been implemented; and apart from being my personal domain, grep.be has now also become a domain for some random email lists and addresses, some of which not even related to me in any way. While I have no issue with those uses per se, I think it's about time that I separate myself from grep.be as a whole.

Not that grep.be is going away any time soon, though.

Posted
I suck

Busy day.

Brother kicked me out of bed at 07:00-ish AM, to bring him to work. Been ages since I had to get up that early, and the results are manifesting themselves now. But that's okay, I was on time for the rehearsal of ensemble this time around, which is an exception. Whoops.

We're there now also rehearsing the "James Bond theme", by Monty Norman. Under normal circumstances I wouldn't mention that, only this time I did the adaptation for the ensemble's unique setting. It's one thing to be rehearsing a piece the conductor prepared; as I can say now, it's quite another to be playing a piece which I had been working on for quite a while.

Next, I went to an instrument shop, to bring my bass flute in for repair, and to ask for prices for a normal flute (since, well, something happened to my previous ones). I'm considering both the YFL 411 and the YFL 311 currently. The main difference is that the 411 is a full silver instrument, whereas the 311 has a silver head, but the rest is silver-coated nickel. The quality of the 411 is supposed to be better, but obviously so is the price; €927 for the 311, versus €1600+ for the 411. Will have to give that some thought.

I also went to the local travel office, to arrange a flight to go to Edinburgh. However, I was slightly confused when I booked it, and so now I have these extremely cheap tickets to get there... in july, which is one month late.

Guess I'll have to go back and try to exchange them. Hopefully that won't be too expensive.

Finally, I noticed that our chicken had been quite productive lately, and that there were some 30 eggs in the kitchen; so I spent some of those by baking waffles. They were quite good.

Posted
ian murdock solaris

Ian Murdock on Solaris...

If you want another example, one from a company who any developer would agree is an outstanding engineering organization, here's one: "Sun has maintained binary compatibility between operating system releases for nearly a decade, enabling existing Solaris applications to run unmodified on Solaris 10. This means that Solaris applications developed 10 years ago will run on Solaris 10 unchanged, taking full advantage of new and advanced Solaris features."

Yes, it's true that there is outstanding backward binary compatibility in Solaris. However, if you're going to try use that as an argument in favour of Solaris, try again.

Have you ever actually used a Solaris system?

  • The ugliness on a Solaris system starts with $PATH, which is all over the place: /usr/ucb/bin for the compiler, /usr/gnu/bin (IIRC) for bash, /usr/bin for sed. The FHS is nonexistent.
  • Everyone who writes code for the Berkeley socket API knows that Solaris has to be different:
    #ifndef sun
    int yes=1;
    #else
    char yes='1';
    #endif
    
  • Even if you do it that way, on Solaris you have to say -lsocket.
  • I've heard claims that Solaris, partially because of the backward compatibility, is rather slow; that Linux beats the shit out of Solaris on the hardware (SPARC) that was more or less specifically designed for Solaris (and vice versa). Having used it for a short while once, I cannot think of a counterargument for that one.

If you're going to say that backwards compatibility is good and that we should incorporate backwards compatibility into Linux somehow, then please do not point people towards the two ugliest operating systems on the earth with a lot of garbage baggage for the sake of backwards compatibility...

Posted
motivation

Debian motivation

Steve asks a pretty good question: what is the motivation to work on Free Software in general, and Debian specifically?

There are actual scientific studies on that subject as academics try to wrap their head around this strange thing where people do not get paid, but still put in a hell of a lot of work.

What motivates me to put in hundreds of, sometimes boring, hours working on this stuff? I honestly don't know. I started doing working on Debian with a desire to make some name and fame for myself; but frankly, if name and fame is what I'm after, I should have stopped doing this a long time ago and should have tried to go work for TV or something. Or I should have been working on some stuff which is central to Debian (either the OS or the Project). So while "name and fame" might've been the reason in the beginning, it's not my motivation today.

It could be that I want to help shape the Debian operating system into something useful; that I want to contribute so that the system is something I like to use. But I don't think that's the case; if that was my motivation to work on Debian, I would have more interest in doing some infrastructure work, which I'm not doing: the m68k port is not exactly the most important port of the Debian project, and my most popular package, nbd-server, is installed by 101 popcon submitters, or 0.38% of them all. Why the server seems more popular than the client is a mystery to me, but well.

It could be that the Debian project is this warm and fuzzy place which allows me to meet people from the comfort of my bed room, but I don't think that is the case. If I want to meet people, I'll go to a bar, or go sing in the choir, or go play my flute in the ensemble. That's a lot more direct, a lot easier than trying to set up some trip to Scotland, and a lot cheaper, too. And if I want a warm and fuzzy place, then with all due respect, Debian is not what I'm looking for.

It could be that by working on Debian, I want to challenge my knowledge and in that way increase it; this would look good on my CV, and it could perhaps satisfy a desire to learn new stuff, all the time. But that's not entirely true. I don't need to be a Debian developer to challenge myself or to learn new stuff; and if I would really want to have something that looks good on my CV, I would be much better off by joinging a project that produces insane huge gobs of code, rather than a project which is perceived to do nothing more than 'just putting stuff in packages'.

I think my real motivation is a bit of a mixture of all of the above. I still feel proud when people talk about things I've done, or when people praise me for the code I've written; and I still feel sad when people mock the m68k port, even if 'only jokingly' (because we've pulled off a lot). I often try to file good bug reports when I find issues with Debian, and purposely run unstable on my laptops to help find bugs quickly, in an effort to help turn Debian into something useful. There is a lot of flaming on Debian mailinglists, but there are also a lot of friends—who, contrary to those from the choir and those in the ensemble, actually know what I'm talking about if I say "I'm trying to port Debian to those ColdFire boards, which needs changes in the compiler, the linker, and the C library. Possibly also the assembler". And finally, while Debian work hardly challenges me anymore, it does still allow me to learn new stuff every day—which is quite useful in my day job.

So, there you have it. I don't have a specific reason why I'm still a Debian Developer after five years; it's more of a general feeling that being part of Debian is the right thing to do. I guess you could also say I have this feeling that I can't abandon "them"—whoever these "them" might be. Obviously that's incorrect (I've seen much more important people, such as e.g. Herbert Xu, being replaced without much of a hitch), but the feeling still is there, nagging on me.

So there you go. What's your motivation?

Posted
solaris followup

Solaris followup

I received a number of comments on my blog about the Solaris rant that I posted two days ago. The best one was this:

Have you ever kissed a girl?

- Bryan

----------------------------------------------------------------------
Bryan Cantrill, Solaris Performance. bmc@eng.sun.com (415) 786-3652

I have two things to say about that:

  • Yes. Not that it's any of your fucking business.
  • No, my name is not Dave Miller. You really need to work on your originality ;-)
Posted
kernel downgrade

Rock. Or not.

A week or two ago, one of the hard disks in rock utterly broke down.

In itself, this wasn't a problem, since the disk was part of a 3x40G RAID5 set. Moreover, I knew it was dying, and was preparing to buy me a new disk anyway; the fact that it broke down only sped up matters. No worries.

However, there's one slight problem with rock: it's a pretty old SMP box, and because of some bug somewhere (which I still need to hunt down), it can't run anything later than 2.6.12 in SMP mode.

The new disk was a 80G disk, to replace a 40G disk. I wasn't very happy about the RAID5 array, but since I needed more disk space than what a RAID1 or RAID10 array on three 40G partitions would give me, I didn't have much choice. One of the disks in the RAID5 set was a 80G, too, however, with a 40G partition dedicated to the RAID5 set; so rather than doing ugly things with two disks only halfway committed to the RAID1, I decided to convert the RAID5 set to a RAID1 one. When you use LVM-on-RAID, as I do, that's pretty easy: you just create the new array (in degraded mode, on the new disk); add it to the volume group; use pvmove to move all data to the new array; use vgreduce to remove the old array from the volume group; and finally, repurpose the freed-up space to make sure the RAID1 set is no longer degraded.

Which is all nice, except that on 2.6.12, when pvmove locks the entire volume group, you can't write to it anymore, which is quite painful if things like /var and / are on that volume group; gives you a nice deadlock.

So I compiled me a 2.6.19.2 kernel with SMP support explicitly disabled, in order to be able to do the pvmove dance without much issues. That worked. I only forgot to do one rather important thing: to regenerate the initrd after all data had been moved; mainly because it took quite a while for the RAID1 resync to finish, and I had other things to do by then.

Yesterday, we had a power failure, and obviously rock failed to come up again.

By doing some utterly ugly things with the sarge d-i and forcing the yaird-generated initrd into a debug shell, I was able to boot the box properly again, and had it running 2.6.12. Which took all of three hours, or so. By then, it was kinda late, so I went to bed.

This morning, my brother woke me to say he couldn't reach the Internet. Since rock is my gateway, I got suspicious. Running dmesg showed me a number of warnings from the kernel, where it said that it didn't properly understand some of the hashing stuff in some directory inodes. As a result, several files had been corrupted—including /var/lib/dpkg/status and /var/lib/dpkg/status-old. The file with 'extra' information that aptitude maintains, however, /var/lib/aptitude/pkgstates, still existed and was readable. So I downloaded me a one-week-old Packages file from snapshot.debian.net, and wrote this perl script:

#!/usr/bin/perl

open(APTITUDE,"</var/lib/aptitude/pkgstates");
open(STATUS,">status");
open(PKGS,"<Packages");

my $pkgent;
my $aptent;
my %aptitude;
my $i;
my $key;
my $val;

while(<APTITUDE>) {
	if(/^$/) {
		$aptitude{"Package:" . $aptent->{"Package"} . "\n"}=$aptent;
		$aptent = {};
	} else {
		chomp;
		($key,$val) = split /:/;
		$aptent->{$key} = $val;
	}
}

close APTITUDE;

while(<PKGS>) {
	if(/^$/) {
		$aptent = $aptitude{$pkgent->[0]};
		if($aptent->{"State"} == " 1") {
			print STATUS $pkgent->[0];
			print STATUS "Status: install ok installed\n";
			for($i=1;$i<$#{$pkgent};$i++) {
				if(!($pkgent->[$i] =~ /^(Filename|Size|MD5sum)/)) {
					print STATUS $pkgent->[$i];
				}
			}
			print STATUS "\n";
		}
		$pkgent = [];
	} else {
		push @{$pkgent}, $_;
	}
}

close PKGS;
close STATUS;

... which generated a somewhat valid status file, that I copied to its right place. Yeah, that's an ugly hack, but at least I don't have to reinstall rock now. Phew.

Posted