Search Results: "will"

13 July 2007

Steve Kemp: In World War II the average age of the combat soldier was 26

Bootstrapping non-Debian distributions suck. The only available tool appears to be rpmstrap which quite frankly fails more often than it works. Since my xen-tools project needs to do carry out this kind of operation I've been pondering the idea of writing a tool which will install CentOS/Fedora/SuSE into a directory, in a similar fashion to debootstrap. If there's nothing out there that you can point to, then I think that will be my next project.

Ross Burton: Embedding Binary Blobs With GCC

For a long time I've wanted to know how to embed binary blobs into executables. This would be most useful for files like Glade and and UI Manager definitions, which are required for a given program to work at all but either cannot be embedded as a string literal (Glade) or can be but is annoying (UI Manager). I finally asked the Interweb, and Daniel Jacobowitz replied with some pointers. It turns out that doing this is remarkable simple. First, a caveat. This probably requires GNU ld, which may or may not be a deal breaker for many people. First, create a data file. Let's call it foo.txt, and put some text in it.
Hello, World!
Using ld this can be read in as a plain binary blob, and then written as a standard relocatable ELF object.
ld -r -b binary -o foo.o foo.txt
Now we have a standard ELF object with the data and some useful symbols defined. objdump will show you the contents.
$ objdump -x foo.o 
foo.o:     file format elf32-i386
Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .data         0000000d  00000000  00000000  00000034  2**0
                  CONTENTS, ALLOC, LOAD, DATA
SYMBOL TABLE:
00000000 l    d  .data  00000000 .data
0000000d g       .data  00000000 _binary_foo_txt_end
0000000d g       *ABS*  00000000 _binary_foo_txt_size
00000000 g       .data  00000000 _binary_foo_txt_start
Here we see 13 bytes of data, and a symbol which contains the address of the data. This is all we need to access it from a C program.
#include <stdio.h>
extern char _binary_foo_txt_start[];
int main (void)  
  puts (_binary_foo_txt_start);
  return 0;
 
Now if we compile this and link it against the generated object, we'll have a binary.
$ gcc -o test test.c foo.o
$ ./test
Hello, World!
Hooray! One small problem which alert people should have noticed: the string itself is in the .data section, which is read/write. For my use, I want it to be read-only data in the .rodata section so that it isn't copied for every instance of the application. As far as I know, this isn't possible with ld but objcopy will let us rename sections on the fly.
$ objcopy --rename-section .data=.rodata,alloc,load,readonly,data,contents foo.o foo.o
$ objdump  -h foo.o
...
  0 .rodata       0000000d  00000000  00000000  00000034  2**0
Excellent, problem solved. If you want to download this sample, I have a tarball. Many thanks to Daniel Jacobowitz for pointing out how to achieve this. Update: note that any data embedded in the binary like this won't be terminated with a NULL. This is obvious in hindsight, but due to luck my example still worked. There might be a way of asking objcopy to append a 0 to the end of the data, but if not always remember to use the start and end pointers or size instead of just the start, or append a NULL yourself before converting to an ELF. NP: (), Sigur Rós

Ross Burton: Dear Interweb: GCC and Arbitrary Binary Sections

Mono/C♯ has this nice feature where arbitrary files can be linked into the final binary, and you can programmatically access them. I'd like to be able to do that in C too, I'm sure it is possible, I just don't know an easy way. I know that if you have a section foo, then ld will create __start_foo and __stop_foo symbols which point to the start and end of the section, so all I really want is an easy way to get ld to use the contents of an arbitrary file (say, ui.xml) as a section. Anybody know how to do this? Update: thanks to Daniel Jacobowitz for giving enough clues to a working, and clean, solution. I'll blog this shortly. NP: The Sound Of A Handshake, cLOUDDEAD

Eddy Petri&#537;or: glest: a free 3D real time strategy game

After almost a year of working on and off on the package, glest is now in the new queue.

Glest is really a free 3D real time strategy game with amazing graphics and really interesting game play.

So maybe you're wondering why did it took me so long to package it. Well, glest is mainly developed on a Windows platform and GNU/Linux is the platform it was later ported to. So this came with some problems:
Since when I started the packaging work I was using a PowerBook G4 as my main machine I was upset that the game was little endian only, so I started working on a patch. I made an incomplete patch but I got stuck at some point. Time passed by and I replaced my laptop and I wasn't able to continue working on the patch. So I kind of forgot about it. Before debconf I decided is time to do the upload for little endian machines, add the endianess patch disabled.

During debconf I asked Tolimar to make an upload, and it turns out that for some reason I still don't know, the build resulted in a statically linked binary. I was amazed since I didn't recall doing any changes that might have triggered this. At some point I suspected that the build system is broken on other arches than i386 (my main machine is amd64) and halted. This until a few days ago Joey Hess added a comment in the ITP bug pointing out that the game is ok. After a couple of emails I realized that the static issue was just some strange temporary issue on my machine and now the package is in NEW.

So, that's my excuse. I hope that upstream glest issue get fixed. If not, I'll probably package glevolution, too.

12 July 2007

Julien Valroff: New mobile phone: Sony Ericsson K750i

K750i I have just received my new mobile phone: a Sony Ericsson K750i which I have chosen mainly for its price and multimedia features, but also because it has an internal modem, accessible via both bluetooth and irda. So far, I was already able to connect to the internet in GSM, will try GPRS tomorrow as I need to change my SIM card. libbtctl and gnome-bluetooth 0.9.0 were also released today. Updated packages have been uploaded to my unofficial repository (please read carefully the release announcement which explains these packages have been deprecated). I have also tried wammu for the first time, it will help me update my address book.

Matthew Garrett

The Canonical offices are ridiculously swish, with the Dyson hand dryers providing literally seconds of entertainment (and providing something of an aircraft taking off atmosphere).

In other news, I'm now a cube. Since I'm forced to admit that I'm (at best) in my mid-to-late twenties, there will be boozing at my place tomorrow (Friday) from 9ish. It's possible that I won't get there until 10 or so, but I'm sure you'll manage to have fun anyway.

Christian Perrier: Lazyweb mutt

Dear Lazyweb, Can you explain me why, since the last update of mutt in unstable, I no longer have the display of percentages of the mailbox's number of message being read while Mutt is reading a mailbox when I open it? This is kinda annoying on large mailboxes as mutt now just display the number of examined message headers while one has no way to know how long it will need to read the entirre mailbox. That's probably a weird new setting, but which one? I don't feel like reporting a bug about this but this is a minor annoying regression, indeed..:-)

Fabio M. Di Nitto: First SUN's LDOM install from archive: a full success!

Yet another master piece of work in cooperation with the Ubuntu kernel team and Super Davem. We finally got all userland and kernel bits and pieces into the archive to install Ubuntu Gusty in an LDOM guest. The installer works smoothly (except a bug i found in the partitioner and in software installar that are not sparc specific) and it is pretty fast too. Only netboot/netinstall is available at the moment but that's plenty compared to the knowledge people need to run this kind of infrastructure in it's early release stages. LDOM is not considered yet very stable and there are a bunch of workarounds required in Solaris to run Linux properly. I will post them sometime soon when I feel more confident that they will not break more than what they fix. It is really big satisfaction to see so many pieces falling together nicely in such short time. Well done everybody.

Adam Rosi-Kessel: Best Simple Local Screenscraping Service Ever

As I sit here waiting for my 8:23am train, which actually will never come, I just discovered http://www.wheresthet.com/ (”Where’s The T,” if you need it spelled out). This third-party site serves a no-frills, no tables, no graphics, no flash, sensibly organized list of MBTA interruptions. This is one of the best implementations I’ve seen of this sort of thing — absolute simplicity. I immediately added it to my cell phone bookmarks and Google Reader subscriptions. More information from the creator.

Lucas Nussbaum: Collaborative Maintenance

Stefano Zacchiroli blogs his thoughts about collaborative maintenance. He identifies two arguments/religions about it:
  1. it is good because duties are shared among co-maintainers
  2. it is bad because no one feels responsible for the co-maintained packages
And he says he stand for the first one. I’m not sure that those two positions really contradict. Sure, collaborative maintenance is a good thing, because it allows to share the load between co-maintainers, which often results in bugs being fixed faster. But collaborative maintenance creates the problem of the dilution of responsabilities, and the dilution of knowledge. In many cases, a single maintainer will have a better knowledge of a package than the sum of the knowledge of all co-maintainers. Also, sometimes, teams don’t work very well, and everybody start thinking that a specific bug is another co-maintainer’s problem. In the pkg-ruby-extras team, we have been trying different organizations over the past two years. We have now settled with the following: Stefano also raises the point of infrastructure issues caused by the switch to the team model. I ran into one recently. My “Automated mails to maintainers of packages with serious problems” are currently only sent to the maintainers of the packages with problems, unless someone has problems in both maintained and co-maintained packages (in that case, all problems are mentioned). I thought for a while about sending mails to co-maintainers as well, but that would mean sending more mails… I might try that and see if I get flamed :-)

Erich Schubert: Shaping your traffic for improved performance

Sometimes, putting up an arbitrary limit for your network connection can actually improve the performance.A typical setup will look like this: your computer is connected via 54-100 mBit to a router, which has a DSL line of let's say 2 mBit downstream and 192 kBit upstream (and then tons of other links).When you overload one of these connections, performance can go down a lot.The simples case how this can happen is when you upload data. 192 kBit are the weakest link here, and rather easy to fill up.What happens then is that your computer will start sending out data at his full link speed, until the buffers at the router are full and it starts dropping packets. TCP/IP will then adopt and - lacking 'ACK' packets - slow down sending data. It will likely still keep the send-buffer of the router full.Now if the router isn't very smart, it just keeps a first-in-first-out buffer. As long as you have just this single upload, you don't need to care. But if you have other connections, like a download, you do care.For your download to run at full speed, the sender needs to get those ACK packets from you. They're basically a "got your data, send more" kind of message. Really tiny packets, but essential for signaling.A simple trick you can use now is to limit your bandwith at the sending computer already. Since you're going to limit it just to the next link anyway it doesn't mean it will actually be getting much slower. But your network stack is smarter than the router's (probably). It can send out these ACK packets at a higher priority, so you end up with a better download-and-upload performance.If you know your network connection speed, just use it. Otherwise you can still measure it or guess it. I'm always going for 95% of the speed I see. You might want to limit it a bit more if you are sharing the connection with others.Now enough theory, here's what I use:
IFACE=wifi0
# setup ingress filtering
/sbin/tc qdisc add dev $IFACE handle ffff: ingress
# local network is unrestricted
/sbin/tc filter add dev $IFACE parent ffff: protocol ip \
  prio 10 u32 match ip src 192.168.2.0/24 \
  police conform-exceed ok/ok flowid :1
# incoming internet traffic is limited.
/sbin/tc filter add dev $IFACE parent ffff: protocol ip \
  prio 50 u32 match ip src 0.0.0.0/0 police \
  rate 1500kbit  burst 10k drop flowid :2
# outgoing traffic
/sbin/tc qdisc add dev $IFACE root handle 1: htb default 30
# local network is unrestricted
/sbin/tc class add dev $IFACE parent 1: classid 1:10 htb \
  rate 54mbit burst 15k
/sbin/tc qdisc add dev $IFACE parent 1:10 handle 10: sfq perturb 10
/sbin/tc filter add dev $IFACE parent 1:0 protocol ip \
  prio 10 u32 match ip dst 192.168.2.0/24 flowid 1:10
# internet traffic is limited.
/sbin/tc class add dev $IFACE parent 1: classid 1:20 htb \
  rate 160kbit ceil 196kbit burst 15k
/sbin/tc qdisc add dev $IFACE parent 1:20 handle 20: sfq perturb 10
/sbin/tc filter add dev $IFACE parent 1:0 protocol ip \
  prio 50 u32 match ip src 0.0.0.0/0 flowid 1:20
Long example, I know. The main reason is that I'm not limiting traffic to local computers. Furthermore, I'm also limiting my incoming traffic to use up at most 1.5 mbit of the 2 mbit connection, so my housemates will be able to use the internet as well (Debian mirrors send data fast - fast enough to kick them out of any online game they might be playing...).There is one important detail hidden in there: sfq. This stands for "stochastic fair queueing". It tells the network stack to basically send "one packet for each connection in turn". This way, the small packets needed for download or interactive SSH sessions will get out quickly even when doing a larger upload.It works great for me - I'm having a good download rate, using the 160 kBit upload limit completely (I don't want to completely fill up the 192k upload link either) and I'm actually writing this blog entry remotely via SSH. The lag when writing is okay, probably around 300ms. Without shaping, this wouldn't work this well.(And no: just using 'sfq' for your outgoing traffic is not enough, since the key scheduling is happening at the weakest link. So you have to limit your traffic shaping setup to be just below the actual weakest link.)

11 July 2007

Stefano Zacchiroli: uploaders vs maintainers

More Uploaders, Less Maintainers: Infrastructure Issues When yet another discussion about "is collaborative maintenance good or not?" starts on debian- lists, the average lurker can easily identify two arguments / religions:
  1. it is good because duties are shared among co-maintainers
  2. it is bad because no one feels responsible for the co-maintained packages
Of the two religions, I stand for the first one. More generally I share the long term aim of decreasing as much as possible the "ownership" of Debian packages; collaborative maintenance is just a tool to achieve the goal. In the meantime, I believe the second religion is supported also by technical deficiencies in some pieces of our infrastructure. In particular some of our developer tools artificially enforce a distinction among Maintainers and Uploaders where it wouldn't be necessarily needed. In the last few days I thought about some of them: Think about such deficiencies, I'm pretty sure we can spot and fix easily a lot of them in our tools. Update: Lucas: I agree that the two arguments do not necessarily contradict, that's why I (initially) called them arguments. Then I moved to "religions", it was an oversimplification: there are of course pros and cons of collab maint. My main argument holds nevertheless: several perceived cons of collab maint are due to artificial distinctions maintainer/uploader in our tools, thanks for providing yet another example ... I want more! :)

Martin F. Krafft: Creating a git branch without ancestry

Robin Rosenberg introduced me to the simplest method of creating a new git branch without any ancestors:
$ echo ref: refs/heads/newbranch > .git/HEAD
$ git branch
  master
[...]
$ git commit -m 'creating newbranch'
$ git branch
  master
* newbranch
This comes in handy if you want to maintain two separate components without any common files in the same repository. I am using it currently while experimenting with a new method of storing my home directory in git, which is still far from anywhere. I shall report once I reach a point of success or failure. NP: Rush: Moving Pictures Update: Johannes Schindelin taught me how to do the same without touching files in .git/:
$ git symbolic-ref HEAD refs/heads/newbranch
[...]
and also addressed the issue which would have all files already committed to the "master" branch now appear in the git status output as staged. This is because the index contains the full copy of a revision of a file, as it would be if committed at any point. git status shows the differences between what has been committed, what would be committed, and what is available in the working tree. Since we pointed HEAD to nowhere ("newbranch" does not yet exist), the index and what has been committed (nothing in this case) diverge, the files are still staged, and thus are scheduled to be part of the impending commit. The way to fix this is to remove the index:
$ rm .git/index
This may seem weird, but it works, because git recreates the index whenever you switch branches:
piper:~> git init-db
Initialized empty Git repository in .git/
piper:~> echo 1 > a; git add a; git commit -m.
Created initial commit e774324: .
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 a
piper:~> git symbolic-ref HEAD refs/heads/newbranch
piper:~> rm .git/index
piper:~> git status
# On branch newbranch
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       a
nothing added to commit but untracked files present (use "git add" to track)
piper:~> echo 2 > b; git add b; git commit -m.
Created initial commit 54ff342: .
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 b
piper:~> git branch
  master
* newbranch
piper:~> git checkout master
fatal: Untracked working tree file 'a' would be overwritten by merge.
piper:~> git checkout -f master
Switched to branch "master"
piper:~> git status
# On branch master
nothing to commit (working directory clean)
piper:~> ls
a
piper:~> git checkout newbranch
Switched to branch "newbranch"
piper:~> git status
# On branch newbranch
nothing to commit (working directory clean)
piper:~> ls
b
As you can see, the creation of the branch is a bit complex, but once you (forcefully) switched back to master, you can then freely switch between and commit to them.

Martin F. Krafft: Publishing git repositories

Despite a distributed version control system by design, git can just as well be used in a centralised fashion. When a user clones a git repository, git sets up the local clone such that it is aware of its origin. Let's have a look at the relevant lines in .git/config:
[remote "origin"]
  url = ssh://server/path/to/repo.git
  fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
  remote = origin
  merge = refs/heads/master
The "remote" stanza defines a remote repository with the nickname "origin". If the user calls git fetch without arguments, it will download all remote branches (refs/heads/*) and store those as remote branches with the origin/ prefix. Thus, the branch "big-fat-feature" in refs/heads/big-fat-feature on the other side becomes the remote branch "origin/big-fat-feature" (refs/remotes/origin/big-fat-feature). The "branch" stanza informs git about the default source for merges when the "master" branch is current. If the local "master" branch is checked out and the user calls git pull without arguments, it instructs git to fetch all branches (see above), then merge the remote "master" branch (refs/heads/master) into the current branch. I started a new project in git today and decided to go public after I had already made a few commits and created a number of branches. So I set out to learn a bit more about git internals and came up with two ways to publish the repository such that my local repository would also know about the remote side as if it had been cloned from the start. The documentation didn't leave me satisfied, so I had to try it all out. Being new to git, my first thought was to push/publish my repository to a public location, and so I did:
### assuming ssh://server/remote.git resolves to an empty, bare git repo
### and that we are chdir()'d to the local repository:
$ git push --all ssh://server/remote.git
$ git remote add origin ssh://server/remote.git
$ git config branch.master.remote origin
$ git config branch.master.merge refs/heads/master
$ git fetch
$ git merge master
$ git branch
  big-fat-feature
* master
  ponies
$ git branch -r
  origin/big-fat-feature
  origin/master
  origin/ponies
Another method then dawned on me, but it's not necessarily better. Instead of pushing, let's copy a clone over and then clone that once more:
$ git config core.bare true
$ scp -r .git server:/remote.git
$ mv  pwd   pwd /../OLD
$ cd ..
$ git clone ssh://server/remote.git
$ cd remote
$ git branch
  big-fat-feature
* master
  ponies
$ git branch -r
  origin/HEAD
  origin/big-fat-feature
  origin/master
  origin/ponies
This does almost the same, except for that origin/HEAD branch, but that's just a local symbolic ref (a "symlink") and can just be removed, really:
$ rm .git/refs/remotes/origin/HEAD
$ git branch -r
  origin/big-fat-feature
  origin/master
  origin/ponies
Now the only thing left is setting core.sharedRepository on the remote side to let git know how to handle the Unix permissions. And that's it. NP: Antimatter: Lights Out

Russell Coker: Questions During Lectures

An issue that causes some discussion and debate is the number and type of questions that may be asked during a lecture. In a previous post giving advice for speakers I suggested that questions can be used as a mechanism for getting a talk back on track if a nervous speaker starts presenting the material too quickly (a common mistake). This mechanism can be used by the speaker if they realise that things aren’t going to plan or by audience members who are experienced speakers and who recognise a problem. Due to this a blanket ban on questions during a talk will only work with experienced speakers who have planned their talk well. There are different styles of presentation favoured by different speakers. Some are determined by the nature of the topic (an example that I have seen cited is topics that are very contentious which would lead to a debate if questions were permitted during the talk), but for computer science I think that questions during the talk can always work well. To a certain extent the fact that code either works or doesn’t limits the scope for debate. Probably the major factor that determines the utility of questions is the size of the audience. If you have an audience of less than 50 people then a conversational approach can work, if you have less than 200 people then a reasonable number of questions can be accepted. But as the audience size increases above 300 the utility of questions approaches zero. If the majority of people who might want to ask questions are unable to do so due to lack of time then the value of allowing any questions diminishes. For the largest audiences there probably isn’t any point in having question time. Another major factor determining which style works best is where the speaker has had experience speaking. Most of my speaking experience is with less formal meetings (such as local LUGs) and in countries with an informal attitude towards such things (Australia, the US, and The Netherlands). A speaker who has primarily spoken for universities such as Cambridge or Oxford (which seem to have a very formal style and questions strictly reserved for the end) or who has come from a country such as Japan(*) where it’s reported that the audience are obliged to show respect for the speaker by being quiet will probably expect questions only at the end and may flatly reject questions during the talk. A speaker who has a background speaking for less formal audiences will expect a certain number of questions during the course of the talk and may plan the timing of their talk with this in mind. When I plan a talk for a one hour slot I plan at most 30 minutes of scheduled talking (IE covering my notes) expecting that there will be 15 minutes of questions along the way and another 15 minutes of questions at the end. Often with such plans my talks run over-time. Of course this means that people who have mostly had experience speaking to smaller and less formal audiences will find it exceedingly difficult to give talks to larger audiences. This may be an incentive for having more formal arrangements for LUG talks to increase the skills of speakers. The next issue is what level of contentious questions is acceptable. I believe that if you have a disagreement with points that the speaker is making (and have some experience in the field in question) and the audience is not particularly large then one hostile question is acceptable - as a speaker it’s reasonable to refuse to take any further questions from an audience member who has asked one hostile question. Another category of question is the challenging question (not to be confused with a hostile question), for example describing in one sentence what your business requirements are and asking how the topic being discussed will apply to that business requirement. One of the most useful questions I have been asked during a SE Linux talk was concerning the issue of backups of file security contexts, it was presented in a challenging way and the answer that I gave was not nearly as good as I could give now (the code base has improved over the last few years in this regard) - but I think that everyone learned something so that validated the question. In smaller groups there may be some heckling when the speaker is a well known member of the group, I don’t think that this is a problem either as long as it only consumes a tiny fraction of the time (maybe 20-30 seconds at the start). For larger audiences or for speakers who don’t know the audience well heckling is generally a bad idea. (*) When speaking in Japan I had a lot of audience interaction. I’m not sure if this is an indication of the Japanese culture changing in this regard, the fact that translation problems forced some interaction, or the audience was showing respect for the Australian culture by asking questions.

Jeff Bailey: How many O's?


img_8498.jpg
Originally uploaded by jbailey
Well, I've hinted at it and told enough friends, I should get around to posting it: As of the end of this month, I'll be moving on from Canonical. By my calculations, I was something around employee #30, the first support tech, and I've had a great chance to build the support organisation up to where Linux Format magazine rated us as tied with RedHat ahead of Novell in this August's issue.

So what's up?

Well, those of you following along might remember a cute little bundle of joy entering my life. A couple of months in, I've realised that I can't stay on top of being with him and growing a 7x24 operation at this critical time in Canonical's growth. I'll be taking the month of August to be with Angie and Leif, and in September will start a new job with Google in the Open Source Program Office. I don't know the details of what I'll be doing there (The Google Omert , as one friend called it... *g*), but Google as a company is well aware of what happens with brand-new parents and the mad readjustment of priorities.

Angie and I are currently selling our place in Montr al in prep for moving to San Francisco at the end of August. I want to make sure I see people before we go, and if you're interested in buying the place, give us a call. =) Also, if you're in the Bay Area, a vegan, a parent, into Yoga/fitness, speaking French, etc., we'd love to meet you for tea sometime!

Ross Burton: Pimlico and Maemo Synergy Overdrive!

We've had Dates on Maemo for a long time now, but now and again people asked for Contacts. We never really bothered to build Contacts because it isn't ported to Maemo, so doesn't fit in to the environment. Well, yesterday I found myself with a clean Maemo 3.2 Scratchbox (quite unusual I assure you) so thought I'd build a package anyway. It's not integrated into Maemo, but it's in our repository now. Hopefully this will cause a fanbase of programmers to spontaneously appear who will help us develop the next generation of Contacts, which is modular and thus far easier to port to various platforms. Along with my recent Tasks on Maemo announcement, all of Pimlico is now available for Maemo. I'll have a N800 with the full suite on at GUADEC if anyone wants to see it. NP: This Too Shall Pass, Breakage

Eddy Petri&#537;or: R U a programmer or a hax0r?

I have a few questions:
If you are programmer you will know what you should have answered...

Update: this post was tagged as "rant" and the rant was about a badly written and too rigid code; this was not about trying to tell the future and implementing now what you might need later

Mart&iacute;n Ferrari: Introducing Pancut n / GSoC status update

Hi, as everybody else, I'm blogging about the status of my GSoC project, which now has a name: Pancut n. Pancut n is a lintian-like tool to check ISO images generated by debian-cd and friends. It aims to support CDDs, and even Debian-Live CDs. In case you're wondering, the name is a stupid pun about avoiding (skin) burns and unusable debian CDs (Pancut n is a vintage lotion for burns in Argentina, and I think most joungsters won't even recognise the name). In any case, it sounds good :-). Since it has a name, also it has a alioth project page, SVN repository and mailing list. If you want to try it out, just checkout the repository and run:
$ ./pancutan <list of iso files> If you set the environment variable DEBUG to a number greater than zero, you get debugging info. Its dependencies are currently libyaml-perl (or libyaml-syck-perl for faster operation), fuseiso9660 and an user which fuse permissions. Of course, as I've been working in the architecture, there aren't many tests. But you can try the powerpc business card ISO for which pancutan currently detects that it's too big for a business card cd:
$ ./pancutan /media/IOMega/mirror/isos/debian-40r0-powerpc-businesscard.iso
E: image-too-big
 - The ISO file is too big for the target media
 + 73207808
About the architecture. The general idea is that a directory is scanned for modules, "requires" them, and extracts metadata embedded into them (I'm still thinking that this can be separated to delay compiling of modules when they're needed, but I haven't decided it yet). From that metadata, tasks and tags (errors and warnings) definitions are loaded. Also a lot of internal sanity checking is performed. There isn't any fixed order of execution, it's constructed based on the dependencies the tasks define. And it has been thought from the start with parallelisation in mind, although that functionality hasn't been written yet (I'll do it during this week). I have written a draft spec for the plug-ins in the wiki. I have to properly document that, but you can get an idea from it. At this point, I'd like to other, more experienced people take a look at it. So feedback is very welcomed, specially from the people that will use the tool!

MJ Ray: North Somerset Rubbish Targets

One of my examples to explain "the tragedy of targets" used to be councils meeting recycling collection targets by collecting the recyclable waste, then putting it in landfill because that was cheaper than actually recycling it. That's bad because it makes a lot of extra work for everyone, but only meets the collection target in fact, not in spirit. I stopped using that example because I thought it was too incredible and I didn't have a good reference to support it. So imagine my surprise to see a report in the Weston Mercury saying:
"If Veolia does not have enough manpower it will send out a green waste lorry, or a domestic refuse lorry which usually picks up black bag rubbish, to pick up both at the same time. [...] The staff will just take it for granted that green waste is in the green lorries and domestic waste is in the blue lorries."
This is bad on many levels, even worse than my old example where recycling-ready waste was knowingly tipped into landfill. There's green waste contamination and false collection statistics, for starters. The article continues to report that Cllr Carl Francis-Pester, North Somerset Council's executive member for environment, said:
"We are carrying out an immediate investigation into these allegations which we take very seriously indeed. This investigation will include urgent discussions with the contractor to ensure they are fulfilling the contract we have with them in the correct manner."
There doesn't seem to be any information about this investigation on North Somerset Council's web site. And if Veolia have spotted a loop-hole in the contract, then what? Even if they haven't, the council has to watch solely-profit-led contractors like hawks because if you give them a chance to cut costs (and therefore increase profits), they will try it. That is the hidden cost of outsourcing, not covered by the Best Value Indicators and other privatised council jargon. Incredibly, the councillor continues with:
"Thanks to the residents of North Somerset we have increased our recycling rate from 20.5 per cent to 30.8 per cent in the last 12 months."
If the allegations are true, then no, we haven't, because the statistics would be as full of toxic rubbish as the green waste lorries. Have private rubbish collectors been doing this elsewhere?

Next.

Previous.