Wieder mal lustiges in der Zusammenfassung

30 11 2007

Irgendwie habe ich momentan nicht die Muße, alle lustigen Fundstücke textlich nennenswert zu verwursten, deswegen wieder einmal ein paar Fundstücke der letzten Tage:

Bei Coffe & TV gibt es einen schönen Rückblick aus der Zukunft auf den Niedergang der Musikindustrie. Köstlich zu lesen, vor allem wenn man etwas im Thema steckt. Das Sahnehäubchen setzt dem ganzen aber Kommentator ckwon auf:

Du hast vergessen, dass durch die Gesetzänderungen die Jugendarbeitslosigkeit massiv gesenkt werden konnte, da ja alle ins Gefängnis wanderten…

IMHO eine sehr passende Zusammenfassung der ganzen Misere.

Für die, die es noch nicht kennen: Tales Of Mere Existence "Procrastination" von Lev Yilmaz, manche kennen es als Getting my stuff done: (via Mario Sixtus)

Auch die anderen Dinger von ihm sind mitunter sehr lustig.


YouTube valide einbinden

30 11 2007

Gerade habe ich ein YouTube-Video eingebunden und mich tierisch darüber geärgert, dass dadurch meine Seite vom Validator mit etlichen Fehlern und Warnungen abgestraft wird. So geht das nicht, also habe ich die von mir bevorzugte Methode für die Flash-Einbindung nun auch für Youtube angewendet. Und siehe da, keine Warnungen mehr. Nachteil: Ohne JavaScript kein Video, aber immerhin ein Link auf Youtube als Ersatz für die Feedreader und Web-2.0-Verweigerer ohne JavaScript.

Ich benutze hierfür das grandiose SWFObject 2.0, das via JavaScript den Browser und die Flash-Version erkennt und die entsprechend korrekte Einbindung vornimmt. Falls das nicht klappt, gibt es einen passenden Alternativcontent. Reicht die Flash-Version nicht (wichtig demnächst für H.264-Videos), wird ein Express-Installer aufgerufen, der eine neue Version installiert.

<div id="YouTubeKillerspiele"><p><a href="http://www.youtube.com/watch?v=R9JRm3iQQak">Youtube-Video</a></p></div>
<script type="text/javascript" src="/pfad/zum/swfobject.js"></script>
<script type="text/javascript">
	// <![CDATA[
	var flashvars = {};
	var params = {
		AllowScriptAccess: "always",
		AllowFullScreen: "true"
	};
	var attributes = {};
	swfobject.embedSWF("http://www.youtube.com/v/R9JRm3iQQak", "YouTubeKillerspiele", "425", "355", "8.0.0", "/pfad/zum/expressInstall.swf", flashvars, params, attributes);
	// ]]>
</script>

Für Youtube brauchen wir die flashvars und die attributes nicht, ich habe sie aber der Vollständigkeit halber mitgenommen. Für den Flowplayer etwa trägt man die Einstellungen in die flashvars ein.


Gewaltspiele bei ARD und ZDF

30 11 2007

Man mag Freund des öffentlich-rechtlichen Rundfunks sein oder ihn in der momentanen Form ablehnen. Dass verschiedene ARD-Magazine aber mitunter alles andere als objektiv berichten, und stattdessen ihrer Zielgruppe nach dem Mund reden ist nicht zu übersehen. Frontal 21 hat auf diesem Sektor ja eine traurige Berühmtheit erlangt. In einer emotional geführten Debatten wie der zum Thema "Killerspiele" haben sich aber auch einige andere Magazine nicht gerade mit journalistischer Sorgfalt und Objektivität hervorgetan, etwa Panorama, Hart aber fair oder Kontraste. Das wäre alles halb so schlimm, wenn genau diese Magazine sich einen Beinamen wie "Das Meinungsmagazin" geben würden. Dem ist nicht so, im Gegenteil sind es genau diese Magazine, die sich investigativen Journalismus und Objektivität auf die Fahnen geschrieben haben. Zumindest empfinden das die Zuschauer so.

Stefan Niggemeier und Thomas Knüwer (lest das!) bringen nun folgendes Video ins Spiel, das sehr klar aufzeigt, dass die Berichterstattung in diesen Magazinen zum Thema Gewaltspiele nicht nur mit der Wirklichkeit kaum etwas gemein hat, sondern dies auch durchaus Absicht zu sein scheint.

Ganz schön bitter, wenn man man darüber nachdenkt. Eine sachlich geführte Diskussion wäre wirklich nützlich, so aber wird nur ein neuer Generationskonflikt geschürt. Ist es in der Eltern-Kind-Beziehung in den letzten 20 Jahren zu harmonisch geworden, dass man mit geschickter Panikmache durch Falschinformationen etwas nachhelfen müsste? Oder haben die Redaktionen einfach das dumpfe Gefühl die Jugend selber nicht mehr zu verstehen? Aber ist man nicht Journalist genug, um solcherlei mit objektiver Recherche und knackiger ich-habs-verstanden-und-erklärs-euch-Berichterstattung zu begegnen und ansonsten lieber das Maul zu halten? Wenn ich gar keine Ahnung von einem Thema habe, dann berichte ich nicht darüber als hätte ich Ahnung. Und ich bin nicht mal ein Journalist, sondern nur ein weiterer Klowand-Blogger-Idiot.


Lustiges für zwischendurch

28 11 2007

So, im Vorbeigehen mal zwei lustige Einwürfe:

Die Musikindustrie mit dem Stinkefinger. Das ist wenigstens mal ehrlich.

Aufgepasst Pornofreunde: Die mit dem roten Halsband. Geistert gerade durchs Netz und die Electro/House-Musik-Szene. Siehe auch bei Youtube.


Thesis benotet

27 11 2007

Kaum zu glauben aber wahr: Ich habe meine Thesisnote bekommen. 1,7 und 2,0 sorgen für eine Endnote von 1,7. Damit bin ich vollauf zufrieden, den Spagat zwischen (in meinem Fall pseudo-) Wissenschaftlichkeit und Lesbarkeit habe ich damit – glaube ich – ganz gut getroffen.

Damit trennt mich nur noch das Kolloquium im Dezember vom endgültigen Ende meiner wissenschaftlichen Laufbahn. Ich glaube das ist auch besser so.

Nachtrag 04.12.2007: Inzwischen habe ich das offizielle Schreiben bekommen mit meiner Thesisnote. Siehe da: Ich habe eine 1,8. Gerade war ich beim Prüfungsamt und die sagten mir, dass es tatsächlich im Falle der Thesis auch Zwischennoten gibt. Gut zu wissen.


Kalauer der Woche: Caps-Lock

20 11 2007

Heute aus der Nerd-Ecke:

Was wird denn morgen fürn Wetter?

Caps-Lock

…hä?

Na, Shift ohne Ende

Dazu kann ich nur ein Wort sagen: LOL ROFL !ELF

Quelle: Einer der beiden Nachfolger im crazy HiWi-Labor. Ich hab den ganzen Tag gelacht, wobei folgende Aussage auch nicht ganz unlustig ist:

Lösung aller Probleme:

Für Windows: reboot

Für Linux: be root


Komm wir treffen uns im Coming Soon

13 11 2007
Das gute alte Coming Soon bei uns gegenüber

Gegenüber unserer WG gibt es seit etlichen Monaten einen spannenden neuen Laden: Das "Coming Soon", schon lange mal wollten wir dort mal vorbei schauen, aber irgendwie haben die nie geöffnet. ;)


Zufällige Datensätze aus einer MySQL-Datenbank, aber schnell

13 11 2007

Letztes Wochenende habe ich mich einige Stunden mit der Optimierung einer SQL-Abfrage herumgeschlagen, die eine beliebige Zahl zufälliger Datensätze aus einer Tabelle fischen soll und dabei mit JOINs aus zwei weiteren Tabellen die zugehörigen Daten ziehen. Mein erster Ansatz war dabei folgender:

SELECT an.frage_id AS frage_id,
	an.antwort_text AS antwort_text,
	an.timestamp AS timestamp,
	fr.frage_text AS frage_text,
	fr.timestamp AS fr_timestamp,
	me.member_id AS member_id,
	me.member_name AS member_name
FROM member_antworten an
	JOIN member_fragen fr
		ON fr.frage_id = an.frage_id
	JOIN members me
		ON an.member_id = me.member_id
WHERE an.antwort_text != '#'
ORDER BY RAND() 
LIMIT 10

An sich eine zweckmäßige Query, die auch im Netz in den meisten Fällen so empfohlen wird. Nur: 5 Sekunden auf meinem lokalen Testsystem ist deutlich zu lang, zumal die gleiche Query ohne das "ORDER BY RAND" in 0,003 Sekunden durch ist. Also habe ich mich auf die Suche begeben.

Mein erster Ansatz bestand darin, die zufällige Bestimmung der Datensätze aus der Tabelle members_antworten über eine Subquery in der WHERE-Klausel zu erledigen, also lauteten die letzten drei Zeilen folgendermaßen:

/* anderer Kram… */
WHERE an.antwort_id IN (
	SELECT antwort_id
	FROM member_antworten
	WHERE an.antwort_text != '#'
	ORDER BY RAND()
	LIMIT 10
)

Wer den Abschnitt zu RAND() im MySQL-Handbuch aufmerksam gelesen hat wird wissen was jetzt passiert: Nichts. Note that RAND() in a WHERE clause is re-evaluated every time the WHERE is executed. Und das dauert bei 13000 Datensätzen eine Weile. Nach zehn Minuten hab ich also den mysql-Prozess neu gestartet. Mist.

ORDER BY RAND() bringt uns also nicht weiter, die Frage ist aber: Wie zur Hölle bekomme ich zufällige Datensätze in endlicher Zeit aus einer Datenbank. Einen Zufallswert in PHP erzeugen und in der Query übergeben kommt nicht in Frage, weil die Werte des Primärschlüssels durchaus Löcher haben können und die kennt diese Zufallszahl nicht. Dieser Artikel klang vielversprechend, dieser Folgeartikel sogar noch mehr. Kern dieser Ansätze ist eine zusätzliche Spalte mit Zufallswerten, die mit einem einmal pro Query erzeugten Zufallswert multipliziert werden und dann der Abstand dazu entscheidet, welche Datensätze selektiert werden. Interessanter Ansatz, nur mit 1,7 Sekunden noch immer recht langsam und irgendwie auch unsinnig kompliziert. Das müsste doch einfacher gehen, ich habe also weiter probiert und viel verworfen. Die Performance war immer gleich schlecht mit verschiedenen mehr oder weniger kreativen Ansätzen.

Schlussendlich bin ich bei dieser halbwegs eleganten Query gelandet, die mit 1,7 Sekunden auf etwa gleichem Niveau war:

SELECT an.frage_id AS frage_id,
	an.antwort_text AS antwort_text,
	an.timestamp AS timestamp,
	fr.frage_text AS frage_text,
	fr.timestamp AS fr_timestamp,
	me.member_id AS member_id,
	me.member_name AS member_name
FROM (
		SELECT member_id,
			frage_id,
			antwort_text,
			timestamp
		FROM member_antworten
		WHERE antwort_text != '#'
		ORDER BY RAND()
		LIMIT 10
	) an
	JOIN members me
		ON me.member_id = an.member_id
	JOIN member_fragen fr
		ON fr.frage_id = an.frage_id

Je ein Index für Spalte member_id und frage_id haben das Ding schließlich auf 0,2 Sekunden gehoben, was passabel ist. Schön an dieser Lösung finde ich, dass nur noch die nötigen Datensätze gejoint werden und man nicht die Übersicht verliert.

Falls jemand das hier gelesen hat und mir einen zweckmäßigen Tipp geben kann, wie ich das offenbar langsame ORDER BY RAND() auch aus der Subquery wegoptimieren kann, soll er sich bitte hier melden. Bei der Gelegenheit könnte mir auch mal jemand erklären, warum es keine allgemeingültige und schnelle Möglichkeit gibt, zufällige Datensätze in SQL zu selektieren. Die ORDER BY RAND()-Kiste ist zum einen sehr langsam und zum anderen ein MySQL-Dialekt (genau wie das unglaublich praktische LIMIT).

Ein interessanter Ansatz bei hoher Last wäre ein Caching des Zufalls, also dass es eine Spalte mit Zufallswerten gibt, die nur auf Anfrage oder mit einem Timer neu geschrieben werden und sonst nur gelesen. Das wäre wirklich fix, aber wenn man schon Caches einsetzt, kann man auch gleich das Ergebnis der Query cachen und braucht nicht mal mit der Datenbank zu reden. Symfony bietet übrigens für solche Zwecke ein recht flexibles Cachesystem.

P.S.: Ach ja, die zugehörige Applikation ist ein Interviewsystem in einer internen kleinen Community und das DBMS ist MySQL5, falls das jemanden interessiert.


Jeder hat einen Hitler-Mii, oder?

13 11 2007

Irgendwie scheint der Impuls, auf der Wii-Konsole einen Avatar mit Schnauzbärtchen und Seitenscheitel zu erstellen, weit verbreitet zu sein. In einem Forum las ich mal die provokante Frage, wer denn keinen solchen Mii gebastelt hat. Viele Antworten gab es nicht und so wundert es mich auch nicht, dass sich in den deutschen Top-50 im nagelneuen Mii-Wettbewerbskanal neben Terence, zwei Mr. Gerritsons, zwei Kennys (alle drei von South Park), Darth Vader, B.A. und einigen anderen Figuren auch ein A.H. findet. Es ist auch einfach zu verführerischnaheliegend, auch wenn die political correctness auf der Strecke bleibt. Mal schauen, wie lange dieser Mii noch da drin bleibt… Ich behaupte mal, dass es immer einen geben wird. Da muss man einfach durch.


Es ist durch: Vorratsdatenspeicherung kommt

10 11 2007

Das Ding mit der Vorratsdatenspeicherung ist durch. Nachzulesen eigentlich überall (einfach jetzt mal bei rivva.de reinschauen), gut aufbereitet auch bei heise.de. Hervorzuheben ist davon dieser Absatz:

"Das Fernmeldegeheimnis wird von den Gerichten wieder hergestellt werden", meint Patrick Breyer von dem Zusammenschluss von Bürgerrechtsorganisationen und Internet-Nutzern. Dagegen sei die Wählbarkeit von SPD, CDU oder CSU für die Generation Internet "endgültig verloren gegangen". Diesmal habe die Koalition noch "auf stur geschaltet", ergänzt der Politikwissenschaftler Ralf Bendrath. "Aber der Protest gegen die Vorratsdatenspeicherung wird sich ausweiten zu einer gesellschaftlichen Bewegung für mehr Freiheit und weniger Angst."

Der von mir hervorgehobenen Aussage kann ich nur voll zustimmen. Ich habe mich übrigens schon vor einiger Zeit dieser "Sammelklage" angeschlossen, es schadet sicher nicht, da ebenfalls mitzumachen. Man muss leider einen unterschriebenen Wisch per Schneckenpost verschicken. Ich halte diese Klage übrigens für recht aussichtsreich, das in meinen Augen diese verdachtsunabhängige Vorratsdatenspeicherung glasklar gegen verschiedene Grundrechte verstößt. Mal schauen, die Hoffnung stirbt zuletzt.

Nachtrag: Für die "Ja, aber…"-Sager gibt es hier eine Sammlung von Statements pro Vorratsdatenspeicherung, zu denen ausführlich Stellung genommen wird. Mir ist bisher kein Pro-Argument unter gekommen, das zutreffend wäre. Aber testet es einfach selbst aus. Hier geht es weiter mit den Stellungnahmen zu populistischen Argumentationen Contra Datenschutz.