Latexspiele auf den Schienen

Wer jetzt einen Artikel über außergewöhnliche Sexualpraktiken erwartet hat, der wird enttäuscht. Vielmehr geht es darum, aus einer Rails-Anwendung ein ansehnliches PDF herauszubekommen. Es gibt einen Haufen Wege, um PDFs in einer Rails-Anwendung zu erzeugen, aber irgendwie fand ich alle unbefriedigend. Die meisten sind einfach zu Low-Level. Ich will nicht festlegen müssen, an welchen Koordinaten ein Text erscheinen soll.

Wieso nicht etwas nehmen, was sich seit Jahrzehnten bewährt hat und das ich auch kann? LaTeX erzeugt seit 1984 angenehm lesbare Dokumente. Anscheinend bin ich nicht der einzige, der diese Idee hatte. Mit Rtex existiert bereits ein Plugin für Rails, was genau das erledigt. Damit kann man einfach LaTeX-Dokumente als Views verwenden. Da das Dokument vorher durch Erb geschleust wird, kann man natürlich auf die gewohnten <%= %>-Marker zurückgreifen.

Gilette Fusion in der Post

Etwas überrascht schaute ich gestern in meinen Briefkasten als ich aus Polen zurückkam. Da lag ein kleines Päckchen von Gillette darin mit einem Gillette Fusion Rasierer darin. Kein Schreiben, keine Erklärung, keine Rechnung. Ich kann mich nicht erinnern, mich irgendwo angemeldet zu haben, besonders, da ich seit über einem Jahr auf einen ganz altmodischen Rasierhobel mit einer Klinge (Merkur Futur) umgestiegen bin.

Ich habe also das ding mal probegefahren. Mein erster Gedanke war, daß 5 Klingen totaler Overkill sind. Aber mein Motto lautete schon immer: Man kann nie genug Overkill haben. Meinen 3-Tage-Bart habe ich damit schön glatt entfernt. Die Rasur des Fusion steht meinem Rasierhobel in nichts nach. Zusätzlich besitzt der Fusion an der Rückseite noch zusätzlich eine einzelne Klinge, um schwer erreichbare Stellen zu rasieren, da der Rasierkopf durch die 5 Klingen etwas groß geraten ist.

Was ich an dieser Stelle jedoch nicht vergleichen kann, ist der Preis. Dies war einer der Punkte, die ich damals zum Rasierhobel zu wechseln bewegten. Mein letzter Systemrasierer verfügte über 3 Klingen auf seinem Kopf. Die Ersatzköpfe kosteten etwa 10€ für 5 Köpfe. Derzeit bezahle ich für 10 Rasierklingen für meinen Rasierhobel 5€. Was die Köpfe für den Fusion-Rasierer kosten weiß ich nicht, ich denke jedoch, daß sie sich in der gleichen Preisregion, wie die der anderen Systemrasierer bewegen. Für mich also ein Grund, beim Rasierhobel zu bleiben, da die Qualität der Rasur sich nicht unterscheidet, und somit den Preisunterschied nicht rechtfertigt.

Neue Array-Operatoren in PostgreSQL 8.2

Seit Version 8.2 verfügt PostgreSQL über einige neue Operatoren, die Arrays in SQL erst richtig nützlich machen. Konnte man bislang (bis Version 8.1) nur möglich die Arrays zu verketten, Elementweise zu vergleichen oder einzelne Elemente aus dem Array wieder herauszufischen, so kann man nun auch Testen, ob zwei Arrays über gemeinsame Elemente verfügen oder gar ein Array vollständig im anderen enthalten ist. Diese neuen Operatoren sind @>, <@ und &&.

Mit @> kann man prüfen, ob das Array links des Operators eine Obermenge des Arrays rechts des Operators ist. Das Gegenstück dazu ist <@. Es prüft, ob das Array links des Operators eine Untermenge des Arrays rechts des Operators ist. Zu guter Letzt kann man noch mit && überprüfen, ob die Arrays Elemente gemeinsam haben.

Hier ein paar Beispiele, wie sich die neuen Operatoren einsetzen lassen.

test=> SELECT ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9] @> ARRAY[2, 4, 6, 8];
 ?column?
----------
 t
(1 row)

Hier muß ich wohl nichts weiter dazu sagen. Alle Elemente des zweiten Arrays sind auch im ersten enthalten, also ist das Ergebnis true.

test=> SELECT ARRAY[2, 4, 6, 8, 10] <@ ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9];
 ?column?
----------
 f
(1 row)

Hier ist das Ergebnis false, da die 10 aus dem ersten Array nicht im zweiten enthalten ist. Somit ist das erste Array keine Untermenge des zweiten Arrays.

test=> SELECT ARRAY[2, 4, 6, 8, 10] && ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9];
 ?column?
----------
 t
(1 row)

Hier dagegen ist das Ergebnis true. Die beiden Arrays haben Elemente gemeinsam (wenn auch nicht alle).

Wer noch mehr über Arrays und die dazugehörigen Operatoren in PostgreSQL lesen möchte, kann dies in der Doku tun.