Candid’s brain

On our super-fast 446 kbit/s internet connection, which seems above all to be configured wrong by our ISP, downloading a file with full speed results in ping times around 5000 ms. This is of course unacceptable, as every single web page takes several minutes to load then. The problem can be fixed by manually limiting the download rate to 20 KB/s or so when you plan to download a large file, but this is not always easily possible, for example when watching a YouTube video. An additional problem is that two clients that both limit their download rate to 20 KB/s can hang up the internet again when they download simultaneously. Furthermore it would be great if normal surfing, small downloads, would not be limited in bandwidth for keeping the speed at the possible maximum.

The best solution I could imagine was a transparent proxy that limited the download rate of large downloads automatically, letting small downloads pass through at full speed. Those large downloads should share a specified bandwidth, so multiple downloads would not make the internet slower than a single one.

So I wrote a simple TCP proxy that does exactly this. It listens on a port for incoming TCP connections. For each connection, it opens another TCP connection to a specified port on a specified server (so it is best used in combination with a HTTP proxy or whatever procotol you want to use it for) and redirects the traffic between these two connections. As soon as a configured download traffic limit is reached, the transfer is switched to “low-priority mode”, where it has to share a specified bandwidth with all other downloads running on low priority.

On my local server there already is a HTTP proxy running as cache. If I just used my bandwidth-limiter TCP proxy now and connected that to my HTTP proxy, the bandwidth limit would also be applied for transfers that are already cached by the HTTP proxy and thus make the cache useless. So I have to start an additional transparent HTTP proxy server that does not do anything except for redirecting the incoming connections from my bandwidth limiter to the internet. Sounds a bit like too much work and too many redirects, but it is the easiest solution I have found, as Squid does not seem to support the kind of bandwidth limit I need. So my configuration looks like this: My HTTP proxy cache (in my case Squid) is configured to use another proxy, which I set to localhost and the port my bandwidth limiter listens on. The bandwidth limiter connects to another HTTP proxy running on localhost, which is configured to do nothing but forward the request to the Web.

My bandwidth limiter (called “bwproxy”) is written in Java, you can download it from http://gitorious.org/bwproxy/bwproxy. It is available under the terms of GPL-3, feel free to send modifications or bug reports to me.

Solariumverbot für Minderjährige

Posted on: March 13th, 2009

Ich zitiere http://www.express.de/nachrichten/news/gesundheit-2008/solarium-verbot-fuer-minderjaehrige_artikel_1235811361200.html. Ein Gesetzentwurf „zum Strahlenschutz“ will Minderjährigen den Zugang zum Solarium verbieten. Begründung: Für Kinder und Jugendliche, die regelmäßig ins Sonnenstudio gehen, erhöhe die künstliche UV-Strahlung das Risiko einer Hautkrebserkrankung erheblich, begründete das Ministerium das geplante Nutzungsverbot.. So ein Blödsinn.

Politiker und Mediziner scheinen sich nicht im Klaren darüber zu sein, was ein „Risiko“ ist. Ich nehme es mal als erwiesen an, dass UV-Strahlung auf die Haut das Hautkrebsrisiko „erhöht“. Was das bedeutet: Der Anteil der Menschen, die unter Hautkrebs leiden, ist unter denen, die mehr UV-Strahlung auf die Haut abbekommen, größer als unter denen mit weniger UV-„Belastung“.

Ich erinnere mich kurz an Kapitel 1 des Buches „Psychologie“ von P. G. Zimbardo. In einem Abschnitt erfindet er eine Studie, die besagt, dass Studenten, die rauchen, schlechter in Klausuren abschneiden als Studenten, die nicht rauchen. Es gibt nicht etwa nur eine Möglichkeit, was das bedeutet, sondern vier:

  1. Zigarettenrauch schadet in irgendeiner Weise der Intelligenz, dem Gedächtnis, dem Konzentrationsvermögen oder sonst etwas, das sich direkt oder indirekt auf die Zensuren auswirkt (das wäre das, was die Bildzeitung aus einer solche Studie sofort schließen würde.)
  2. Studenten, die schlechte Noten schreiben, beginnen aus Frust oder aus anderen Gründen zu rauchen
  3. Ein externer Faktor verursacht beides, denkbar wäre zum Beispiel, dass partybegeisterte Studenten statistisch gesehen öfter rauchen, gleichzeitig aber weniger Zeit und Lust zum Lernen haben und deshalb schlechter abschneiden
  4. Der Zusammenhang ist Zufall.

Klar ist, dass es allerhöchstens Zufall wäre, wenn unter Zutreffen von Variante 2, 3 oder 4 das Einstellen des Rauchens eine Verbesserung der Zensuren zur Folge hätte.

Wir nehmen also wieder an: Menschen, die mehr UV-Strahlung auf die Haut abbekommen, leiden statistisch gesehen häufiger an Hautkrebs als Menschen mit weniger UV-„Belastung“. Das bedeutet lange, lange nicht das, was heutzutage jedes Kind beigebracht bekommt, nämlich dass UV-Strahlung Hautkrebs verursacht, und erst recht nicht, dass eine Einstellung der UV-Belastung das Hautkrebsrisiko senkt.

Was wäre, wenn nicht die UV-Strahlung Ursache für den Hautkrebs ist, sondern zum Beispiel, aus welchen Gründen auch immer, Menschen, die sich schlicht mehr um ihr Äußeres sorgen, hautkrebsgefährdeter wären als Menschen, die ihr Aussehen so akzeptieren, wie es ist. Ich kann wohl in Anbetracht aktueller Schönheitsideale davon ausgehen, dass statistisch gesehen Leute, die diesen Schönheitsidealen folgen wollen, sich zwecks Bräunung öfter UV-Strahlung aussetzen als die anderen (und sich noch „öfterer“ ins Solarium begeben als die anderen). Und schon wäre der Zusammenhang zwischen UV-Strahlung und Hautkrebs hergestellt, und freilich würde es am Hautkrebsrisiko nichts ändern, die Bräunung zu unterlassen, es höchstens erhöhen, wenn dem Schönheitsideal noch weniger gefolgt werden kann als ohnehin.

Wer Menschen schützen will, indem er versucht, Risiken zu senken, der wird die Menschen immer weiter in ihrer Freiheit einschränken, die Risiken jedoch werden gleich bleiben. Wer aus einem statistischen Zusammenhang urteilt, dass UV-Strahlung Hautkrebs verursacht, der müsste auch behaupten, dass Speiseeis das Hautkrebsrisiko erhöht, schließlich sind die Menschen dort, wo es heiß ist und deshalb mehr Eis gegessen wird, mehr UV-Strahlung ausgesetzt. Und kein Mensch würde Teenagern zu ihrem Schutze das Eisessen untersagen.

Ein weiterer fehlbegründeter Versuch, Minderjährige in ihrer Freiheit einzuschränken, die Eltern ihrer Erziehungsberechtigung zu enteignen und in den kommenden Generationen bestimmte Meinungen und gesellschaftliche Normen zu erzwingen. Das hatten wir in Deutschland zuletzt in der DDR, davor im Dritten Reich, ich bin gespannt, wo das noch hinführt. Ich bin schon seit Monaten am Grübeln, in welchen Fällen der Staat, die Gesellschaft, die Vormünder und in welchen das Kind selbst über seine Erziehung bestimmen sollte, und hoffe, dass ich bald zu einem Ergebnis kommen werde.

Kaugummiverbot

Posted on: March 7th, 2009

Irgendwann wurde uns einmal in der Schulkonferenz mitgeteilt, dass der Hausmeister ständig Kaugummis unter den Tischen entdeckte, was eine Menge unnötiger Arbeit verursachte. Es wurde diskutiert, wie man dieses Problem eindämmen könne. Es wurde mehrheitlich beschlossen, das Kaugummikauen in der Schule zu gänzlich zu verbieten, quasi als Steigerung der Tatsache, dass die meisten Lehrer das von sich aus schon taten.

In einer späteren Sitzung ging es darum, ob dieses Verbot in die Hausordnung aufgenommen werden sollte. Allerdings hatte niemand Informationen darüber, ob das Kaugummiverbot eine Besserung bezüglich des Müllproblems eingebracht hatte. Trotzdem wurde mehrheitlich beschlossen, das Verbot in die Hausordnung aufzunehmen.

Diesen Beschluss halte ich heute für völlig inakzeptabel. Hier wurde die Freiheit der Schüler eingeschränkt, ohne dass ein Nutzen nachgewiesen war. (Die Freiheit, Kaugummi zu kauen, halte ich nebenbei in der Schule, wo man meist ohne gefrühstückt und ausgeschlafen zu haben erst nach zwei oder drei Stunden zum Essen kommt, aus mundgeruchstechnischen Gründen für sehr wichtig.) Würde ich heute noch in der Schulkonferenz sitzen, würde ich einen Antrag auf Abstimmung darüber stellen, das Kaugummikauen über die Schulordnung explizit zu erlauben, den Lehrern also zu verbieten, die Schüler darin einzuschränken. Denn welchen Grund hat ein Schüler, seinen Kaugummi unter die Bank zu kleben, wenn das Kauen im Unterricht erlaubt ist und keiner dafür ermahnt wird?

Eine solche Entscheidung wäre aber natürlich für eine konservative Regierung, wie sie eine jede Schule hat, untragbar. Schließlich ist es Mode, Schülern und Menschen so viele Dinge zu verbieten, dass man sich bei jedem Unglück aus der Verantwortung ziehen kann, indem man darauf verweist, dass ja ein Gesetz gebrochen wurde.

Properly ripping last.fm streams

Posted on: March 4th, 2009

I’d been looking for a proper way to rip last.fm streams for a very long time. All rippers I could find (like TheLastRipper) are only able to rip lastfm:// URLs, which might be useful to get a lot of songs of a specified tag and then pick out the good ones, but if you are looking for a specific song that is playable on Last.fm in full length, a lastfm:// URL does not exist, the song is only playable via the Flash plug-in.

My solution of the problem is a combination of the Firefox plug-ins BetterCache (unstable version 1.24 works on Linux) and CacheViewer. BetterCache allows you to overwrite the HTTP caching instruction headers, thus to force Firefox to cache files that it should not following the HTTP standard (such as Last.fm MP3 files or YouTube Flash videos). CacheViewer provides you with a GUI for the about:cache list. By searching the cached files for the MIME type audio/mpeg and the host name ^s\d+\.last\.fm$ (s*.last.fm, * standing for a number), you can easily copy the cached MP3 files to your hard drive.

Be careful with the BetterCache add-on. In the default configuration, it modifies Firefox to use the cache for all files not transfered over SSL, which is in most cases not the behaviour you desire. If you want to enable BetterCache only for specified MIME types, remove the wildcard entry from the “Always-cache list” and add it to the “Never-cache list”. Also make sure that “Never-cache list works as ignore list” is enabled.

At the moment, BetterCache does not seem to support wildcards in URLs. Personally, I added audio/mpeg for all URLs to the “Always-cache list”. As soon as wildcards are supported, you may enable it only for *.last.fm.