kritikant

laut nachgedacht

Zum Zubehör springen

Cron läuft zur falschen Zeit

Vor zwei Wochen habe ich auf meinem Vserver, der eh die meiste Zeit idlet, einen Tor-Relay aufgesetzt. Das solltet ihr übrigens auch machen.

Jedenfalls interessiert mich unheimlich, wieviel Daten denn da so durchgehen und wie sich der Datenstrom über die Zeit verhält. Ich habe in der Konfiguration als Bandbreitenlimit 128 KB/s eingestellt und bin einfach gespannt, ob und wie das ausgenutzt wird.

In den ersten Tagen habe ich mich morgens zu Fuß auf den Server connectet und im Tor-Log die Beacons angeguckt, die alle 6 Stunden über die geöffneten Circuits und die Gesamtdatenmenge berichten. War mir auf Dauer zu lästig, deshalb habe ich einen Cron-Job eingerichtet, der mir morgens um 8 eine Mail mit den aktuellen Daten schicken soll.

Das klappte zwar super, aber leider drei Stunden zu früh. Statt um 8:05 wurde die Email stur um 05:05 verschickt. Ich hatte folgende Zeile in meiner crontab:

5 8 * * * /Pfad/zum/Shellscript.sh

Die Systemzeit hatte ich vor der Installation von Tor bereits per NTP richtig gestellt und sie zeigte auch immer noch die korrekte Zeit und Zeitzone. Nach langem und wiederholtem Googlen fand ich den Tipp, nach dem Stellen der Systemzeit den Cron-Dienst zu restarten. Gesagt, getan. Und siehe da: Die nächste Mail kam um fünf nach acht.

Vererbung von viewport-percentage lengths in Chrome

Ich stolperte neulich über ein Problem mit viewport-relativen Längen in CSS. Die Situation war konkret folgende:

Ich hatte eine ungeordnete Liste, deren Elemente je ein <div> enthielten, in dem sich wiederum ein <a> befand:

<ul>
    <li>
        <div><a href="#">Test</a></div>
    </li>
</ul>

Zuerst ein Beispiel, wie es funktionieren sollte. Die <li>-Elemente sollen eine definierte Höhe haben und die <div>s sollten genauso hoch sein. Das CSS dazu:

* { margin:0; padding:0; }
ul { list-style-type:none; }

li {
    background:blue;
    height:10em; 
}
div {
    background:red;
    height:100%; /* Genau so hoch wie sein Container */
}

Hier ist ein JS-Fiddle dazu. Wie erwartet bedeckt das rote <div> das gesamte Listenelement. Ruhig auch mal in verschiedenen Browsern ansehen.

Jetzt geben wir dem <li>-Element aber eine vom Viewport abhängige Größe:

li {
    height:30vw; /* Die Höhe soll 30 Prozent der Breite des 
                    Viewports betragen */
}

Hier die geänderte Demo.

Im Firefox sieht es immer noch genau so aus wie vorher. Das würde man (ich) auch erwarten. Schließlich hat das Listenelement eine definierte Größe und ich sage, dass sein direktes Kindelement 100% dieser Größe haben soll. Sieht man sich das Ergebnis in Chrome an, zeigt sich aber ein anderes Bild.

Das <li> hat zwar die richtige Größe, aber das <div> ist nur so hoch, wie es sein Inhalt (eine Textzeile) erfordert. Sogar im IE9 wird es korrekt (wie im FF) dargestellt. Opera unterstützt derzeit keine viewport-related lengths, aber da auch dort demnächst ein Webkit rendert, wird es sich wohl auch nur mittelmäßig zum Guten ändern.

Anscheinend muss man derzeit also entweder für Chrome in solchen Fällen auch jedem Kindelement die v*-Größe zuweisen, oder mit anderen Längeneinheiten arbeiten. Schade.

jQuerys scrollTop() und border-box

Das Folgende betrifft soweit ich sehe nur jQuery < 1.8.

Letzte Woche habe ich den ersten Kandidaten für den irrsten Bug in diesem Jahr gefunden.

Der Fehler, den der Kunde berichtete, beruhte darauf, dass das ursprünglich verwendete $(document).scrollTop() nicht im IE8 funktionierte und nachdem er dies durch das funktionierende $('html').scrollTop() ersetzt hatte, lief es nicht mehr in Webkit-Browsern.

Die Lösung dafür war relativ schnell gefunden: Ich ersetzte einfach in dem betreffenden Script den einen scrollTop()-Aufruf durch den Ausdruck ($(document).scrollTop() || $('html').scrollTop()). Damit war der Drops gelutscht und jeder Browser konnte sich aussuchen, was ihm passte (bzw. was nicht gleich 0 war, da der Code nur beim Scrollen zur Anwendung kam, reichte das aus).

Aber was war die Ursache? Nach viel Ausprobieren blieb mir nichts übrig als in die jQuery-Source zu schauen und mir anzusehen, wie jQuery.scrollTop() definiert ist. Für das verwendete jQuery 1.6.4 sieht das so aus:

// Create scrollLeft and scrollTop methods
jQuery.each( ["Left", "Top"], function( i, name ) {
	var method = "scroll" + name;

	jQuery.fn[ method ] = function( val ) {
		var elem, win;

		if ( val === undefined ) {
			elem = this[ 0 ];

			if ( !elem ) {
				return null;
			}

			win = getWindow( elem );

			// Return the scroll offset
			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
			jQuery.support.boxModel && win.document.documentElement[ method ] ||
			win.document.body[ method ] :
			elem[ method ];
		}

		// Set the scroll offset

		// Interessiert uns hier nicht
	};
});

Der Fall des IE8 sollte mit der Zeile abgedeckt werden, die mit jQuery.support.boxModel beginnt. Diese Eigenschaft dient eigentlich dazu, zu überprüfen, ob das W3C-Box-Modell vom Browser unterstützt wird. Das Problem ist, in diesem Fall gibt sie false zurück, obwohl das Dokument in Ordnung ist und der Browser sich im Standardmodus befindet. Warum? Also nachsehen, wie jQuery.support.boxModel gesetzt wird:

// Figure out if the W3C box model works as expected
div.style.width = div.style.paddingLeft = "1px";
support.boxModel = div.offsetWidth === 2;
Es wird ein Test-Div erzeugt, dem verschiedene Eigenschaften zugewiesen und das dann an den body angehängt wird. Da das Element hier einen Pixel breit ist und außerdem ein Padding von einem Pixel erhält, sollte offsetWidth, das die Gesamtbreite enthält, 2px zurückgeben.

Tut es aber nicht.

Der Grund dafür ist, dass ich im CSS box-sizing: border-box; gesetzt habe. Das ist eigentlich eine prima Sache, denn dadurch sind Elemente, denen man eine bestimmte Breite zuweist, auch wirklich so breit – egal ob sie Innenabstände oder Rahmen enthalten. Aber in diesem Fall passiert dann folgendes: Wir geben einem Element den linken Innenabstand 1px und sagen dann, dass das gesamte Element, mit Innenabständen und Rahmen, 1px breit sein soll. Das bedeutet, für den eigentlichen Inhalt ist kein Platz mehr, was egal ist, weil das Element sowieso keinen Inhalt hat und nur zum Testen da ist. Aber das bedeutet auch, dass offsetWidth nun auch 1 enthält, das ist schließlich die Gesamtbreite des Elements. Damit schlägt der Test div.offsetWidth === 2 natürlich fehl, und scrollTop() gibt nicht mehr window.document.documentElement.scrollTop zurück, sondern 0.

Darauf muss man erstmal kommen

Ab jQuery 1.8 besteht das Problem nicht mehr, weil dann nicht mehr auf Box-Model-Support getestet wird bzw. dieser Test nicht mehr in scrollTop() abgerufen wird.

Warum Webkit übrigens $('html').scrollTop() nicht versteht, ist mir noch nicht so ganz klar.

Zuckerbäcker

Selbstgebackener Christstollen

Weihnachten ist endgültig vorbei und ich habe auch mal Zeit, dieses Blog hier weiter zu befüllen. Heute geht es um Kulinarisches – passend zur Jahreszeit.

Ich habe einen Christstollen gebacken. Jawohl. Meine Oma, bei der ich seit ich denken kann mit Stollen – aus dem Erzgebirge, von der Verwandschaft geschickt, natürlich – zugeschüttet wurde, lebt jetzt seit einem Jahr nicht mehr. Seit Jahren reift in mir die Idee, selbst mal Stollen zu backen nach Erzgebirge-Art. Obwohl man dort ja traditionell nur die Zutaten kaufte und sie zum Bäcker brachte, der dann aus genau diesen Zutaten den oder die ganz persönlichen Stollen buk.

Dieses Jahr wie gesagt habe ich es geschafft. Vielleicht hat meine Oma daran auch ihren Anteil. Es ist ein bisschen das Festhalten dessen, was eigentlich vergangen ist. Fairerweise muss ich natürlich sagen, dass es meinem Opa noch gut geht, und dass ich bei ihm immer noch Stollen aus der Heimat bekomme. Dennoch ist es etwas Anderes.

Die Frage war jetzt, wie ich an ein Rezept komme. Theoretisch würde die Möglichkeit bestehen, in Sachsen anzurufen, was ich noch nie im Leben getan habe, und Tante Marianne (Tante meines Vaters, wenn ich nicht irre) zu fragen, was denn so hineinkommt in diesen Stollen. Und ob es Geheimnisse bei der Zubereitung gibt. Ich bin aber ein echter Sozialkrüppel, insbesondere wenn es um Leute geht, die ich kenne, aber praktisch nie Kontakt mit ihnen habe. Furchtbar. Nach den Erfahrungen, die ich letztlich mit diesem Stollen gemacht habe, überlege ich es mir vielleicht doch noch mal, ob ich sie nicht anrufe. Aber dazu später mehr.

Nein, eine andere Rezeptquelle musste her. Das Netz, natürlich. Die Suche war schwierig, weil nämlich die allermeisten Stollenrezepte, die es gibt, absolut nichts, aber auch gar nichts mit den Stollen zu tun haben, die ich seit klein auf kenne und liebe. Ein schnöde puderbezuckertes Etwas, am besten noch mit einer Marzipanrolle gefüllt, halb drüber geklapptem Teig, der als Gipfel auch noch Orangeat enthält. Wenn ich sowas essen will, geh ich zum Aldi und hol mir so ein Ding für zwei Euro fünfzig. Will ich aber nicht.

Der im weiteren Sinne Dresdner, genau genommen aber erzgebirgische, präzise: Neudorfer Stollen, den wir aus diesem Kaff dicht an der tschechischen Grenze unterhalb des Fichtelbergs bekamen, ist etwas ganz Anderes. Er ist groß. So groß, dass man einen gerade auf einem Backblech unterbringt. Im Prinzip geformt wie ein Brot mit einem Längsschnitt, der weit aufreißt und sozusagen eine köstliche Caldera bildet, die am Ende noch eine wichtige Rolle spielt. Der Teig enthält Mandeln, Rosinen – viele Rosinen – und Zitronat. Marzipan gibt es nicht. Ist er fertig gebacken muss er reifen, mehrere Wochen, während derer das Wichtigste in mühevoller Arbeit hinzugefügt wird: Butter und Zucker. Der Bäcker schmilzt Butter und streicht den Stollen großzügig(!) damit ein, so dass sie in alle Täler und Spalten läuft und dann streut er Zucker darüber, so viel, wie die Butter aufnehmen kann. Dann wird der Stollen verpackt und man wartet, bis das Gemisch erhärtet ist, um die nächste Schicht aufzubringen. So entsteht, Schicht um Schicht, ein manchmal zentimeterhohes Topping aus Butter und darin teils gelöstem, teils kristallinem Zucker, dass die erwähnte Caldera ausfüllt.

Beim Essen der dünn geschnittenen Scheiben (halbe Scheiben, der Stollen ist ja so breit) muss die Scheibe stets im Lot gehalten werden, während sich der Kopf demütig neigt, um abbeißen zu können. Andernfalls würde die Butter-Zucker-Mischung einfach vom Teig kippen und auf Teller oder Schoß in kleinste Bröckchen zerbersten (die natürlich sorgsamst wegschnabuliert werden bis nicht mal das kleinste Krümelchen zurückbleibt).

Es ist einfach ein Gedicht!

Leider hat sich in dem besagten Dorf in den letzten Jahren durchgesetzt, dass statt normalem Zucker Puderzucker genommen wird, was in einer Art Guss resultiert. Der ist dann auch nicht so hoch aufgetürmt, kann nicht umfallen und schmeckt einfach auch anders. Ich kann dieser Form lange nicht mehr so viel abgewinnen, wie dem Original, aber bisher hatte ich darauf keinen Einfluss. Bisher. Denn nun habe ich meinen eigenen Stollen backen wollen.

Zurück zum Rezept. Ich habe nach einiger Suche tatsächlich ein Rezept gefunden, das so klang, sowohl von den Zutaten her, als auch von der Meinung über das, was hierzulande so als Stollen verkauft wird, dass ich dachte, es ist einen Versuch wert. Dieses hier, Oma Lenis Stollen aus dem CommonsBlog.

Ich habe es in zwei Punkten geändert und der Autor, Jakob, würde vielleicht ebenso wie Leni selbst sagen, dass meine Variante nicht zählt. Der erste Punkt ist, der nicht weiter schlimm ist, ich habe das Rezept gedrittelt, weil ich ja nicht wusste, ob das wirklich mein Stollen wird und nachher hab ich da drei Dinger, die keiner essen will. Die zweite Änderung ist gravierender. Ich habe den Stollen vegan gebacken. Das bedeutet: statt Butter habe ich Bio Alsan genommen und statt Milch Sojamilch.

Meine Zutaten waren also:

  • 830g Mehl
  • 160-170g Zucker
  • 100g gemahlene Mandeln
  • 40g gemahlene bittere Mandeln
  • 80g Zitronat
  • 420g Rosinen (hier war ich feige, es kam mir so viel vor und die Rosinen ließen sich so schlecht dazu überreden, im Teig zu bleiben, daher war es weniger, wieviel weniger weiß ich nicht)
  • Schale von einer Drittel Zitrone (etwa)
  • Ein Drittel Teelöffel Muskatblüte
  • 330g Bio Alsan
  • 1/4 Liter Sojamilch
  • 2 Würfel Hefe
  • 1 Esslöffel Rum

Für die genaue Zubereitung lest bitte im CommonsBlog weiter.

Stollen vor dem Backen

Nach dem Backen war ich erstmal begeistert. Er riss richtig auf und ging sehr auseinander, so ähnnlich wie ich es kannte. Leider an beiden Enden bis zum Blech, wodurch die Enden nicht so schön waren. Da hätte ich vielleicht doch länger gehen lassen sollen vorher.

Die erste Schicht zerlassene Alsan mit Zucker wurde direkt aufgebracht. Danach habe ich den Stollen wie angegeben in Alufolie gepackt und in den kühlen Flur gestellt. (Das ist außerhalb der Wohnung, da ist es wirklich kühl.) Die nächste zwei Wochen habe ich manchmal täglich, manchmal alle paar Tage wieder eine neue Schicht Alsan mit Zucker darauf gepinselt und der Stollen reifte und gedieh. An Heiligabend, als die zwei Wochen rum waren, die von Kennern als Minimum angesehen werden, habe ich ihn angeschnitten. Das Ergebnis hat mich wirklich positiv überrascht.

Zugegeben, er hat seine Fehler. Was mir als erstes beim Probieren aufiel: Er ist zu trocken. Ich bin nicht ganz sicher woran es liegt. Mögliche Ursachen wären falsche Lagerung (statt Alufolie besser Plasiktüte?), nicht gewaschene/gewässerte Rosinen (dachte, das wär unnötig), zu wenige Rosinen oder einfach zu wenig Flüssigkeit oder Fett. Da werde ich ausprobieren müssen.

Die Butter-Zucker-Mischung ist zwar lecker, aber natürlich schmeckt es nicht ganz so wie mit echter Butter und sie wird auch nicht ganz so fest, was beides zu erwarten war. Damit muss ich leben.

Bei der Gegenprobe mit dem Originalstollen von diesem Jahr von der Verwandschaft ist mir aufgefallen, dass da möglicherweise noch ein paar gehackte Mandeln drin waren. Bin noch nicht ganz sicher, ob Zitronat oder Mandelstücke. Kann ich auch überlegen, ob ich da im nächsten Jahr noch variiere.

Ansonsten bin ich aber echt angetan von meinem ersten Stollenversuch. Ich bin Oma Leni und dem CommonsBlog sehr dankbar für das Rezept und im nächsten Jahr wird früher gebacken, länger gelagert und noch ein bisschen ausprobiert. Und ganz vielleicht springe ich über meinen Schatten und frage mal die eigene Verwandschaft nach ihren Zutaten und Mengen.

Angeschnittener Stollen

Daheim verblasst

Da ist er endlich, der Hobbit. Ich konnte mir gar nicht vorstellen, dass seit der Rückkehr des Königs tatsächlich schon neun Jahre vergangen sind. Aber mit dem Beginn, mit den ersten Bildern des Hobbits wird sofort zweierlei klar: Hier hat sich einiges verändert, und verdammt, wie hat mir Mittelerde gefehlt, ohne dass ich es wusste.

Der Film lässt sich zu Beginn sehr viel Zeit und setzt damit konsequent fort, was schon der Herr der Ringe von Anfang an klar gemacht hatte: Das hier ist ein Epos. Setz dich hin, halt die Klappe und erwache erst Stunden später aus der Trance. Dabei ist der kleine Hobbit als Buch doch ganz anders als der riesige Herr der Ringe. Es ist im Wesentlichen eine Kindererzählung. Geradeaus, ohne Verästelungen und Verstrickungen, there and back again eben. Damit hat sich Peter Jackson aber nicht zufrieden gegeben.

Faszinierend ist, dass im Hobbit beides erfolgreich miteinander verbunden wird. Auf der einen Seite eine Welt, die uns einsaugt, nicht mehr loslässt, mit Schlachtengetümmel fesselt und die von atemberaubender Schönheit ist. Auf der anderen Seite, ist es die Gute-Nacht-Geschichte, die Kindergeschichte, die ein bisschen zu bunt ist, ein bisschen zu lustig – bis ins alberne – und die uns keine Angst macht. Apropos ein bisschen zu bunt: Die Farben werden anscheinend auf die 48 fps der Aufnahme zurückgeführt. Ich weiß nicht, ob es wirklich daran liegt. Was ich aber weiß, ist, dass ich noch nie zuvor einen 3D-Film gesehen habe, der visuell so natürlich funktioniert hat. Es war überhaupt nicht anstrengend, fast nie störend, vor allem auch nicht aufdringlich. Das könnte natürlich auch damit zu tun haben, dass 3D hier alles in allem etwas dezenter eingesetzt wird. Möglicherweise befinden wir uns langsam auf dem Weg des Erwachsenwerdens des dreidimensionalen Kinos.

So unterscheidet sich der Hobbit allein von der Farbgebung her von der Vorgänger-Trilogie. Wo das Mittelerde vom Herrn der Ringe bisweilen zwar erschütternd schön sein, aber auch Verzweiflung und Hoffnungslosigkeit verbreiten konnte, ist das des Hobbits ein Märchenland. Selbst wenn Orkhorden und Wargs den Helden auf den Fersen sind, selbst wenn Riesenspinnen den Wald unsicher machen, der Zuschauer glaubt immer noch, er könnte doch kurz anhalten und Bonbons am Wegrand pflücken.

Die Erzählung kann sich erlauben, sehr dicht am Buch zu sein, weil die Vorlage einfach viel weniger umfangreich ist. Es gibt natürlich auch diesmal Episoden, die so nicht bei Tolkien stehen, aber sie schaden (bisher) auch nicht und es fehlt ja nichts. Und doch sind manche Dinge ganz leicht verschoben. Die Gemeinschaft der Zwerge, insbesondere ihr Anführer Thorin erscheint viel älter, viel gebrochener und teils auch verzweifelter, als ich mich erinnere, dass es im Buch wäre. Genau diese Dinge, die "menschlicheren", fehlerhaften Chrakatere, die auch wunderbar ausgespielt werden, sind es, die den Film vielleicht auch erst wirklich zu einem Genuss machen. Wie Süßspeisen erst perfekt sind, wenn sie nicht mehr ganz süß sind, sondern einen Hauch Salz oder Bitterkeit enthalten, so geht es mir auch mit dem Candyland des Hobbits, der irgendwo seine dunkleren Facetten herbekommen muss.

Ich bin jedenfalls ganz hingerissen vom Hobbit. Die – teils altbekannten – Schauspieler, die Landschaft, die Musik. Ach was hatte ich einen Spaß. Ich glaube, ich muss mir bald nochmal den Herrn der Ringe geben. Und vielleicht sogar noch einmal den Hobbit.

Das Allerbeste aber ist: Im März bin ich da. Ich werde mit der Frau an meiner Seite durch Mittelerde laufen und wahrscheinlich noch viel fassungsloser sein, als man je vor einer Kinoleinwand sein könnte. Und die Welt rückt nah.