Search Results: "beh"

22 November 2006

Steve Kemp: You and I should get along so awfully

I spent a good few hours fixing a security problem in the Debian Administration website over the past few days. (A theoretical hole, rather than one being actively exploited. Of course “theoretical” doesn’t mean it wasn’t real!) Now its time for everybody else to test/fix their sites ;) Still behind, although less so than previously. Right now I’m in a happy daze after an amazingly wonderful romantic meal last night - and a fair amount of wine. I like to go eating out at posh restaurants once a month or so. That way it is regular, but still novel enough to be exciting. I guess I’m just a sucker for fancy food and people calling me Sir. (And only rarely adding “… you’re making a scene.”)

19 November 2006

Andreas Metzler: cheapskate HD upgrade

As the hard-disk of my PC exhibited its first hard error after months of strange noises I was forced to replace it. This machine dual-boots WinXP (on NTFS) and Debian, Windows' boot manager invokes grub and I absolutely did not want to re-install either Windows or Debian or try to figure how to resurrect a broken WinXP bootmanager. So I used the the dd-method again:
  1. Plugin new disk as hdc
  2. dd_rescue -b 512k -A /dev/hda /dev/hdc (I had to use -b 1 for copying the almost broken sectors.)
  3. Either re-partion or simply add more partitions at the end. (The new disk is always bigger.) Don't touch the first partition, which is NTFS and take care that the partion containing /boot gets the same partition number/position. - This way grub will grub will continue to work. Use cp -ax to acually copy the data to the new partitions. (cp is dog slow for copying directories containing many files, like ~/mail or ~/.ccache. - Two tar instances talking to each other over a pipe would probably be a lot faster but I cannot remember the 42 options needed to replicate cp -ax behavior.)
  4. Power off, switch disks, power on.
  5. Verify that your data is still there and clean the old disk, using shred(1) and openssl rand -rand /dev/urandom -out /dev/hdc1 somereallybignumber.
The process would be smoother if I knew of a sane way of copying NTFS (preserving ACLs) and could be bothered to actually remember how I setup grub in the first place. ;-)

MJ Ray: ePassport 0-day crack

And now, just when you thought the ID State couldn't get any dafter, it turns out the ePassport chips are an identity thief's friend. The UK is adopting ePassports when even the United States of Paranoia concluded its Radio-Frequency ID (RFID) technology:
"increases risks to personal privacy and security, with no commensurate benefit for performance or national security."
More from NO2ID:
"With a standard RFID reader bought over the internet for just 95.73, the campaign was able to prove that the same "contactless" microchips that are also to be incorporated into ID cards will "dramatically decrease [citizens'] security and privacy, and increase risk of identity theft" [FIDIS Press Release] ."
Time to get a RFID-proof wallet, like Benjamin Mako Hill and Andreas Metzler Mick commented:
"The more I hear about the UK in recent years the less I want to vist:
  • Fingerprints for beer.
  • Fingerprints to hire a car.
  • Biometric data on passports that are easily compromised.
  • Video Cameras on every corner.
  • Mandatory IDs in a few years.
  • British children claimed to be worst-behaved in Europe."
"The UK is starting to sound like The Clockwork Orange." "And then the plonkers claim "if you've nothing to hide what's the problem"?"

18 November 2006

Sven Mueller: CBDS and kittens

Steinar H. Gunderson wrote about CDBS once again, and I couldn’t agree more. CDBS introduces a lot of complexity for non-trivial packages, and it especially is basically undocumented. So what is CDBS’s value? For non-trivial packages, it is hard to use, since you basically need to decipher the CDBS code. For trivial packages however, it doesn’t add much value over dh_make. That’s actually sad: I like the general idea behind CDBS, but it is implemented badly IMHO. What it should do, if implemented right is to automate anything you want done on an easy package while providing and documenting (which includes consistently named hooks and options) all the interfaces needed to maintain non-trivial packages. Ideally, this would even include packages which need multiple build runs (like providing two differently configured versions of the same binary in two packages). But as said: It would need consistent names and proper documentation, and CDBS fails both currently. I however hope this improves in the future. Don’t ask me to work on this however, since personally, I’m quite happy using debhelper on my packages, since it is removing complexity (not typing work or lines of code) from debian/rules while keeping it obvious from that file what is done during a build. I would really like to see the reasoning from Erich on why he thinks CDBS is NMU-friendly, since I don’t get why he thinks so from his blog post.

17 November 2006

Evan Prodromou: 26 Brumaire CCXV

I've been pretty interested in making Web sites WebSoftwareFriendly for a while, so I'm pretty psyched to see that Yahoo and Microsoft have embraced the Google Sitemaps format. They've started a site for the format, http://www.sitemaps.org/ , which lists out the protocol, which seems to be unmodified from the original Google version. Sitemaps have been a necessary part of Web sites for years. Netscape -- back when it was a browser -- had an RDF-based sitemap format that had a brief flare of popularity just before Netscape went into its weird late-90s spiral. Then RDF people got really abstract and academic, and decided that sitemaps weren't what RDF was all about, and RDF sitemaps were forgotten. So sitemaps went off the air, and we've had to wait for a standard on the idea until today. Yahoo lets you submit sitemaps today, as does Google; Microsoft Live supposedly will support it sometime in 2007. One thing that's interesting is a new "ping" protocol, for when the site is updated. I'm not sure how well it works or if it's even implemented, but it's interesting to see it working. I think the weak part of this whole thing is that site owners have to submit sitemaps to each search engine; it would be nice if there were some sort of discovery, like an HTML <link> element, so that other types of Web software besides the big search engines would benefit. tags:

Knowing when to hold 'em From O'Reilly's wrapup of the Web 2.0 Summit, I got a good link to some other Evan's Knowing When to Hold Em. It's a little discourse on the growth of Web 2.0 sites after they've been acquired. Evan Williams, the author and the guy who sold Blogger to Google, knows whereof he speaks. He has some graphs that show traffic for various Web 2.0 sites sloping precipitously upwards after their sale to some big company. The implication being, I guess, that the sites would have been more valuable to sell later. He also points out that few of the sites have benefited visibly from being acquired. I'm not sure the argument makes sense. Traffic is a cost centre as well as a potential source of revenue for companies. Keeping servers up, running, and cogent is hard work. Most small Web sites have been throwing labor and cash into their sites for a while, and the ability to keep such a site going into the Alexa top 100 is beyond most small companies. Paying for a lot of servers, developers, designers, sysadmins and bandwidth for another couple of years may make the site bigger and more desirable for acquisition, but it's a big risk to take. My favourite part of the discussion is that my friend Kevin Fox shows up at the end with some good points about when and how to invest. tags:

Free Software Java I've been programming in Java off and on since the first beta versions of the VM and JDK in 1995. The language has always had a certain cachet with the Open Source set -- the free-as-in-beer tools, good documentation, and cross-platform compatibility made it an Open Enough system, roughly equivalent to proprietary C compilers shipped with every Unix variant. Its release was roughly synchronous with the growth of the Web, and Java applet support in Netscape made the first round of rich client applications conceivable, if not exactly elegant. And then Java grew onto the Web server; and into other parts of the network; and then all of a sudden everything had to be Java. The system grew from this nifty little tool to The Enterprise Solution For Your Enterprise. Serious people worked on Java. I worked on Java when I needed to be serious. Java stopped being fun. Early efforts at getting Open Source Java VMs and development kits working were pretty successful, but they just couldn't catch up with the rapid pace of development on Sun's core product. But inclusion of the language in the Gnu Compiler Collection, the great JBoss J2EE system, the growth of Apache's Jakarta project, and the growing Java Community Process made Java less and less a regular product, built in a silo behind a corporate firewall, and more of an Open-Source-y project. So I guess it was inevitable that Sun would either Open Source its codebase, or end up irrelevant. They probably squeezed just about all they could out of it without going Free, so that's pretty impressive. I think Free Software advocates are supposed to be grateful about this; my main reaction is: why did you put everyone through all this crap for so long? You've wasted 12 years that could have gone into making Java really incredible. We'll see what happens. My main interface with the JVM for the last year or so has been through scripting languages like Rhino JavaScript engine (very fun) and Pnuts. Who's got time for Java programming any more? tags:

Biella Coleman: The Politics of (lyme) bacteria

Recently I read an amazing review of patient advocacy and health (counter)movements by Steven Epstein from the STS program at UCSD. It is still a draft but bound to be published in the New Handbook of Science and Technology Studies and when it is, anyone who works in this area will gain so much from reading the review. It was stunningly broad yet highly specific. He is able to synthesize an enormous literature on patient advocacy, a field that has seen a blizzard of activity, especially in the last twenty years. Along with providing points of entry and departure into the field, he also examines who the burgeoning interest in the field of STS. What I found interesting is that there is very little work being done on a topic I happen to know a lot about, lyme disease and whose politics I have been following since at least 1999. I am not sure why the lacuna but it is an odd disease dripping and screaming with controversy and seems to stand apart from many illnesses, in part because of its odd dual existence. On the one hand, it is an illness that the medical establishment totally recognize as real (and thus in some respects is unlike the class of syndromes from MCS to chronic fatigue, which another STS researcher, Joe Dumit provocatively describes as illnesses you have to fight to get ). But that is only half the picture because mainstream medicine tends think that lyme is not only easy to diagnose but also to treat, so much so that if a person thinks they have lyme (even after a round of antibiotics or lacking diagnostic markers), the are either seen as suffering from something else (and usually then told they have one of those highly contested syndromes), or more often just crazy. So it exists dually: at once recognized but only narrowly, so that in another form, that of chronicty, lyme cannot exist. It is this dual quality of lyme that defines and shapes its politics and just recently, new developments have fueled the controversy. Namely it follows from the Infectious Diseases Society of America new guidelines for the diagnosis and treatment of lyme, published last month. In a nutshell, they basically re-reduce lyme to a very easily diagnosable and treatable illness, calling for even more strict guidelines for its diagnosis than now exist. They sanction a small range of blood tests and thus totally nullify the role for clinical diagnosis, which even the CDC had acknowledged as vital in times past. Unsurprisingly this has thrown the chronic lyme community in a total tizzy and they have not taken this sitting down. A petition has been launched and protests have been planned. And amid the controversy, politicians have already heard the call to arms. In the state where lyme is a famous entity for it was first discovered there, Connecticut, its Attorney General is calling for an anti-trust investigation into the Infectious Diseases Society of America, in essence for using their clout and prestige to legitimate a gold standard in diagnosis and treatment, when it seems far from obvious that this should be the standard. According to the LDA press release:
The national non-profit Lyme Disease Association (LDA), representing more Lyme disease patients than any organization in the United States, applauds Connecticut State Attorney General Richard Blumenthal for beginning an investigation into the Infectious Diseases Society of America (IDSA) Lyme disease guidelines development process. In an unprecedented move, the Attorney General’s office filed a Civil Investigative Demand (CID) to look into possible anti-trust violations by the IDSA in connection with exclusionary conduct and monopolization in the development of the Lyme guidelines
What I find so interesting is that this latest chapter in the grungy and torrid politics of lyme encapsulates the very nature of the politics of lyme, which really is about the agency of bacteria and in the Latourian sense. If Pasteur had to put a lot of effort into making credible the bacteriological model of disease as Brunto Latour covers in The Pasteurization of France and if there was plenty of future prostelyzing needed to bring credibility to the bacteria to more general publics, as Nancy Tomes illustrates in The Gospel of Germs, well now, I think we are in an era where we think we have such intimacy with the biological ins and outs of bacteria, it is almost impossible for the scientific community to imagine bacteria as such complex organisms that they can be in fact very difficult to diagnose, eradicate and treat. It is just no longer part of the basic conceptual universe of most doctors and medical researchers to think of bacteria in this way. The LDA press release acknowledges this very fact in the following way:
The October 2006 guidelines do not acknowledge that a complex bacterium such as the Lyme disease spirochete could possibly survive in the body and the brain, evading the immune system and short-term courses of antibiotics.
For many lyme researchers and doctors, since lyme is a bacteria and we know how to treat those pesky critters, it is frivolous to even imagine or contemplate otherwise. I would call this a hubris that arises not from the arrogance of doctors and the medical establishment but following the heels of success that medicine has indeed had with conquering the bacteria with antibiotics. Even new forms of poweful and highly resistanant TB are still treatable with a potent cocktail. That is, at a cultural level, I understand the blinders. At a political level, however, because people are suffering and because it is plausible that lyme can exist chronically, it is imperative to unseat this cultural comfort borne from past success to get the ball of research rolling anew. I think bacteria (and parasites for that matter as a recent smattering of articles demonstrate) are a lot more savvy creatures that should be treated as novel, wondorous creatures, once again. I would dare say the medical establishment, by refocusing energies on that which they think they have solved, would find themselves quite surprised. updateHere is an article discussing the issues.

16 November 2006

Andreas Barth: Release update sent, and upgrade testing

On Thursday, the release update we have been busy preparing was finally sent out by Steve. This has clarified some of the questions people have been asking for some time. Also, more comments on the release notes have been merged. We are now at an state where I'm happy to let users work with the release notes - though one large section still needs work: What is the appropriate order for upgrades of kernel and packages. After that was done, I started myself with some upgrade tests to see how the packages really behave. More on that on one of the next days ...

Stefano Zacchiroli: cdbs relevance

/me on the Relevance of CDBS Whoa, people discussing about CDBS, I can't help joining them. My position: I love CDBS. I started switching my packages to CDBS an year ago or so and nowadays I've almost finished. I understand that people not knowing CDBS might have trouble fixing bugs in my packages, but that's life and it's the same as having to fix a bug in a software written in a programming language you are not fond of. It's just a matter of setting a minimal standard: today people in the NM have to learn debhelper, tomorrow they will have to learn CDBS too. I think it's worth the effort, because CDBS, if used extensively in our archive, has the benefit of providing a single place where to massively make changes to potentially all packages of the archive. That's a huge win for QA in Debian. The same does debhelper, but it only takes care of technical aspects in the packaging process while CDBS also takes care of behavioural aspects. Of course CDBS has drawbacks and nuisances (the available hooks for examples are not properly standardized nor documented IMO), but I think it's a step in the right direction. In Debian we should push more and more toward the possibility of making changes in a centralized/batch manner, so that when maintainers tend to get MIA we have a quick and easy way to take over their unfulfilled duties. Collaborative maintenance is a social step in that direction, CDBS is a technical one.

15 November 2006

Steve Kemp: I could kill, but I don t care about it

I’ve significantly updated the code behind the Debian Administration website over the past few days. Now: I still need to decide whether to open up the inter-user messaging system, and implement a few more tweaks and fixups. But these are pretty trivial to do, it is more a matter of deciding whether they are appropriate things than actually writing the code. All of this work combined with travelling a fair amount recently has left me behind on several fronts though. I’m going to dedicate tomorrow to catching up on the biggest outstanding issues, but I’m not sure how far I’ll get. Being behind on things actually makes me feel pretty good, I’m no longer on as many critic paths as I was a few months ago, so whilst getting behind is frustrating and annoying it doesn’t affect quite so many people/projects/packages/things. Either way better to be happy and behind than the reverse .. ObXen: The xen-hosting setup managed to reach an uptime of 100 days. I’m obviously not geeky enough; powers of ten remain much more significant to me than powers of two! Actually I take that back: I can recite powers of two to rediculous degrees and disassemble x86 and z80 hex dumps into opcodes with a fair degree of accuracy .. About time I got more practised at patching binaries; although its hard to find GNU/Linux software which requires serial numbers ;)

Matthew Palmer: Severe Discomfort's "The Joy of UDP"

(For the grammar Nazis out there: no, that apostrophe is not misplaced)
There are times when a connectionless protocol almost doesn't seem worth the hassle. Take, for instance, the troubles of a round-trip communication, using UDP, where the initial request is sent to a secondary IP address on an interface. Your code, on the server, might look like this:
 s = UDPSocket.new
 s.bind('', 12345)
 loop   data, remote = s.recvfrom(65535); s.send(data, 0, remote[3], remote[1]  
This is a pretty simple Ruby fragment which just reflects your UDP packets back at you. It really doesn't get much simpler than that. Connect to this thing from somewhere else (using nc -u remoteip 12345) and you can reflect packets back and forth to your heart's content. Or so you'd think... When talking to a regular IP address, your packets probably look something like this (when viewed using tethereal):
 192.168.0.1 -> 192.168.0.2 UDP Source port: 35716 Destination port: 12345
 192.168.0.2 -> 192.168.0.1 UDP Source port: 12345 Destination port: 35716
Fantastic -- I send a packet, and get one back. In netcat, you see whatever you typed printed back out again. But, what if I add a secondary IP address to the server's interface (ifconfig eth0:1 192.168.0.5, for instance) and try sending packets to that IP address (with nc -u 192.168.0.5 12345)? I get this insanity:
 192.168.0.1 -> 192.168.0.5 UDP Source port: 35772 Destination port: 12345
 192.168.0.2 -> 192.168.0.1 UDP Source port: 12345 Destination port: 35772
And of course, no self-respecting network stack is going to accept a packet back from a totally different IP address, even if it did manage to get the ports right. Hence, the client never sees the return packets, and thinks that the server is snubbing it. What's happening here seems insane, but it's actually just a regular artifact of a connecntionless protocol like UDP. You see, we've bound our socket to the "any" address (the empty string in the call to #bind tells UDPSocket to bind to the "any" address -- no, I don't know why either, it's not a particularly intuitive interface). When we get the packet into our app via #recvfrom, we get no information on what address the packet was actually sent to, only that the OS decided that the packet was for us (yay for encapsulation). The only information we get is where the packet was coming from -- and due to the fact that the kernel keeps no connection-related information around for the socket (the kernel figures it'll hold us to our connectionless pledge), when the time comes for us to send a packet back, we have to explicitly say where we want that packet to go -- that's the remote[3], remote[1] arguments in the #send call. The brain-leakage starts when we work out where to say the packet is coming from. When we send the packet, a source address needs to calculated -- again, the kernel keeps no information on source or destination because we're connectionless. Because our socket is bound to the "any" interface, the OS thinks it has carte blanche to set whatever source address it likes. In Linux, the behaviour appears to be to pick the IP address set on the primary alias for the interface that will be used to send the packet out on. So for the common case (one IP address per physical interface) everything is fine. But those corner cases, gee, they're awfully sharp and pointy... The solution, of course, is to send the packet out through a socket that is bound to the particular address you want to use as the source address -- then the kernel knows what source address you want, and there's no confusion. Seems pretty trivial, right? Surely every sensible network application does that already, right? So obviously Ruby's UDPSocket implementation just sucks. That's what I thought, and I don't blame you if you think so too. But before you raise pitchforks and storm the gem-covered castle, try repeating our little experiment with some other widely-used UDP-based applications, such as net-snmpd or your ntp server. (The NTP server is a little different, in that to trigger the problem you need to start it and then setup the interface alias, for reasons I'll explain later). Both net-snmpd and ntpd exhibit the same behaviour as our trivial UDP echo service -- at least, the versions present in Ubuntu Breezy do, although I can't imagine everyone's suddenly cottoned onto this problem in the last 12 months or so and come out with a rash of fixes. So, basically, everyone seems to be suffering from the same malady. For values of "everyone" that equal "some UDP servers". There's some services that don't seem to have such troubles with alias interfaces -- the Bind DNS server comes immediately to mind, and ntpd works fine if you start the NTP server after you setup the interfaces. Why the difference? These services are clever and bind to each IP address on the system separately, like so:
 $ netstat -lun  grep :53
 udp        0      0 192.168.0.1:53          0.0.0.0:*                          
 udp        0      0 192.168.0.5:53          0.0.0.0:*                          
 udp        0      0 127.0.0.1:53            0.0.0.0:*                          
This is very cool, and solves the problem, except that if you add another interface after you start Bind, it doesn't pick up the new address, and you're boned until you restart the daemon. It also increases code complexity a bit, since you need add a select into your request handling loop (instead of just blocking on the #recvfrom call, like I've been doing thus far). Whilst I'm never happy about unnecessary complexity, I'll deal with it where I have to, but the real killer for this application is the "you can't change your interfaces after starting the daemon" rule -- my particular need is to make requests to a virtual service IP address, and restarting my service after each IP address change is going to suck hard. I mentioned ntpd earlier because it has some extra trickery at work. It's list of bound interfaces looks like this:
udp        0      0 10.6.66.6:123           0.0.0.0:*                          
udp        0      0 192.168.250.6:123       0.0.0.0:*                          
udp        0      0 172.14.16.6:123         0.0.0.0:*                          
udp        0      0 172.31.62.1:123         0.0.0.0:*                          
udp        0      0 192.168.37.179:123      0.0.0.0:*                          
udp        0      0 10.64.64.64:123         0.0.0.0:*                          
udp        0      0 127.0.0.1:123           0.0.0.0:*                          
udp        0      0 0.0.0.0:123             0.0.0.0:*                          
It listens to every IP address explicitly plus the "any" interface. I'm not quite sure why, either -- just listening to the specific addresses works for Bind, and if you add an interface alias after starting ntpd, it exhibits exactly the same problem as the trivial UDP echo service, so I don't think that listening on "any" is really gaining it anything. Listening on "any" does make ntpd behave differently to Bind: with Bind, if you send packets to an interface that wasn't available when Bind was started, it just completely ignores you (because it lacks a socket listening for packets to that address), while with ntpd the packets hit the "any" socket and suffer from the wrong-source-address bug. At the moment, my best chance of a solution appears to be to follow Bind and ntpd's lead and hook onto every address, but with the extra twist inspired by ntpd -- listen on the "any" address as well as all of the specific addresses. If I use any packets that arrive on the "any" socket as a trigger to rescan the available addresses (to add any new addresses that have been created since the last scan), that should solve all my problems. Now I only need to make it work (and deal with the insanities that will no doubt result). Wish me luck. The screams of pain and frustration you hear (no matter where you are in the world) are probably mine.

14 November 2006

Steve McIntyre: aaargh! cdbs...

Steinar suggests that he doesn't like cdbs. He's not alone. cdbs may make life easy for the maintainer, but it can make it incredibly difficult for anybody trying to fix bugs and NMU a package. I've found this myself when doing RC bugfixes during the recent round of BSPs; I must admit that more than once I've started looking into a bug only to give up the moment I've seen it uses cdbs. Fixing packaging errors is much harder when all the details of the package build are hidden from you in a mass of variables and included Makefiles. Unfortunately, it seems quite a number of new inexperienced maintainers have been using cdbs with very little understanding of the magic it does behind the scenes. This doesn't bode well for the quality of their packages in my experience.

10 November 2006

Roland Mas: Geekish week-end

So I spent most of the (long) week-end hacking on various things, and behaving geekishly. Gforge 4.0 packaging goes along rather nicely. Packages built from current CVS won't use LDAP anymore (except for the old gforge-mta-exim, but you really should be using gforge-mta-exim4 or -mta-postfix by now). Shell accounts, e-mail redirection and mailing-list resolution now use direct PostgreSQL lookups. No more install-ldap.sh scripts running hourly and taking forever. No more nightmares setting up slapd and trying to clean after it when it explodes. Yay! Other news, on the video front: okay, I gave in, I finally accepted the next-best-thing that so many people have sent me. My raw1394 and dv1394/host0/PAL/out device nodes are now statically created by me, and symlinked by udevd via links.conf. Urgh. It means I can grab video from the camcorder, edit it, and export it back to the camcorder, all that in the same Kino session (and under a reasonably current 2.6 kernel). Editing video is nice, but it's not very useful if you have to carry your camcorder along at all times to show people, though. So I wanted/needed a free, working encoder for a nice codec that I could use. I wanted Theora. I whined for sometime, and I finally understood that Kino wouldn't have anything to do with it, and I had to use ffmpeg2theora. Blargh. Whatever, I grabbed it from upstream and packaged it (it's at http://roland.mas.free.fr/debian/ if you want it -- someone please ITP it, take it, write a manpage, and upload it to Debian). Now Kino can export to Theora, cool. Now I just have to find one media player able to play Theora correctly, and things will be fine. Xine only wants to play the Vorbis (audio) track, and shows me a visual representation of it. VLC is fine after like fifteen seconds, but it starts by playing audio too fast, then slows down, while video takes long before coming, then it comes up too fast and slows down to a normal speed too. As for totem-gstreamer... It starts by playing audio fine, but video is about 5-6 times too slow for as long as there is sound to play. When the end of the audio track is reached, all the video is played as fast as possible (and in total silence). Oh, and I also got my ass kicked at Freeciv. I used to play Civilisation for days in the good old Atari ST days, but I seem to have forgotten quite a lot. Or maybe I was no good to start with, who knows, the AIs never told me. So I need to practice against AIs, I suppose, before I next connect to a game server. Okay, so I spent the whole weekend on a computer. So what? It was raining anyway.

7 November 2006

Andreas Barth: Second day: Release planing

Today started with finishing the list of open issues for Etch, and trying to add time expectations to the list. This sounds like an easy task at first glance, but actually it involves asking many people, and getting time expectations updated etc. As result of that list, and some further discussions, I started drafting the next release update mail. One also is hinted to many issue which escaped attention so far, so it involved also a round of bug severity changing. Also, I finished working on "how does apt behave with more than one signature" for now: There is http://testmirror.turmzimmer.net/debian which has an additional signature on the sarge Release-file (thanks to Netcologne for hosting) - please feel free to just use it for any sarge system, and report errors back. I'll revisit the experiences in two weeks time. The rest of day involved smaller issues, e.g. fixing the sort-by-bugnumber-mode on bts.turmzimmer.net (which I broke with yesterdays changes for "related" bugs), and a couple of other things. I also started to update the etch-release-page, but that needs to be continued tomorrow it seems. After I saw some more people not too happy with apache2.2 configuration changes (or rather, some modules are no longer there automatically), I decided to dedicate this Thursday to Apache.

Simon Richter: Reusing code

A feature I'd like to see in an SCM is a refactoring aware merge tool. When I have one branch that has had most namespace, class and method names changed (I used to use CamelCase), merging another branch into that doesn't work well, because there are a lot of scattered little changes that each inhibit changes for a few lines before and after. Given enough discipline on behalf of the person doing the refactoring (in my case, me), the commit that introduced these changes can be reduced to a set of substitutions, which then can be applied to the last version in the branch being merged, and this should reduce the conflicts to a small few (mainly whitespace changes, probably).

6 November 2006

Andreas Barth: First day of experiment

Today, I started with the well-known experiment by making sure I'm not dropped out from social security for taking part there. After that was started, I invested some time on a long-standing wishlist bug on bts.turmzimmer.net, so that one can see even the RC-bugs related to a (source) package which would be ignored otherwise if at least one bug would be shown. This required some more code cleanup first. Now everything should work. I started the afternoon with creating a list of open tasks that are not marked as RC bugs, and dependencies between those. During that, I learned that the security teams thinks that we lost the security sparc autobuilder - not something that makes me happy, and something that needs to be fixed independent of Etch. Actually, it seems the autobuilder is just recovering, but I'll continue looking at it. apt-keys One item open on the list of open tasks is the final usage of apt-keys (which involves me in more than one way), so I started a testbed for having the Release-file signed by more than one key, and check whether apt is still happy. Adding another signature turned out to be quite easy with just adding it to the Release.gpg-file. If there is more than one signature on the release-file, but not all keys are know to apt, apt warns, but doesn't stop:
W: There are no public key available for the following key IDs:
010908312D230C5F
If however there is a bad signature, apt fails, even if there is also a good signature. (And please note, if the key is unknown, the signature is not bad but unknown - this gives the interesting behaviour that removing a trusted key by apt-key my remove the need to explicitly confirm to go on with the upgrade.) Summary on apt-keys Current behaviour is ok, we just need to sign one file extra with each stable (point) release, and this can be done with: gpg --no-default-keyring --secret-keyring srm-secring.gpg -b --armor etch/Release >> etch/Release.gpg (or rather, sign off-line, and append on ftp-master). The behaviour with multiple keys might look a bit strange, but IMHO we can live with it. I'm currently preparing to use real keys, and publish the result on some place where anybody could test it (for the latest sarge point release), and I hope we can put it on for the next point release on ftp-master.

4 November 2006

Clint Adams: You promised me Broadway was waiting for me, a freeborn man of the U.S.A.

I used to write shareware. Some people would just send money with a brief thank-you note. Some people would adopt the attitude that I was beholden to them once I cashed their checks. Since the customer is always right, I was faced with the pressure of customer-directed development. For that and other reasons, I stopped writing shareware. My next mistake was to release everything as postcardware. I did not immediately realize that this was wrong, and I enjoyed the influx of postcards from various places. Never underestimate the power of a simple 53-byte executable to make random people happy. In time, I stopped writing postcardware. Many years later, someone offered me something, with the condition that I do something in Debian that I would have not done otherwise. Another individual was offered the exact same inducement with the exact same condition. We both accepted. I kept my end of the bargain. The other guy reneged. Sometimes I wonder if he inadvertantly did the right thing. Since then I have been paid to work on free software, but never directly on Debian.

3 November 2006

Simon Richter: Optimisation

The correctness of an optimiser in a conforming C++ implementation is defined by the "volatile" keyword, that is, an optimisation is correct if it does not reorder, add or remove volatile accesses. However, people have come to rely on non-volatile accesses to be finished before a call to a function in another translation unit, even if you hand over a buffer which is then passed on to some external entity (syscall or hardware). Technically, this is undefined behaviour, since the compiler is free to identify the writes to the buffer space as dead stores and optimise them away. The correct way to fix the program is to declare the buffer volatile, but in a lot of cases, this requirement is too strong, for example in the case of TCP checksumming, where it is neither desired to force reading back the data, nor to build up the data in a temporary buffer and write in one go. What we'd need is something in between, that is ordered with respect to volatile accesses, but not internally.

2 November 2006

Daniel Stone: input hotplug merged to master

So, I finally merged the input-hotplug branches on master. Basically, this means that instead of attempting to hide behind one device (/dev/input/mice, the console keyboard), and hacking around it with gash and tape when we actually expose multiple devices[0], we finally expose multiple devices in a useful way. This is consistent through out the Xorg and KDrive servers; Xnest and Xvfb also have support, but that's not the most useful thing ever.

This required a huge overhaul of the old input code, much of which dates back to the mid-80s; the bits that don't were sticky-taped on the side, working more in spite of our core input code than with it. So, in addition to being generally useful and providing things like multiple keymaps on different keyboards and different acceleration (and so) on different pointer devices, it also actually caused a net removal of code.

So, once you've set yourself using evdev for the drivers, you can also now dynamically add and remove devices. Last night, not long before I released all the components, I removed all the input devices from my configuration file, told X not to add any, and added 'respeclaration --daemon' to my session: completely dynamic input. I've been using the core bits (the whole input API rework) for quite a long time, along with Zepheniah's evdev driver, but this is the first time I've been using a session with completely hotplugged input, as opposed to adding and removing devices every now and then to test the hotplug capabilities, which was actually a piece of cake, compared to reworking all our core input code to deal with devices appearing and disappearing.

Still, this all needs good desktop integration. Keyboard and mouse applets need to become aware of multiple devices[1], and allow people to configure them separately. The desktop should also take over the role currently filled by respeclaration, which works perfectly well, but shouldn't be generally deployed; management of input devices thus turns into a session management issue, which leaves the desktop to dictate policy.

There are still some nits in the D-BUS policy to sort out (right now, only root can reconfigure the devices), but I believe it's fundamentally the right model: it's machine-oriented, rather than session-oriented. There are still some minor changes that need to be made, but working out who should be trusted to add input devices was more or less impossible in the X security model.

xserver 1.3 (for Xorg 7.3) should be good fun.

[0]: Key presses/releases from your second device will just magically appear from your first device. Useful, huh?
[1]: In brief: check for inputproto 1.4 at build time, check DEVICE_CORE on whatever appears as the core pointer, and if 'iscore' is 1, then you have a virtual core pointer. Anything that sets status to 1 for DEVICE_CORE will also generate core events. Setting controls on the core keyboard or pointer will propagate those changes down to all the devices which also send core events. I'm going to document this soon.

Julien Blache: Fixing the debian-installer/Sven Luther situation

[For background information on the whole debian-installer/Sven Luther situation, please read the Debian wiki.] The whole debian-installer/Sven Luther issue has been running for months now, and has seen little to no progress. A number of DPL mediation attempts have utterly failed, and there’s just no authority whatsoever above the debian-installer people that could help settle the issue. I’m just not interested in discussing who’s at fault, as both sides are at fault for something or something else. Now, looking back, there is something that bothers me. It makes me sick, even. At the end of march this year, Sven lost his mother in very difficult circumstances, in the middle of the flamewar opposing him to the debian-installer team. He sent a private mail to Frans Pop which you can read on this wiki page explaining what was happening to him, and asking him to give him a break. Reading this mail, it’s pretty clear that Sven was in shock when he wrote it. It’s so obvious that you can’t miss it, it doesn’t take a psychologist to tell you that. Nonetheless, the bashing went on, and nobody cared about what was happening to him. Now, compare to what happened to dato. How did the DDs react to that ? They rushed to debian-private, both the mailing-list and the IRC channel, to get an update on his condition, for something like two weeks. In both cases, some people knew what was happening (in Sven’s case, others DDs knew what was going on too, Frans Pop wasn’t the only one). I just can’t explain why the reaction was different, and it really bothers me. I spoke IRL with Sven about the debian-installer situation. We rehashed most of what had been told already, and he mentionned the death of his mother just as he did mention it on the mailing-lists. He has been and still is very affected by what happened to his mother. Reading his mail to Frans Pop, it’s pretty easy to understand I think. The behaviour of some DDs in this flamewar, knowing that Sven was deeply affected by this event, is inexcusable. You really should be ashamed of what you’ve done to him. He needed the kind words from the Debian family, the same kind words the Debian family told to dato, his friends and family. It’s time to clear up the mess, folks.

Lars Wirzenius: Debian: Something Positive and vocal minorities

R.K. Mulholland, author of Something Positive, one of my favorite web comics, writes something that seems pretty relevant to Debian:
People assume most Debian developers are heavy-handed, pushy, intolerant bigots bent of dominating any other culture or idea and supplanting it with their own whims because, for the most part, the ones who speak up the most ARE heavy-handed, pushy, intolerant bigots bent on dominating any other culture or idea and supplanting it with their own whims. It sucks. It's horrible. And it's the what everyone of any faith, political idea, or lifestyle has to deal with. People always focus on the loud minority who ruins everything. And like any other group, the only way you can combat this is making your views and, in this case, your kindness and actual testimony louder than the hateful prattle of those hurting your beliefs.
Mulholland actually writes about Christians, but I took the liberty of substituting the words "Debian developers" instead. I wonder if I should reconsider my policy of shutting up and going away when people start quarreling or otherwise behaving badly inside Debian. Perhaps participating more actively in such a situation would be helpful, if only to make it clear that those most vocal do not always represent the majority. Mostly such participation should be to do constructive things: offering solutions to technical problems, pointing out good things others do. Sometimes it would have to be to help Debian make some of the very difficult decisions it needs to do. For example, what should the project do in the case of Sven Luther? This is a good example of a problem that Debian as a project is very ill equipped to handle. I'm not sure I will do anything about this, but now that it's two hours past midnight, I feel I should. When I wake up, I expect to regret this.

Next.

Previous.