Search Results: aup

24 May 2009

Bernd Zeimetz: howto set android developer device permissions with udev

As there're several, more or less well working howtos about creating udev rules to allow access to the USB debug devices of Android phones out there in the wild, I decided to write my own one. It works at least for Debian Testing/Squeeze. The udev rules file I provide here works at least for the HTC Dream models (aka T-Mobile G1 and Google Devphone). As a computer may be used by more than one user, I've decided to create a group called androiddev. Members of the group will be allowed to access the debug interface. Running (hint: become root first) addgroup --system androiddev will create the group for you. Add your developers to the group with adduser username androiddev (of course replace username with the user you'd like to add) and we're ready to configure udev. Open /etc/udev/android.rules in an editor and add the following lines:
SUBSYSTEMS=="usb", ATTRS idVendor =="0bb4", ATTRS idProduct =="0c01", MODE="0660", OWNER="root", GROUP="androiddev", SYMLINK+="android%n"
SUBSYSTEMS=="usb", ATTRS idVendor =="0bb4", ATTRS idProduct =="0c02", MODE="0660", OWNER="root", GROUP="androiddev", SYMLINK+="android%n"
Now we need to link the created rules file into /etc/udev/rules.d ln -s ../android.rules /etc/udev/rules.d/90-android.rules and tell udev to reload the rules: /etc/init.d/udev reload That's it. Don't forget to re-login to make sure your new shiny group will show up! Now have fun with adb and fastboot :) Thanks to TauPan from #debian/freenode.net who gave me the idea for this blog post.

23 April 2009

Romain Beauxis: Lastfm no longer free as in free beer (and some bits about xml in OCaml)

Lastfm no longer free as in free beer As I was trying move the code of ocaml-lastfm [1] from the unmaintained xml-light [2] to xmlm [3], I discovered that it now fails to request track in anonymous mode. Then, I went on the lastfm [4] site, and discovered that now I cannot find any full content available for anonymous users. Some more researches and I found this [5]:
Today we are making the changes to the radio that were previously announced here. This means that from today, listeners to Last.fm Radio outside of the USA, UK and Germany will be asked to subscribe for 3.00 per month, after a 30 track free trial period. In the USA, UK and Germany, where it's feasible to run an ad-supported radio service, there won't be any changes. Everything else on Last.fm (scrobbling, recommendations, charts, biographies, events, videos etc.) will remain free in all countries, like it is now.
JPEG - 42.5 kb
Alcool ! Voil l'ennemi.
Poster by French painter and missionary Fr d ric Christol (1850-1933) warning of the dangers of absinthe and other alcoholic drinks.
Although I will not comment this with the same violence as in the comments of the above message, this is not a good news at all. I totally understand how it can be difficult to find financial resources for this kind of business, and how complicated it can be after few years to maintain an activity that initially was breaking new and attracting investors. However, given the current global [6] propaganda [7] campaign [8] that is organized [9] by the major music companies, I do not believe this decision has only to do with lastfm's financial resources. In particular, also the legality of Deezer [10] was challenged by universal [11] such that they had to require registration [12] and also limit drastically the available titles. The current situation is now really becoming worse and worse. Not only the music companies are trying to push for dangerous laws for the civil rights while pretending to fight against illegal music sharing, but also they are trying to shutdown all the new competitors that were successful in doing exactly what they refused to do during the same time. All of this is just simply pathetic, and I strongly hope there will soon be an end to this, which will surely mean for these companies adapt or perish.. Or perhaps they plan to impose their restricting and dangerous laws in any country in the world ? Another remark about all this is that it clearly demonstrate the importance of having the right to copy and store for your own usage any copyrighted material. Indeed, these are not only products but also artistic productions, and for this reason it is important to be able to save them in some place in order to not loose track of it if the streaming company was to be shutdown, as it seems to be the trend now.
JPEG - 71 kb
Viktor Oliva: The Absinthe Drinker.
The original painting can be found in the Caf Slavia in Prague.

Moving from xml-light to Xmlm The other part of this post is about moving from xml-light to xmlm. This is in fact very easy, and should only be a matter of adding a piece of code like this:
type xml =
Element of (string * (string * string) list * xml list)
PCData of string

let parse_string s =
let source = String (0,s) in
let input = Xmlm.make_input source in
(* Map a tag representation in xmlm to
* (name, attributes list) where attribute = string*string. *)
let make_tag (x,l) =
(* Forget about the uri attribute *)
let l =
List.map (fun ((_,y),z) -> (y,z)) l
in
snd x,l
in
let rec get_elems l =
if Xmlm.eoi input then
l
else
match Xmlm.input input with
El_start tag ->
let elem = get_elems [] in
let (name,attributes) = make_tag tag in
get_elems ((Element (name, attributes, List.rev elem)) :: l)
El_end -> l
Data s ->
get_elems ((PCData s) :: l)
Dtd _ -> get_elems l
in
let elems = get_elems [] in
Element ("", [], List.rev elems)
This is a very simple code that surely needs more fixes, but starting from that, you can parse a string into an equivalent representation of the xml data, and then use it as before in your code..


[1] Ocaml-lastfm: http://www.rastageeks.org/lastfm.html [2] Xml-light: http://tech.motion-twin.com/xmlligh... [3] Xmlm: http://erratique.ch/software/xmlm [4] Lastfm: http://www.last.fm/ [5] "Radio Subscriptions": http://blog.last.fm/2009/04/22/radi... [6] "New Zealand: safe from Big Music. Or is it?": http://www.p2pnet.net/story/19074 [7] " La Quadrature du Net discr dit e aupr s des d put s anti-Hadopi": http://www.numerama.com/magazine/12.... Link is in french. It explains how, after filling a so-called petition with hundreds of signatures from employees presented as artists, or artists abused by the presentation of the content, these companies complain about the "totalitarian methods" used to verify the validity of the signature, which were simply based on the public available information on these names on the web, while they propose a system that would automatically cut the internet access to probably 1.000 people a day in France... [8] "Faux proc s : Les pirates paient": http://www.ecrans.fr/Faux-proces-Le.... again, in french, the article reports a Danish study that prove once again that people who tend to download a lot of music are also much more likely to spend their money in the music business, being concert, records or else.. [9] ""Three strikes" for Ireland - Eircom, music industry settle filtering case": http://tjmcintyre.com/2009/01/three... [10] Deezer: http://www.deezer.com/ [11] "Universal Music challenges the legality of Deezer, a free streaming website": http://french-law.net/universal-mus... [12] "Now Deezer Required Registration": http://forums.techarena.in/technolo...

19 January 2009

Gunnar Wolf: About the recent events and possible outcomes in Israel and Palestine

Several friends, from different groups and backgrounds and with different points of view regarding the current war in Israel (and regarding the Arab-Israeli conflict in general) have asked me for an explanation on what is happening there, what is (my view of) the real conflict, its causes... and any possible answers. And yet I am quite far from being an authority, I do want to write something about it. Be prepared, as this post is quite long.
And yet, after writing frankly a lot more than what I expected... It is by far not enough. I have still much more to add, but I have to say "stop" at some point. So, here you have it: My points of view, as well as some explanation on why are we standing where we currently are.
I am writing this based just on my personal experiencie and, of course, my personal point of view. Furthermore, I wrote a good part of this text while riding a bus, with no network access, so I am offering very few references - In any case, it will allow me to make much more progress. References always take as much time as the text itself! About me Why am I writing this? Why do people ask for my opinion? I must start by explaining who I am, so the rest of this makes sense. I am a Mexican Jew. That means, I was born in a Jewish (albeit secular) family, and grew up in an environment with general Jewish culture. My direct family (say, my parents and brother, and to a lesser degree my closest cousins) are not at all religious, I'd even venture to say most of us are complete atheists. Yet, besides the cultural belonging (which is a mixture of a Eastern European culture with lots of Idish words and dishes and general humor), my family has a strong national identification - In other words, I grew up in a fully Zionist environment, which traces back to Poland.
My grandmother was member of Hashomer Hatzair in Poland, since the early years of its existence, late 1910s and early 1920s. What is it? To make it short, a Zionist Socialist, Kibbutzian youth movement. It has many similarities (and somewhat stems indirectly from) the Scouts many of you will be familiar with, but -obviously- has a way lengthier agenda. And, yes, nowadays I feel it is somewhat out of reach with the current state of the world - It was founded in 1913, and only slightly adjusted its principles since then.
I will talk more about Hashomer later on.
My grandmother arrived in the late 1920s to Mexico, for familiar and economic reasons, but still dreamt about living in Israel for a long time. As they grew up, first my uncle joined Hashomer in Mexico in the late 1940s, when it still pursued a very much Soviet-style ideals for Israel (one of the core points that changed during the 1950s); both my father and my mother joined in the late 1950s (in fact, that's where they met). My cousins and myself were very active in the 1980s and 1990s.
The Iszaevich family has something very unusual, I'd say, engraved in our genes. We live very deeply our ideologies. That's the only explanation I can find to the way we all have led our lives. I won't go into the other family members' details, but just into mine: I was fully convinced of all we taught to our younger members and what we discussed among ourselves. I am among the very few people who really learnt Hebrew at my school, and that was only because I really cared - I know some people that just after 12 years of pseudo-learning could maybe utter a few phrases.
After finishing high school I went with my Hashomer group, together with people my age from other similar-minded Mexican Zionist youth groups, to live and learn for a year in Israel, on what is usually known as shnat hajshar - A year to get ready. To get ready to what? But of course, to come and give back go the younger groups of the movement, and finally go back to Israel and settle there definitively. I came back to Mexico, and after one year I did the only thing that was logical: I became an Israeli and went to live to a kibutz - Zikim, a beautiful place just between Ashkelon and Gaza, very near the sea shore. It was a beautiful period in my life, and I really enjoyed it - But it didn't last for very long - I quickly grew to hate the Israeli society at large. A society full of rage, of hatred. Not just between Arabs and Israelis, as many would think from the outside, but between religious and seculars. And between immigrants and locals. And between leftists and rightists (in several dimensions, as it is one of the countries where you can most easily be a economic leftist while being a political rightist - a complex society it is). A society full of disrespect and intolerance. A very hypocritical society. And one of the things that most shocked me: I wanted to live in a society of proud of its existence, that's what I had learnt Israel was - But Israelis aspire and dream of being anything else (and mostly US-Americans) in a way that made me sick, more than anything I had previously seen in Mexico.
I loved the life at the Kibutz, and I loved being an agricultor, doing hard work every day and literally getting the fruit of it. However, I cannot live isolated to a 300-people universe - At least once a week you have to go to the city if you don't want to become insane. And I could not stand the sick Israeli society.
Anyway, to make things short: After six months as an Israeli, I came back to Mexico. I went through a long period of finding myself, as I could not uphold anymore my Hashomer ideology (if I am not going to live by it, how can I continue teaching it?). Many people do anyway, but for the first months, where my Hashomer work was basically all of my life, I felt really uncomfortable. So, in short, I severed all of my relations to the Jewish community, and even denied for a long time my Jewishness until I found a (I think) better balance.
Today I am at peace. But anyway, I wanted to talk about myself in the critical period that marked me in this regard: The 1990s. Enough, lets get down to business. Zionism 1870-1920 Many people argue that the Jews invaded the Palestinians homeland - And yes, nowadays I cannot counter this. But we cannot judge what happened then based on what we see now.
Modern Zionism started around the 1870s. The Jewish history is full of pogroms and persecution, in different countries all over Europe - And a group of young people decided the only solution was to build a place to call their own. And yes, this was full of idealism and in no small part the foolishness of youth. For several centuries and up to 1920, all of current Middle East were provinces of the Ottoman Empire. Before Zionism began, the population of today-Israel was very sparse, not more than 400,000 people - up to 5% of them Jewish, around 10% Christian Arabs, and the remainder, Muslim Arabs. Of course, the low population was mostly because the country was mostly hostile - A desert in the South, mostly swamps in the North, and some minor towns mostly in the hills. It was a mostly forgotten province, away from the central Turkish rule, and there had been no frictions with the local population. It was a nice place to go, thinking -again- as a fool youngster, or as an idealist. They said, lets take a folk without a land to a land without a folk.
The number of accomplishing Zionists (this is, people who actually went to Israel instead of just talking about doing so) was not high during the first decades. But towards the 1890s, it gained critical mass. The political Zionist movement was born, with Theodor Herzl as a leader, and they started pushing -politically- for different governments to concede a territory to Jews. They went to the Turks, and didn't really get much echo. Went to other colonial powers of the time, and got unfeasible promises with no real backing (i.e. Birobidjan in Eastern Russia, Uganda in Africa)... And, as it happens in strongly ideologized movements, the movement started splitting into different groups with slightly different positions.
And no, I am not talking about the People Front for the Liberation of Judea and the People Judean Liberation Front, but I very well could. Sometimes the differences are as ridiculous as that. But hey, I take that most of my readers are acquinted with the Free Software issues, right? Think BSD vs. GPL vs. OpenSource. To give a broad idea - Only in Mexico City, with a very small Jewish community (~30,000 people), in the mid-1990s we had over 10 such movements, with 50-150 youngsters attending each. And even though some were local, and even though some very important ideologies are not represented in this country, they are all different enough to exist as separate entities. British Mandate The Ottoman empire was divided after the first World War. Its possesions in Europe became independent states, while in Asia (and Africa, if you take the semi-independent Egypt and part of Sudan into account) they were taken over as colonies or protectorates by France and the UK - Evidently, attempting to secure a long-term dominion over the area. In some aspects, they failed. In some aspects, they were (and still are) tremendously successful. The division of people by setting arbitrary boundaries has led to countries sustainable only by force and a harsh rule (such as Iraq, Lebanon and Syria), or doomed to poverty (and thus submission) due to lack of natural resources (as Jordan). Focusing on Israel/Palestine, the UK entered the area by making mutually incompatible promises to arabs and Jews - i.e. the Hussein-McMahon letters and the Balfour declaration, both ambiguous enough to lead to... Well, today. The UK rule was disastrous to the region, both in giving (and taking away) power from all sorts of puppet regimes, and swiftly going away as soon as things started looking too complicated. Yes, typical colonialism.
So, while up to the 1920s there was no real animosity between Arabs and Jews (as i.e. the Faisal-Weizmann agreement shows), during the next decades the seeds of hatred started growing, from both sides.
Many people still quote the 1947 partition plan as the direct antecedent towards Israel's real existence - That was not the first partition plan that existed. Ten years earlier, the Peel commision suggested a similar partition involving forceful population transfer. And many people see the separation of Transjordan (now Jordan) from Palestine in 1922 as a first partition. It is understandable that both partition plans (much more the 1947 than the 1937 one) were accepted by Zionists: Going from having nothing to having something (and against all odds in the environment they lived) is acceptable.
From the Zionist side, two main groups rejected the partitions: The right-wing and religious groups, insisting that the whole of the Mandate should become Israel, and the left-wing groups, which advocated for a single, bi-national state, with equal rights for all of its population. Go over and read this last link, as it was quite interesting (to me at least) to see how this solution has kept existing and regarded by (relatively) many people, and has many interesting links. 1948 onwards: Where did the refugees come from? The November 1947 partition didn't exactly translate to a planned, smooth Israeli independence - It led to six months of revolts (basically, a civil war). By mid May, the UK government and troops abandoned the territory, and one day later, Israel declared its independence. And, of course, all neighbouring countries (and Iraq) sent their troops to invade Israel. The war lasted for over six months (cease-fire was signed in January 1949). There was an intense Arab campaign indicating the armies would enter Israel and devastate it, leaving no stone in place, indicating Arab population to temporarily leave the Jewish-destined areas. The war, they said, would not take more than a couple of months, and they would be able to go back home.
Only that... When the war ended, the results were far from what the Arab governments expected. Not only Israel continued to exist, but it conquered important territories.
Of course, the Israelis were not innocent from said exodus: During the 1947-1948 civil war, and the independence war, some of the existing so-called self-defense forces (some of them were really defensive, while some were quite aggressive, even terrorist) attacked Arab villages in strategic or predominantly Jewish areas to prompt them to leave - yes, what we today call ethnic cleansing.
I had (in my head) the number of 650,000 Arabs (from a total of slightly over a million) fleeing to neighbouring countries. Wikipedia states that it is somewhere between 367,000 and 950,000. A similar number of Jews were expelled from Arab countries, many of which arrived to settle at Israel (and many others went elsewhere - For instance, a good part of the Mexican Jewish community is from Syrian origins - Many of them fleed in those years). Israel didn't accept back the (relatively few) Arabs that requested to resettle, as they were seen as hostile population - but neither did the countries that "temporarily" accepted the Palestinians accepted them as citizens. The Palestinian refugee camps today, mainly in in Lebanon, Syria, and the occupied territories held by Israel have terrible living conditions, and its population -despite living there for over 60 years- have no civil rights at all. Note that I'm omitting Jordan here, although it has several camps as well, as their situation is way better.
The Arab population that didn't leave did receive full Israeli citizenship. No, their living standards are not up to level with the average Israeli. The country and the society do have a sensible degree of racism and segregation. But the situation is nowhere as terrible as it is in the camps.
The areas which were originally to become Palestinian and were not conquered by Israel -this is, current-day West Bank and Gaza- bacame respectively Jordan and Egyptian territory. While Jordan did fully extend its soverignty covering the West Bank, Egypt didn't - Gaza is, since 1949, occupied military territory. Gaza, among the most densely populated areas in the world, has had their inhabitants under military rule ever since. When Israel returned the Sinai after signing the peace treaty with President Sadat, Egypt didn't accept Gaza back - And that's where today's greatest problem is born.
Now, Israel conquered those territories in 1967, along with the very sparsely populated Sinai and Golan. For the first ten years, the territories were basically only administered (yes, under a military rule). In 1977, with the first right-wing Israeli government, an extensive settlement policy began (and led partly to today's seemingly unsolvable situation). In 1980-1982, Israel withdrew from the Sinai. In 1981, Israel claimed full soverignty over the whole of Jerusalem and the Golan. In 1993, the "Oslo Agreement" was signed between Israel and the PLO, and it seemed we were heading towards a bright future. I lived in Israel between 1994 and 1996 - Yes, the most hope-filled period in the country's life.
Since 1996, I have tried to keep up to date with the country's evolution. All in all, even if I won't live there again, it is a country I learnt to love, a society I have long studied (even if in the end I did include many references, I wrote most of this text just off the top of my head, with the data I remember - so it might have several big errata). And yes, I keep the political stand I had 12 years ago: The only solution is to dialogue, to treat the current enemies -and not only their governments- with respect, recognizing their dignity and right to life, to self-determination. Only then we will change the status quo. How not to fight hatred Since 1993, the dream of peaceful coexistence seems to have faded. What we saw during the past three weeks, along to what we saw in Lebanon in 2006, is plainly a gross mistake if the goal is to achieve good, lasting peace.
Try to imagine how could life in Gaza be, even in the total absence of Israeli attacks. Just to set some numbers first: The Gaza strip hosts almost 1.5 million people on 360 km . When I lived in Israel, I was constantly surprised at how small a country it is - Israel tops at 550Km North to South, 150Km east to West (it is amazing, almost wherever you stand, except in the middle of the Negev, you can see the country's borders. Yes, I recognize as the border the so-called Green Line); over half of the territory is a desert, and it hosts seven million inhabitants. And it is hard to imagine how that country can be economically viable.
I do not find it feasible to imagine Gaza and the West Bank integrating a single country, and not only because they are separated by ~40Km, but because they are so sociologically different. People in the West Bank, yes, live opressed under military rule and subject to a much more constant, more visible apartheid-like state (as the territory is truly sprinkled with Jewish outposts which many Israelis refuse to recognize as their own, but still, which have incredibly higher living standards). The best land has been taken away from them, yes, but they have some space between cities to have some farming, to communicate, to... Breathe. Besides, West Bank inhabitants -even those in refugee camps- have much better living standards than anybody in Gaza. It is still an overpopulated area, but not nearly as much as Gaza.
Gazan population have been driven towards extremism. And yes, there was a civil war between Palestinian factions, as the world views between both populations are completely different - However hostile a Jenin inhabitant can be towards Israel, he does not lead the life -if it can so be called- you see at Khan Yunis.
But back to Gaza... What Israel is doing (and not only during this military operation terror campaign is wrong, from any rational point of view. Israel wants Hamas to become weaker? Then don't drive the population into supporting them!
Palestinians started giving over 50% of their support to Fatah (ex-PLO), and under 20% to Hamas. That was less than 15 years ago. However, Fatah has shown to be corrupt and inefficient at building infrastructure and improving life conditions, ineffective at negotiating a permanent agreement which secures dignity and sustainability to their people. Hamas stands as a religious, righteous organization. There are no serious corruption charges against any Hamas leaders. Hamas is clearly still at war - They didn't subscribe any peace agreement so far, and their stated #1 goal is to build a Muslim State in the whole of Israel. And the Hamas movement -like Hizbollah in Lebanon- has built quite a bit of infrastructure in the areas they control - Mainly housing. Yes, housing where they mix their own offices, many will accuse, getting human shields for free. But still, they are benefactors to a dehumanized, pauperized population.
I find it obvious that, if living conditions were at a basic level in the region, support of Hamas would decrease. Even more, of course, if they improved due to Israeli support. Israel controls this territory, so it is responsible for the well-being of its population, like it or not. And Gaza is simply too small and low on resources to survive by itself.
I was a bit surprised to find mention -although very brief- of a three state solution - And yes, this is close to what I would expect as a viable outcome. It is clear that Israel will not ever grant full citizenship to the Palestinians, as they would -euphemistically speaking- challenge the Jewish character of the State. Dropping the euphemism, Israel relies on apartheid in order not to become an Arab majority country. I might have some numbers wrong, but AFAIK, there are ~7 million Israelis, 20% of which are Arab citizens (which means, 1.4 million Arabs and probably 5 million Jews, with many other minor denominations for the difference), and ~4 million Palestinians live in the territories. Today, the country is already predominantly Arab, or at least is close to being so. So, Israel should permanently, formally disengage from all of the occupied territories. And in order to ensure violence stops, start a comprehensive, unconditional, long-term aid program. Start with giving them autonomy to regain their sea, as the Gaza port has long been closed. Allow the airport to operate again. Instead of bombing tunnels in the Egypt-Gaza borders, allow Gaza to trade with Egypt - Perhaps even to integrate territorialy, if the conditions are met. Treat their people with respect, and help them ease the terrible situation they have lived for so many decades - and then, undoubtely, terror will stop.
The West Bank? Possibly it could become a Palestinian state by itself. Possibly, it could integrate back to Jordan. That would be up to Jordans and Palestinians to decide. Of course, Jordan has already a large segment of its population defining itself as Palestinians, which counts both for and against. So, I won't venture into this supposition.
But anyway - Back to what prompted me to write this text -yes, a very or maybe even too long text - I hope somebody even takes the time to read it!- is to explain what is my point of view on the current situation, and why.
Today, a cease-fire was announced, after 23 days of murder and destruction. I sadly do not hold very high hopes for it to be lasting, much the less to be enough, to lead to what they call a de-escalation of the conflict. The most I can currently do is to voice my opinion, and hope that mine is just one more voice pointing to a sane solution, to a permanent, dignifying way out, for all people involved. Every people has the right for survival and for safety. We cannot deny this to any others. And certainly, we cannot expect anybody not to fight for their right to live.

28 November 2008

Russell Coker: Leaving Optus

Today I phoned Optus to disconnect my Internet service. Some time ago I got an Internode [1] SOHO connection. This gave me a much faster upload speed (typically 100KB/s) compared with Optus having a maximum of 25KB/s. Also Internode has better value for large data transfer (where “large” in Australia means 25GB per month) and I get a static IP address. I also get unfiltered Internet access, Optus blocks outbound connections to port 25 which forced me to ssh to another server to test my clients’ mail servers. But the real reason for leaving Optus is based on events two years ago. When I first signed up with Optus four years ago my contract said “unlimited uploads“. What they really meant was “upload as much as you want but if you transfer more than 8KB/s for any period of time you get disconnected“. They claimed that running a default configuration of BitTorrent was a DOS (Denial of Service) attack (the only part of their terms of service that even remotely permitted them to disconnect me). So I was quite unhappy when they cut me off for this. What really offended me was the second time they cut my connection. I had been running BitTorrent on Friday and Saturday, and they cut my connection off on Wednesday. Once it was determined that the issue was uploads we had a bit of a debate about when my BitTorrent session was terminated, it was my clear memory of using killall to end BitTorrent during a commercial break of a TV show on the Saturday night vs the Optus idiot claiming they had a record of me doing big uploads on the Sunday. But I let the help desk person think that they had won that debate in order to focus on the big issue, why large uploads on a Saturday (or a Sunday) should result in a loss of service on Wednesday (three or four days later). They said “it was to teach you a lesson“! The lesson I learned is that it is best to avoid doing business with Optus. I didn’t immediately cancel my contract, if you have both phone and Internet service through Optus they do offer a reasonable deal (there are a variety of discounts that are offered if you have multiple services through them). When discussing this matter in the past it had been suggested to me that I try appealing to the Telecommunications Industry Ombudsman etc. However I didn’t do this because I was in fact breaking the Optus acceptable usage policy for most of the time that I was a customer. When I signed up their AUP prohibited me from running a server and from memory I think it had a specific example of a shell server as something that should not be done, it now prohibits running any automated application that uses the Internet when a human is not present (which presumably includes servers). I’m pretty sure that my SE Linux Play Machine [2] met the criteria. While I’m reviewing Optus service I need to mention their mail server, here is the summary of the Optus anti-spam measures in protecting my email address etbe@optushome.com.au in September (other months were much the same):
131 emails have been sent to your Inbox.
52 of these emails were identified as spam and moved to the Spam Folder.
39% of your email has been identified as spam. The email address in question only received legitimate mail from Optus. This meant that I received between two and four valid messages a month, the rest were all spam. So of the 79 messages delivered to me, at least 75 were spam, and Optus blocked less than half the spam. But to be fair, given that the Optus mail servers are listed on some of the DNSBLs it seems reasonable for them to be lax in anti-spam measures. I wonder whether it would be reasonable for an ISP of Optus scale to run the SpamAssassin milter on mail received by their outbound relays to reject the most gross spam from customer machines. But Optus are good at some things. The download speed was always very good (I could receive data at 1MB/s if the remote server could send that fast). Also their procedures for account cancellation are quite good. The guy who took my call offered to transfer me to the complaints department when I mentioned how I was “taught a lesson”, he also offered me a significant discount if I was to continue using the service. In retrospect I should have had that conversation six months ago and had some cheap service from Optus before getting rid of them. Getting the account terminated happened in a couple of hours. It was so quick that I hadn’t got around to transferring my Play Machine to my Internode account before it happened, so I had a few hours of down-time.

10 July 2008

John Goerzen: My DNS happiness is complete

I have been using Gandi as my preferred register for some years now. They have probably the most customer-friendly AUP out there, are reliable, and good decent folks. I have liked everything about them.

Except the fact that they don't have whois privacy. But now they do! Woohoo! They did have whois spam protection all along, but your address and phone number was visible to everyone.

Whois privacy services are something that you have to keep a close eye on. What you want is for your name to still show up in the public whois database, but just nothing else. Some whois privacy services put *their* name there, which means technically they own the domain. I wouldn't trust that. Gandi is better about it. Your name, their address and phone number.

Of course, you still have to give Gandi your real contact info, and there are some situations in which it will be revealed. But all in all, I am very happy to see them doing this.

I had looked at other registrars that provided whois privacy, and never liked them for various reasons. Many happened to also have quite restrictive terms of service (hello Dynadot), maybe were good people but had restrictive ToS and crappy interface (register4less), etc.

Now I get to stick with Gandi and get the features I want. I'm very happy with that.

19 February 2008

John Goerzen: Registrar Dynadot Conspires to Help Take Down Wikileaks?

Yesterday, Wired ran a story on the Cayman Islands bank that got Wikileaks.org blocked. This story said, in part:

When the bank's lawyers indicated they would be filing a suit, she asked them to tell her where so that Wikileaks could find an attorney in the appropriate jurisdiction to represent it. She says the lawyers refused to tell her. Two and a half weeks later, the bank filed a restraining order against Dynadot and Wikileaks in San Francisco. Wikileaks received notice only a few hours before the case went to a judge who accepted the agreement between Dynadot and the bank.


(emphasis mine)

Now, Dynadot and this Cayman Islands bank apparently had an agreement to block wikileaks.org already. Not only did Dynadot effectively take wikileaks.org down, but also they "lock(ed) the wikileaks.org domain name to prevent transfer of the domain name to a different domain registrar." The U.S. Disctrict Court for Northern California issued this injunction without ever giving Wikileaks a chance to respond. The bank only filed the request against Dynadot. Apparently Wikileaks received notification that this was going to happen only 6 hours before the hearing (an incredibly short time in legal terms), nowhere near enough time to prepare a case.

Now, the reason I post this is because I have looked at Dynadot as a registrar before. They have good prices and a whois privacy service that makes sense: where you remain the owner of record, making it easier if you need to transfer the domain or prove your ownership of it.

But before signing up, I read their AUP carefully. Among many alarming things, I noticed this paragraph:

You further agree that Dynadot, in its sole discretion and without liability to You for any resulting loss or damages, may take immediate corrective action, including, but not limited to, removal of all or a portion of Your domain services and/or deletion, suspension, cancellation, termination, or other interruption of domain services or Your customer account with Dynadot, at any time during the term of this Agreement, in the event of notice of any possible violation of this Agreement by You or Your end users, or if such service or account is used in association with morally objectionable activities, or for any reason whatsoever. In such cases, any and all fees paid to Dynadot will be non-refundable and ineligible for account credit.


So, I thought I would write to them about it. Here is an excerpt from their response:

We always conduct an investigation before taking action against a domain. We will give you a chance to respond to the complaints.


From Wired's story, it doesn't look like that really happened. The US Government has already issued advisories about Cayman Islands banks, and it is unclear (to me at least) what law Wikileaks broke, or how Dynadot could find their actions of exposing fraud "morally objectionable". What's more, collaborating with the bank to get a takedown order written, but not talking to Wikileaks, seems to go against their statements to me (assuming again that the Wired story is accurate).
Here is my entire mail. You may also find archive.org's copy of the AUP from last July to be helpful. (I wrote the email in November, and they've added some sections since then, so the section numbers don't necessarily match up)

Subject: Re: SITE: Questions about your AUP
From: Dynadot Info <info@dynadot.com>
Date: Sat, 3 Nov 2007 13:42 -0800
To: jgoerzen@complete.org

Hello,
Thank you for your email. Responses are below.
Best Regards,
Dynadot Staff
--------------------------------------------------
DYNADOT... $8.99 domain names... $1/mo. web hosting
http://www.dynadot.com
Hi,
I currently have several domains being hosted with Gandi.  I have long been looking for someone that can provide a level of privacy for my whois data in a sane way.  I think Dynadot is the first I've seen that looks like it can do that and still be affordable.
In preparation to transfer over a first test domain, I read your AUP and frankly am quite troubled by what I saw.  I hope that you can allay my fears.
In section 4 of part 2, the last paragraph states that Dynadot "for any reason whatsoever" may delete, cancel, or terminate my domain services or customer account.  It also lists "notice of possible violation" as a justification for that.  That makes me even more nervous -- any random person could send you an email claiming something nefarious is happing with my domain name, and I'm agreeing to just let you delete it because of that?

We always conduct an investigation before taking action against a domain. We will give you a chance to respond to the complaints. 
A very similar clause appears in section 7 of part 1 ("cancellation of services").  It goes on to cast a very broad net around objectionable material and says that Dynadot decides what's objectionable.  Now, if you go to my website at www.complete.org or blog at changelog.complete.org, you'll see I'm an upstanding netizen.  But the AUP says that things that "are designed to or effectively... embarrass" third parties could get my domain cancelled.  So if I post a review of Vista that says I think Microsoft did a poor job of engineering, would my account be yanked if one of their engineers complained?  What if I (legally!) linked to a Comedy Central sketch using real TV footage to mock George W. Bush or Hillary Clinton?

The cases you described above would never happen with us. Complaining about Microsoft or making fun of George Bush are protected free speech. The service agreement is designed to give us some flexibility in dealing with customers that break the law. 
I'm particularly concerned about this because apparently DynaDot felt it worthwhile to try to take down the website of someone that found a security hole: http://www.jhuskisson.com/friends/dynadot-fights-back-bans-nick-from-everything
While I wouldn't condone step-by-step cracking instructions in most cases, this is concerning to me.

He was posting a step by step guide to hacking our website, which is illegal. The hack did not work, but we noticed an upsurge in strange activity in our logs, so we requested the hacking guide be taken down. 
Finally, item (i) under the Domain Privacy Service section says that you could immediately reveal all my information upon the receipt of merely a *claim* (not even a court order), even if it's invalid.  But I thought that NOT doing this was what you were saying made your service better, over at http://www.dynadot.com/resource/article/qa.html?aid=0

Once again we need to build some flexibility into our service agreement to deal with people who use their domains for criminal activity. Otherwise we could be liable for the damages that they cause to others. So far, we have never dropped anyones privacy except in the few cases we were forced to by a FBI subpoena.
I know this is a long message, and I appreciate your time.  I really do want to use your service, but -- no offense intended -- I want to make sure I'm not dealing with scammers first, and from reading the AUP, I'm not so sure!

No offence taken. I will email our counsel to see if we can tighten up the agreement a bit. 
-- John Goerzen

13 December 2007

Raphael Geissert: HOWTO create and maintain a repository using reprepro and DeBaBaReTools

DeBaBaReTools seems to work good enough that writing an early-stage HOW TO seems to worth the time :)

The first thing to do is of course fetch the sources:
$ svn export https://neo.yahostme.com/svn/DeBaBaReTools/trunk/ DeBaBaReTools


Build and install the package:
$ cd DeBaBaReTools; dpkg-buildpackage -b; dpkg -i ../debabaretools_0.2_all.deb


$ dpkg -L debabaretools
/.
/etc
/etc/DeBaBaReTools
/etc/DeBaBaReTools/common.conf
/usr
/usr/bin
/usr/bin/wannaBuild
/usr/bin/needsBuild
/usr/bin/needsReBuild
/usr/bin/buildQueue
/usr/bin/checkSums
/usr/bin/wannaUpload
/usr/bin/processIncoming
/usr/share
/usr/share/doc
/usr/share/doc/debabaretools
/usr/share/doc/debabaretools/copyright
/usr/share/doc/debabaretools/ENV
/usr/share/doc/debabaretools/changelog.gz
/usr/share/doc/debabaretools/TODO
/usr/share/DeBaBaReTools
/usr/share/DeBaBaReTools/backends
/usr/share/DeBaBaReTools/backends/config
/usr/share/DeBaBaReTools/backends/config/reprepro.sh
/usr/share/DeBaBaReTools/backends/probe.sh
/usr/share/DeBaBaReTools/backends/fetch
/usr/share/DeBaBaReTools/backends/fetch/dget.sh
/usr/share/DeBaBaReTools/backends/verbosity.sh
/usr/share/DeBaBaReTools/backends/lock
/usr/share/DeBaBaReTools/backends/lock/default.sh
/usr/share/DeBaBaReTools/backends/setDefault.sh
/usr/share/DeBaBaReTools/backends/buildQueue
/usr/share/DeBaBaReTools/backends/buildQueue/plaintext.sh
/usr/share/DeBaBaReTools/backends/signature
/usr/share/DeBaBaReTools/backends/signature/gpgv.sh
/usr/share/DeBaBaReTools/backends/check
/usr/share/DeBaBaReTools/backends/check/default.sh
/usr/share/DeBaBaReTools/backends/build
/usr/share/DeBaBaReTools/backends/build/pbuilder.sh
/usr/share/DeBaBaReTools/backends/upload
/usr/share/DeBaBaReTools/backends/upload/dput.sh
/usr/share/DeBaBaReTools/backends/parsers
/usr/share/DeBaBaReTools/backends/parsers/default.sh
/usr/share/DeBaBaReTools/backends/repository
/usr/share/DeBaBaReTools/backends/repository/shared.sh
/usr/share/DeBaBaReTools/backends/repository/reprepro.sh
/usr/share/DeBaBaReTools/backends/misc.sh
/usr/share/DeBaBaReTools/backends/codenamesTable
/usr/share/DeBaBaReTools/backends/codenamesTable/release.sh
/usr/share/DeBaBaReTools/backends/codenamesTable/reprepro.sh
/usr/share/DeBaBaReTools/backends/config/default.sh
/usr/share/DeBaBaReTools/backends/fetch/default.sh
/usr/share/DeBaBaReTools/backends/buildQueue/default.sh
/usr/share/DeBaBaReTools/backends/signature/default.sh
/usr/share/DeBaBaReTools/backends/build/default.sh
/usr/share/DeBaBaReTools/backends/upload/default.sh
/usr/share/DeBaBaReTools/backends/repository/default.sh
/usr/share/DeBaBaReTools/backends/codenamesTable/default.sh


Now you have to create a base reprepro repository. I strongly recommend setting the REPREPRO_BASE_DIR ENV variable if possible.

A recommended repository structure is (in repoitory/):
.:
./build:
./build/cache:
./build/data:
./build/data/logs:
./build/tmp:
./conf:
distributions
incoming
options
tiffany.py
uploaders
./db:
./debian:
./debian/dists:
etch
oldstable
sarge
sid
stable
testing
unstable
./debian/dists/...
./debian/pool/...
./incoming:
./incoming/accepted:
./incoming/new:
./incoming/rejected:
./pub:
./pub/UploadQueue:

Note that the build/, incoming/ and pub/ directory structures are DeBaBaReTools' defaults, if you want to change them you will have to set some variables at the configuration file ($HOME/.DeBaBaReToolsrc).

The distributions file must at least contain the Codename, Suite and Architectures entries for DeBaBaReTools to work correctly. Note that the current code used to correlate the suites with the codenames greps for the given codename/suite including two lines before and two after the match, so the entry must be on that scope.
E.g.
$ cat conf/distributions
Codename: sid
Suite: unstable
Architectures: i386 amd64 source
Components: main contrib non-free
Uploaders: uploaders
DebIndices: Packages Release .bz2 .gz .
DscIndices: Sources Release . .gz .bz2
Contents: .bz2 .gz .
Tracking: minimal includechanges keepsources


conf/incoming must name at least one rule. This is because when installing, DeBaBaReTools will grep for all the rule names and execute them one by one.
The rest of reprepro's setup is trivial.

When building packages with pbuilder, DeBaBaReTools expects the basetgz's to be named like $PBUILDER_CACHE/$CODENAME.tgz where $PBUILDER_CACHE is an environment variable defaulting to /var/cache/pbuilder.

Tweaking DeBaBaReTools:
Because we are using reprepro and pbuilder we'll give some hints to DeBaBaReTools so it uses a reprepro-specific and/or pbuilder-specific backend where possible.

$ echo 'HINT_ALL="reprepro pbuilder"' > $HOME/.DeBaBaReToolsrc


The .DeBaBaReToolsrc file is sourced by all scripts, so you might even set variables like $REPREPRO_BASE_DIR there.

/usr/share/doc/debabaretools/ENV documents only some of the multiple environment variables that can be specified to customise DeBaBaReTools' behaviour. It is important to say that variables which are empty will be filled with a default value.

You may now want to modify .dput.cf by adding a 'local' target for your repository:
[local]
fqdn = localhost
method = local
incoming = /home/raphael/Deb/repository/pub/UploadQueue
allow_unsigned_uploads = 0
run_dinstall = 0


So let the fun begin! :)

To make sure everything is ok let's run processIncoming in verbose mode:
VERBOSE=1 processIncoming
processIncoming v0.1 started.
processIncoming v0.1 stopped.

Not getting that output means something is not ok.

All the scripts will try to source a file called $HOME/.$ APP_NAME rc, where $APP_NAME is the name of the script, e.g. processIncoming. This can be used to customise them even more.

Tweaking the scripts behaviour:

processIncoming offer some options such as:
  • NEW_POLICY, default: binary. Meaning: uploads introducing new binaries will be moved to $NEW
  • REJECTED_POLICY: move(default)/kill: action taken on non-reclaimed (by a .changes file) files
  • CHECK_SIGNATURE: 1(default)/0, whether to check signatures on the .changes file or not
  • INSTALL: 1/0(default), whether to run the repository's install rules, this will usually be set at run-time (e.g. daily cronjob)
  • KEYRING: default: uploaders.gpg, the keyring with keys allowed to upload


wannaBuild:
  • BUILD_LOGS_DIR: $BUILD_DATA/logs, directory where build logs are stored
  • SIGN: see the ENV file for details
  • SIGN_COMMAND: see the ENV file for details
  • DEB_HOST_ARCH: see the ENV file for details
  • BUILD_DATA_CACHE: $BUILD_DIR/cache, directory where tools such as dget may store data
  • KEYRING: secring.gpg (needs to be changed), keyring file containing the keys to accept
  • UPDATE_ENVIRONMENT: see the ENV file for details
  • GAINROOT: see the ENV file for details
  • DISTROS_TO_BUILD: $SUPPORTED_DISTROS (based on the repository's backend information), list of distributions (e.g. unstable) wannaBuild is going to build for.



When you should call which DeBaBaReTools script:
processIncoming takes care of accepting package uploads and installing them when told to do so.
needsBuild processes the .changes files accepted by processIncoming and tells the build queue manager that a given package needs to be built, or when the binary package is also uploaded, or is already built.
wannaBuild only takes care of building source packages (note that arch: all-onnly packages WON'T be built, they must be uploaded together with the source package).

So the workflow is:
processIncoming -> needsBuild -> INSTALL=1 processIncoming

A package won't be installed in the repository if it isn't handled before by needsBuild.

Here's a demonstration (note the usage of VERBOSE=1):
$ dput local kcometen3_1.1-1_source.changes
Checking Signature on .changes
...
Uploading to local (via local to localhost):
Successfully uploaded packages.
Not running dinstall.
sh: /usr/bin/mini-dinstall: No such file or directory
Error while executing command.
Continuing...

The package is now at pub/UploadQueue

$ VERBOSE=1 processIncoming
processIncoming v0.1 started.
Processing /home/raphael/Deb/repository/pub/UploadQueue/kcometen3_1.1-1_source.changes...
mv'ing "/home/raphael/Deb/repository/pub/UploadQueue/kcometen3_1.1-1.diff.gz" to "/home/raphael/Deb/repository/incoming/accepted/"
mv'ing "/home/raphael/Deb/repository/pub/UploadQueue/kcometen3_1.1-1.dsc" to "/home/raphael/Deb/repository/incoming/accepted/"
mv'ing "/home/raphael/Deb/repository/pub/UploadQueue/kcometen3_1.1-1_source.changes" to "/home/raphael/Deb/repository/incoming/accepted/"
mv'ing "/home/raphael/Deb/repository/pub/UploadQueue/kcometen3_1.1.orig.tar.gz" to "/home/raphael/Deb/repository/incoming/accepted/"
processIncoming v0.1 stopped.

After checking sums and signature, the upload is accepted.

$ VERBOSE=1 needsBuild
needsBuild v0.2 started.
Architectures: i386 amd64 all
Now processing /home/raphael/Deb/repository/incoming/accepted/kcometen3_1.1-1_source.changes
Adding kcometen3 to be built in i386 for the sid distribution
Adding kcometen3 to be built in amd64 for the sid distribution
mv'ing "/home/raphael/Deb/repository/incoming/accepted/kcometen3_1.1-1.dsc" to "/home/raphael/Deb/repository/incoming"
mv'ing "/home/raphael/Deb/repository/incoming/accepted/kcometen3_1.1.orig.tar.gz" to "/home/raphael/Deb/repository/incoming"
mv'ing "/home/raphael/Deb/repository/incoming/accepted/kcometen3_1.1-1.diff.gz" to "/home/raphael/Deb/repository/incoming"
mv'ing "/home/raphael/Deb/repository/incoming/accepted/kcometen3_1.1-1_source.changes" to "/home/raphael/Deb/repository/incoming"
needsBuild v0.2 stopped.

The package is now marked to be built on i386 and amd64 for sid (note that distro to codename conversion is performed) and moved to incoming/ so processIncoming is able to install it.

$ VERBOSE=1 processIncoming
processIncoming v0.1 started.
processIncoming v0.1 stopped.

There's nothing under pub/UploadQueue and nothing is installed (do you remember the INSTALL=0 option? :))

$ INSTALL=1 VERBOSE=1 processIncoming
processIncoming v0.1 started.
No distribution found for 'kcometen3_1.1-1_source.changes'!
There have been errors!
No distribution found for 'kcometen3_1.1-1_source.changes'!
There have been errors!
No distribution found for 'kcometen3_1.1-1_source.changes'!
There have been errors!
making diffs between /home/raphael/Deb/repository/debian/dists/sid/main/source/Sources and /home/raphael/Deb/repository/debian/dists/sid/main/source/Sources.new:
generating diff
Exporting indices...
processIncoming v0.1 stopped.

The errors can be safely ignored, it is just that reprepro couldn't install kcometen3_1.1-1_source.changes for the specified install rule (I've one for each distro, that's why).

$ VERBOSE=1 wannaBuild
wannaBuild v0.1 started.
Fetching list of packages to be built for unstable
Fetching source package kcometen3 v1.1-1
Use of uninitialized value in string eq at /usr/bin/dget line 377.
cat: /home/raphael/Deb/repository/build/data/needsBuild.unstable: No such file or directory
Starting build backend...
Executing sudo pbuilder --update --basetgz /var/cache/pbuilder/unstable.tgz
Starting build process
Verifying signature of /home/raphael/Deb/repository/build/kcometen3jb3362/kcometen3_1.1-1_i386.changes...
gpgv: no valid OpenPGP data found.
gpgv: the signature could not be verified.
Please remember that the signature file (.sig or .asc)
should be the first file given on the command line.
Fetching list of packages to be built for testing
Fetching list of packages to be built for stable
Fetching list of packages to be built for oldstable
wannaBuild v0.1 stopped.

There are still some things that need to be fixed (e.g. the no such file or directory message).
Other than that, the output is just fine: the package wasn't automatically signed so when trying to check the signature it failed to find it thereby not uploading the package automatically.

Now we cd to build/kcometen3jb3362/, review the build log, the .changes file, and we finally sign it.
Afterwards, we upload the package and install it:

$ VERBOSE=1 processIncoming
processIncoming v0.1 started.
Processing /home/raphael/Deb/repository/pub/UploadQueue/kcometen3_1.1-1_i386.changes...
mv'ing "/home/raphael/Deb/repository/pub/UploadQueue/kcometen3_1.1-1_i386.changes" to "/home/raphael/Deb/repository/incoming/accepted/"
mv'ing "/home/raphael/Deb/repository/pub/UploadQueue/kcometen3_1.1-1_i386.deb" to "/home/raphael/Deb/repository/incoming/accepted/"
processIncoming v0.1 stopped.

$ VERBOSE=1 needsBuild
needsBuild v0.2 started.
Architectures: i386 amd64 all
Now processing /home/raphael/Deb/repository/incoming/accepted/kcometen3_1.1-1_i386.changes
mv'ing "/home/raphael/Deb/repository/incoming/accepted/kcometen3_1.1-1_i386.deb" to "/home/raphael/Deb/repository/incoming"
mv'ing "/home/raphael/Deb/repository/incoming/accepted/kcometen3_1.1-1_i386.changes" to "/home/raphael/Deb/repository/incoming"
needsBuild v0.2 stopped.


$ INSTALL=1 VERBOSE=1 processIncoming
processIncoming v0.1 started.
No distribution found for 'kcometen3_1.1-1_i386.changes'!
There have been errors!
No distribution found for 'kcometen3_1.1-1_i386.changes'!
There have been errors!
No distribution found for 'kcometen3_1.1-1_i386.changes'!
There have been errors!
making diffs between /home/raphael/Deb/repository/debian/dists/sid/main/binary-i386/Packages and /home/raphael/Deb/repository/debian/dists/sid/main/binary-i386/Packages.new:
generating diff
Exporting indices...
processIncoming v0.1 stopped.


done :)

We can now setup some cronjobs:
*/10 * * * * processIncoming
*/5 * * * * needsBuild
@daily INSTALL=1 processIncoming

needsReBuild and uploadQueue still need to be written, so don't expect them to do anything right now.

I hope people start using it so I receive more feedback :D

29 October 2007

Ingo Juergensmann: New Passport

Like Meike Reichle I'm going to order a new passport without fingerprints before this stupid new law becomes reality/active.
What Meike forgot to mention: you maybe need a certificate of birth (Geburtsurkunde) when you order a new passport. When you're ordering the new passport at your birth place, it's likely that you don't need such a certificate, but I moved in the meanwhile to another town and wanted to get a new passport last Thursday and was told from the people at the town hall that I need to have a certificate of birth.

Another interesting point to know: you can order your new passport anywhere in Germany, but when doing so somewhere else than where your main living is (Hauptwohnsitz), the costs will be doubled: instead of 59.- you'll need to pay 2x 59.- = 118.-.

19 October 2007

Raphael Geissert: DeBaBaReTools: The de-what?

It's been a while since I wanted to post about a project I started.
But today when I read Russell Coker's post about his SE Linux repository I decided it was time to blog about DeBaBaReTools.


So, what is/are DeBaBaReTools?
is: a project which tries to unify different packages-building systems (pbuilder, buildd, etc) and different repository tools (debarchiver, reprepro, etc) in a single system by providing an incoming/ system.

are: Debian Bash-Based Repository Tools.

Or in other words:
DeBaBaReTools handles new packages by:
  • Verifying (signature, size, md5 sums)
  • Building (packages are listed to be built under certain architectures and then an other set of scripts take care of building them, so different build systems and hosts can be used)
  • Installing (by making use of a tool which handles the repository itself, e.g. reprepro)


DeBaBaReTools is NOT a rewrite of a repository tool (like reprepro, debpool or debarchiver), neither yet an other building tool (like buildd or pbuilder). It is rather a glue between those two kind of tools.

So, how does DeBaBaReTools work?
As already said, they are a set of scripts which do all the work.
These are some of the scripts (more might be written later, they are under development):

  • checkSums: just like but doesn't allow the signatures check to be skipped (not really a feature), it uses gpgv and only uses the keyrings specified by KEYRING rather than using the debian-keyring keyring if installed. Available checks (in order): signature, size, md5sum
  • processIncoming: it takes care of checking the files in pub/UploadQueue, moving them to accepted (and soon to rejected or new), and running the repository's commands to install the packages from incoming/. It also takes care of moving the source/packages to incoming/ when necessary. Packages are verified by checkSums before moving anything to accepted
  • needsBuild: this script processes .changes and .dsc files in accepted/ and marks them to be built on the architectures supported by the repository.
  • wannaBuild: processes the packages that need to be built and calls the given build system (pbuilder, buildd, etc), and installs (and soon upload) them to the UploadQueue so they are processed by processIncoming and then installed in the repository.
  • wannaLock (not yet written): this script will take care of managing a distributed package building lock system
  • wannaUpload (not yet written): this script will take care of uploading/installing the built packages to the UploadQueue directory of the repository (will use dput, and similar).
  • needsReBuild (not yet written): will test all packages with edos-debcheck and mark the packages to be rebuilt when necessary. This feature will not be in needsBuild because of the long run it requires and also because of some checks performed by needsBuild.


Note that at the moment these are the only supported backends: gpgv, du, md5sums (all built in checkSums), pbuilder and reprepro.

Sounds interesting, doesn't it? :)

So, here's the magic:

The backends system
DeBaBaReTools doesn't try to re-invent the wheel, but it makes use of all the available tools so it works as less as possible.

This is where the backends take action. They are even more shell (even tough DeBaBaReTools clearly specifies they are Bash scripts they should work on any other POSIX-compatible shell) scripts which are loaded on demand and according to the user settings.

This opens a wide range of possible combinations of backends; making DeBaBaReTools work with almost anything.

The probe.sh script searches different directories for the specified backend (and will soon support user-hinted backends).

I think an example says more than a thousand words:
When needsBuild finds a package that needs to be built in a given architecture, the toBuild shell function is called. In order to provide the already said flexibility, needsBuild will at startup time call probeFile "buildQueue" which will then check several directories for the required backend (buildQueue in this case). Once it finds the given backend (backends/buildQueue/) it will check for any user hint (which will specify the real backend to be used) and then for a default one (default.sh which is a symlink to a real backend, plaintext.sh by default).

So, if somebody at some point wants to use a sqlite database to store all that information, that person would have to write a file called backends/buildQueue/sqlite.sh (or make it available in any of the include paths which can be extended via the EXTRA_PROBE_DIRS env variable) and either set a user hint or make default.sh point to it.
The sqlite.sh script can then call any external tools (or even more scripts) to insert the information in the database, read it and more.

I know this is a lot of blahblahblah but no single line of code is shown.
I've already requested an alioth project but it was denied because the package isn't already in the Debian archive.
If you are a DD and you think this sounds like a good project please contact the Alioth admins and convince them to create a project account for DeBaBaReTools.
Once created, many other people will be able to work on it and make it work with virtually any tool.

Any kind of feedback is very welcomed but I hope they are constructive ideas.

Why did I start this crazy project?
Because AFAIR only dak is able to do such job but I think dak is just too complex for a simple system to manage an a repository with an incoming system. And AFAIK there's no script which is able to do this job besides dak.

I hope this post makes sense because I don't want to review it again (I'm tired) :)

:bye: all

28 June 2007

Gerfried Fuchs: Lysistrata

Yesterday we had first night for the play Lysistrata in which I also have a role. It can be called a success—people congratulated us and laughed a fair bit. Babsi and me even got a special applause for our scene. I was a fair bit astonished to see Bamschabl from the Austrian comedy duo "Muckenstrunz und Bamschabl" in the audience. It seemed like he enjoyed it, at least. If you don't know what to do tonight or tomorrow—there are still two nights left that we play. It's shown in the Scala (no, not Mailand but Vienna) on Wiedner Hauptstraße 108, starts at 20:00 and the admission fee is € 5,— (or € 3,— for pupils and students). See you there!

27 February 2007

Edd Dumbill: OpenID and microformats support on XTech site

Thanks in no small part to the advocacy of Simon Willison, I've just OpenID-enabled the XTech web site. OpenID log in box on Expectnation Users can now create their accounts using an OpenID, or associate an OpenID with an existing account. A single-sign on solution like OpenID solves an important problem for us, as most people tend to interact with our conference web sites in only one or two time periods each year. While we've gone to the trouble of making retrieving a password easy, there's still the mental burden on the user of setting up the account and noting it down somewhere. As a measure of the impact of this on me personally: I habitually save registration confirmation emails in a certain mail folder. Since 1997 I have collected no fewer than 572 of these, and I'm sure some have been missed! One other cool thing about OpenID is that finally I can get the identity I wish to have. No longer do I have to be a compulsive early adopter of every service just to get the name edd. (Well, as long as said service integrates OpenID of course!) Personal branding is an important attractive aspect of OpenID.ImplementationImplementing OpenID using the Ruby ruby-openid gem was quite straightforward, as was the logical integration into our user models. I've not been the only one following this path recently, as illustrated by this post on Rails OpenID integration from Dan Webb.The harder problem of deploying OpenID lies in making the user interface work well: ultimately that will have a huge influence over its uptake. We've made a decent first go of it in Expectnation, but I'm sure we'll evolve and improve it over time. The main puzzling thing is how obvious to make the OpenID facility, given its relatively small take-up right now. We don't want to confuse normal users too much by using it. Microformats When I did my behind-the-scenes piece on the building of the XTech schedule last week, one feature I didn't discuss was the support for microformats we have in the schedule and on the session pages. If you use a tool such as Operator, you can easily save talk times to your calendar while reading the schedule.
XTech schedule microformats I'm personally a little late to the microformats party. Being a fan of pragmatic RDF, I didn't see much need for microformats right away. However, with tools like Operator I can honestly say that the use of microformats does enhance the XTech schedule.My impressions of microformats (in particular hCalendar and hCard) from using them are mixed. One the plus side, it was very easy to do. On the negative side, I found them restrictive in the sense that for the metadata to be present in the hCalendar object, it needs to be part of the HTML presentation.So, while microformats are meant to be about making human readable data useful for computers, they can have a tail-wagging effect on the human markup. Let me elaborate. In the conference schedule there is a grid overview. For readability here we want to keep the details down to a minimum in each box. There is definitely no need to repeat the date of each presentation when you can see there's a grid per day.But also we want to have microformats available in the page so users can use the grid to pick off talks to add to their calendar. The only details you currently get from the microformat are those you physically include inside the div marked as vevent. This means we can't embed the full details, such as the talk description. It also means I indulge in some dubious markup practices (an empty abbr element) in order to get the date and time into each hCalendar object.It seems to me that this could be ameliorated by more intelligent user agent behaviour. Each of my hCalendar events is given a URL. At the end of that URL is a full description of the event, using microformats. So, as long as I reference the URL in a summary page, the user agent can beetle off and pull down the full information, in much the same sort of way that FOAF uses the rdfs:seeAlso property.So, remove the expectation that microformats provide complete data, and I'm sold.Other schedule features: iCal, Upcoming.org
Of course, we have iCalendar support in the XTech schedule, so you can subscribe conventionally using iCal, Evolution or a similar program. Aaron Straup Cope took the iCalendar, and uploaded each event into Upcoming.org. If you look at the upcoming events tagged xtech07, you see the results of his work.This foreshadows some of the social elements we plan to add to Expectnation itself: indicating your intent to attend a talk, and adding comments to it. As a program chair I'm finding this quite fascinating to watch.

9 February 2007

Evan Prodromou: 19 Pluvi se CCXV

I had a full day yesterday. I'm not sure how this happened, but for some reason both Montreal Wiki Wednesday and Yulblog First Wednesdays fall on (ta-da!) the same day of each month. So we get a whole lot of Internet social-software craziness all in one intense burst during the day. Wiki Wednesday last night was a good time. We had it up at La bande passante, the informal meeting space that Robin Millette, Marco and roommates have up near Metro Cr mazie. It's a really nice space for a meeting of <20 people in an informal setting. They have lots of space, equipment for presentations, WiFi, a big table and comfy chairs. Hugh McGuire, Anne Goldenberg and Antoine Beaupr , Marc LaPorte, Seb Paquet and Robin Millette were all there (with various bande-passistes passing in and out as needed). I talked about experiences with RecentChangesCamp 2007, especially the "what we should have done" session at the end of the event. It really informs what we're going to do with RoCoCo in May of this year. In particular, we've made a commitment to try to get invitations and sponsorship requests out in February -- about 3 months before the event proper. We hope this is close enough to the event itself that people won't put it off or forget about it, but far enough away that people have time to make plans. Hugh talked about his new project Visible Politics. It's kind of a Wikipedia-meets-They Work for You. It's a wiki project for sharing objective information about the voting records, positions, and affiliations of Canadian federal politicians. It's still in its infancy, but I think the project can lend a really great hand to making public information about civic activities possible. On top of that, Robin demoed a really cool project for measuring activity on parts of a wiki site, Hot Off the Wiki. His demo versions use the BarCamp wiki, but I think the plan is to expand the tool to work for other wiki engines and sites. It's a good idea. I also demoed the MediaWiki OpenID extension, which I think was pretty interesting. I didn't say it at the time, but I mostly did the demo for Marc, who I think could benefit from one of the US$5000 Open Source OpenID bounty. I believe that TikiWiki meets the popularity requirements and the OpenIDEnabled.com libraries should make it easy to implement. Anyways, good Wiki Wednesday all around. I'm looking forward to the next one in March. tags:

YULblog when I tell you to blog After WW, Hugh and I went down to the YULblog event at the Quincaillerie on rue Rachel. We actually stopped in and had a poutine at La Banquise really quickly, which definitely put me in a good mood. When we got to the bar around 8:30 -- in my mind, fashionably late -- the place was already jam-packed. There were easily over 50 bloggers there, and maybe closer to 75. My friend Nicolas Ritoux was already there, sitting down at a table eating papadum with a lot of nice folks. I got a chance to talk to Patrick Tanguay about his upcoming trip to San Francisco, and Niko and I chatted in French about how we never chat in French. I also managed to get a whole stack of Moo Cards from the likes of Hugh and Vanou. All in all a good time, although I left a little early to get some baby quality time in. I really love YULblog; it's a great event that makes me feel connected to the local community. tags:

Personal note Thanks for the blogroll link from the anonymous author of The Love Shack. My guess is that it's Alex Malinovich, but I'm not sure. Anyways, let me know who you are so I can add you to my roll. tags:

3 February 2007

Marc 'Zugschlus' Haber: Recording digital audio with Linux impossible?

Dear Lazyweb, in late 2001, I bought a shiny new computer to replace my VHS VCR and to finally help me in getting my last 200 hours worth of music form analog audio tapes into the digital domain. I have to admit that I have failed to do this. While the TV ambitions were originally spoiled with the rotten Windows TV software that came with the Hauppauge PVR PCI card, audio with windows used to work rather decently. Until I decided to ditch Windows and to use Linux. Which looks like a mistake. Not even the audio stuff works any more. I have bought a new TV card and a new sound card, but all I currently get (with the old sound card, btw) are audio recordings that sound way too fast. I would like to use my DAT deck as a A/D-converter and to feed the resulting 44.1 kHz 16 bit stereo data stream to the computer via optical S/PDIF. I couldn’t get the emu10k card I bought to listen to its optical entry, so I swapped it back to the cm8738-based Nightingale Pro 6. Since toying around with the IEC switches in command-line ALSA mixer, I can hear what’s being put in on optical S/PDIF correctly playing on the PCs analog output. However, when I use arecord -Dhw:0,2 -f cd foo.wav to actually record from the optical S/PIDIF input, the Result sounds way too fast. Otoh, both aplay and file(1) say that this is a 44.1 kHz 16 bit stereo WAV file. Up to now, neither Usenet nor the ALSA mailing list have been helpful in debugging this. Oh dear lazyweb, who can help? In the current situation, I am really really tempted to shell out money - either for a new Windows license, or for a Mac. What should I do?

30 October 2006

Axel Beckert: BarCamp Zurich -- Resume

The BarCamp Zurich 2006 is over. On the way there I thought about what I would do during time slots with no interesting talks. But when I tried to make up my personal schedule, I noticed that I rather would have the opposite problem: Too many interesting talks at the same time… Well, to many interesting talks at all, although I only went to tech talks and left out the biz talks. I first went to the Podcasting & Co. talk by Timo Hetzel, since I never heard or made a podcast, but was curious about podcasts in general. Besides statistics and rankings he spoke about where people listen to podcast (most listeners seem to do that during commuting), what people like in podcasts, why companies podcast, etc. And that a very big share of all podcast listeners use iTunes as podcast client and except juice (never heard of it before) all other podcast clients seem to be irrelevant. My conclusion: I haven’t missed anything not having listened to or made podcasts neither do I need to listen or make podcasts in the future. They’re irrelevant. To me. :-) Then I had to choose between the talks AJAX@localhost (PDF) by Harry Fuecks and Realtime Collaborative Text Editing and SubEthaEdit by the Coding Monkeys. I heard about realtime collaborative editing once know that it’s a challenging task for the developer. I also know what AJAX is (and that I would only use or recommend it for bells and whistles, but not for content in general), but “AJAX@localhost” sounded like writing normal applications using AJAX. It sounded interesting and evil at the same time. I had to go there! ;-) Others had similar expectations after reading the talk’s title, so I was quite surprised that it was about something completely different, namely about debugging AJAX on the localhost but under conditions usually only appearing if you’re running AJAX application not from localhost but from somewhere on the net: You may have different lags with every request, so some requests may reach the server before others, which may screw up the whole AJAX application, if the developers didn’t think about it and only tested it on localhost. (Hence the talk’s title…) My conlusion: I will use and recommend AJAX even more seldom, since there seem to be even more design misconceptions than I thought before. But I’ll once have a look at the Webtuesday meeting, he mentioned. For the third time-slot, I didn’t need long to decide where to go: I already knew a little bit about Microformats and I wanted to know more. Tag Trade also sounded interesting, but the second part of the talk’s title, Paid Learning sounded like business and so I had no scruples to cold-shoulder that talk. I probably didn’t learn anything really new in the microformats talk, but my knowledge about microformats is now more concrete, and after talking with Cédric Hüsler later during a break, I would even trust myself to start and define a new microformat. Then I went to the HG Caféteria together with Gürkan and two German guys. While waiting in the queue, we were talking about our jobs and our favourite Linux distributions. I got some rhubarb pie and a rum truffles, assuming that the Caféteria uses no alcohol in their products like all other SV restaurant I know. But this one seemed to have quite a lot of alcohol, since it felt like my breath was burning… Well, this resulted in my second SV feedback form submission… Next I went to Alex Schröder’s talk about multilingual websites, Oddmuse and the Emacs Wiki, although also the talk A-Life about simulating evolution sounded promising. Alex asked the listeners about their experiences with multilingual websites and showed what Oddmuse offers as partial solution to the general multilingualism problems. But regarding the comments from the auditorium, there probably won’t be a perfect solution until computers can translate perfectly… The next talk I visited was Gabor’s talk about his master thesis Organizing E-Mail which resulted in a soon to be released Mozilla Thunderbird extension called BuzzTrack. From the other concepts he showed, I found Microsoft’s SNARF (Social Network and Relationship Finder) and IBM’s Thread Arcs most interesting as well as the fact that there is no e-mail client seems to have a majority at all. Directly after Gabor I had my own talk about Understanding Shell Quoting, so I also couldn’t go to Adrian Heydecker’s talk about Learning with Hypertext and Search Engines. I had only about three and a half listeners of whom several to my surprise where here because they didn’t know what “shell quoting” is. I really didn’t expect that. But that seems to be one of the differences between a BarCamp and a Linux Conferences: People come here to see something new, something they haven’t heard about before. On Linux events most people come, because they already heard about some special topic and want to know more or learn something about it. On Linux event my shell talks usually were attracting many visitors while at a BarCamp, talks presenting an idea, a concept or a tool seem to much more interesting for the attendees. So for the next BarCamp I perhaps exhume my Website Meta Language talk which never seemed to hit the nerve of Linux event attendees, since it tried to “sell” a different concept of generating website than most were used to. At least one listener excepted the talk to be named “shell escaping”, but IMHO escaping is only one quoting technic and it’s not only used for quoting. But perhaps I should take the word “escaping” in the title though for the next time. Happily most of the listeners seem to have learned something new from the talk and Silvan Gebhardt was really happy about his new knowledge about ssh ~ escapes, although I mainly talked about how to quote them than how to use them. :-) During the last slot I visited the session about the upcoming BarCamp Alsace 2 and the yet to be planned BarCamp Rhine, a BarCamp to be held on a ship traveling from Basel in Switzerland down the Rhine, stopping in Strasbourg, Karlsruhe, Rhein-Main-Area and perhaps even Cologne and Amsterdam. Contrary to my initial thoughts, the day was over very fast and I had no single boring minute during the BarCamp. Wow! After we’ve been kicked out of the building by ETH janitors, we joined again at the Bar N-68. On the way there I met Urban M ller who attended BarCamp Zurich, too. We talked quite a lot and it was very interesting to see behind the scenes of e.g. map.search.ch. Later I joined the French speaking table, talking with Gregoire Japiot from WineCamp France and Alex Schröder. Around 9pm I left the N-68 as one of the last BarCampers, tired but with new knowledge, new ideas, new acquaintances and a new hobby: BarCamping. What a luck that BarCamps aren’t that often, otherwise I couldn’t afford this new hobby. ;-) As a relaxing end I met with Alex Schröder and Christophe Ducamp on Sunday morning for brunch in the restaurant Gloria in the Industriequartier. When we were leaving the Gloria I noticed their book board with a lots of BookCrossing books and I took “The Da Vinci Code” with me, since I saw the movie and people were telling me that the book is much better. I’ll see…

31 August 2006

Jonathan McDowell: New toy! (What to do with it?)

I went wedding list creating in John Lewis yesterday. It was fun for about 5 minutes and then the novelty of a Palm with a barcode reader wore off. They'd told me to be careful where I pointed it, so I didn't get to see just how good the range was. :( During the lengthy process a Hauppauge MediaMVP caught my eye (it's a hardware MPEG2 decoder with SCART socket, ethernet and remote control - the idea being you stream content to it from your PC and watch it on the TV), reduced from £79.99 to £39.99. I'd considered buying one of these in the past, so I took a closer look. And discovered one marked down to £25.00 at the back. Took it to the checkout to confirm the price, got told it was right, and bought it. I'm not exactly sure what I'm going to do with it just yet. :) I've already got a hardware MPEG2 decoder on the DVB card hooked up to the TV, though the MVP is a fanless device and might make a better choice than the living room PC. mvpmc is a potential option, and there's a plugin for VDR as well. Or there's just the prod it and see what I can make it do approach. It's an IBM PowerPC 405 with 32MB RAM (though only 16M for the OS it seems) and an SMC 91C111 ethernet chip. The interesting bit of the MPEG2 decoder has no source which is a pain though. :( Still. Fun toy! \o/

13 August 2006

Andrew Pollock: [tech] MythTV in under 24 hours

Last night, the final component of my MythTV setup arrived - the TV tuner card, a Hauppauge WinTV-PVR-350. I'd had the other bits and pieces for about a week, indeed I'd already had MythTV installed and "operational", but there's really only so much you can do without a TV signal in the mix as well. So I had a bit of a late night last night bashing on things and getting it all going. It was actually surprisingly trouble-free. For some reason, I naively thought that the more contemporary 2.6 kernels had all the support required for the PVR-350. Not true. You need to grab the ivtv driver and build it separately. If I was less impatient, I would have worked with module-assistant to get it packaged, but I just threw it on. I have to run 2.6.17 to get the sound working, so I needed the 0.7.0 version of the driver. This built and installed fine, and I could run mplayer against /dev/video0 and see (and hear) TV fine. With a bit of tweaking of MythTV, it was happily using the card. Getting the remote control to work was slightly more problematic. It turned out that I needed to get the latest greatest lirc from CVS in order to get everything to build correctly, and get a /dev/lirc that I could actually read from. After that, everything else just fell into place. The last thing I spent a bit of time battling with today was guide data and channel tuning. It seems for some reason that channels greater than or equal to 14 didn't have their frequency set correctly, so I had to manually edit each channel and put in the frequency in kilohertz that ivtv-tune --list-channels provided. The Zap2it chaps also provide two different sets of guide data for Mountain View, and depending on which one you pick, you get a totally screwed up idea of the actual channels available. I also discovered the hard way that changing from one set of channels to the other without cleaning out the channels first leads to a complete mish-mash of channel data that correlates even less with reality than choosing one or the other by itself. But within 24 hours of receiving the tuner card, I have everything up and running. The ATA over Ethernet disk array (that Myth tells me is good for over 600 hours of recording) seems to be holding up to the task alright. The current bandwidth utilisation for a few test recordings is interesting: Graph of bandwidth utilisation for disks attached to the MythTV server
via ATA over Ethernet So it seems that a TV show is a nice steady 5 mbits/sec, which everything seems to keep up with okay. The post-processing to flag commercials seems a bit more bandwidth-intensive. It seems to take about 40 minutes to flag the commercials for a 60 minute block of recording. It's early days yet, but I'm fairly happy with how everything's operating so far. I can certainly leave things as they are for a while without needing to fiddle with things any further. The one thing I do want to mention is the guide data. The fact that it's totally free, and designed to be used by the likes of MythTV is awesome. PVRs really live and die by the guide data, and it's so cool that Zap2it offer it complete gratis. Mad props to them. Oh, and while I'm dishing out praise, I really must also thank Christian Marillat for http://www.debian-multimedia.org/ and for packaging up MythTV for Debian. If I had to build all of this myself, I'm sure it wouldn't have been so trouble free.

29 April 2006

Robert Collins: 29 Apr 2006

On Friday night at slug I did a 15 minute segment for the Linux Australia round-up entitled 'Why we should Test First'. The slides from the talk are online. The audio from LA-Update is also available. The nacent flamefest at the end of the talk turned into a list thread too.

23 January 2006

MJ Ray: Spammers Hall of Shame - Wouter Verhelst's retaliation plan

Wouter Verhelst has posted a retaliation idea on his site:

start adding their "private" email addresses to some database and, rather than throwing away mails which are so obviously spam, start forwarding them to random addresses from that pool
I think it would need doing very carefully, so that you don't put too much cost on your ISP - ultimately, you pay for your ISP's costs - or get yourself booted for sending tons of spam. If you do it, check your AUP, watch your network stats and good luck!

12 January 2006

Joachim Breitner: Sneak: Terkel i Knibe

Heute stattete ich der Sneak-Preview der Schauburg einen Besuch ab. Gezeigt wurde der Film “Terkel i Knibe” aus D nemark, in deutscher Synchronisation. Da wohl die wenigsten von dem Film geh rt haben (und das wohl auch so bleiben wird), dazu etwas ausf hrlicher.Terkel i Knibe ist ein Animationsfilm, der in etwa wie eine 3D-gerenderte Version von Southpark anmutet. Erz hlt wird die Geschichte des 9-j hrigen Terkel und seinen Problemen in der Schule, vor allem mit Mobbing. Um dem Mobbing zu entkommen, beginnt er selbst zu Mobben, was eine in ihn verliebte Mitsch lerin in einen u erst spritzigen Selbstmord treibt und seine Freundschaft zu Jason gef hrdet. Das Ganze spitzt sich dann auf dem Zeltlager, von einem furchtbar beliebten ko-Lehrer organisiert, dramatisch zu...Einiges hat mich gest rt. So waren mir die animierten Gesichter zu steif und die M uler zu breit, so dass viel Mimik verloren ging, und die Muskeinlagen h tte man sich sparen k nnen - obwohl sie immerhin eher im Stile von “Charlie und die Schokoladenfabrik” als dem grausamen der Disney-Kinderfilme gehalten sind. Ich mag halt kein Rap, und das war es meist.Die meisten Meinungen im Foyer des Kinos schienen in Richtung “Rausgeschmissenes Geld” zu gehen. Ich selbst fand den Film eigentlich recht gelungen: Er stellt die Wirkung von Mobbing auf Kinder zwar bertriebern, aber doch glaubw rdig da. Auch die d nische Skrupellosigkeit, wie man sie aus “In China essen sie Hunde” kennet, was Gewalt und Sprache angeht, passte gut ins Bild. Da lernt man sogar nach 13 Jahren deutschem Schulalltag noch neue Beleidungen, und bisweilen machte die graphische Darstellung den “Happy Tree Friends” konkurrenz. berhaupt war der Film bisweilen so bizzar, dass kein l stiger moralischer Unterton aufkommt, ohne jedoch die Aussage zu verraten.Fazit: Wer die Gelegenheit einmal haben sollte: Warum nicht, macht euch ein Bild. Zum Lachen werdet ihr kommen! Nur allen wird es sicherlich nicht gefallen.