Dienstag, 26. Juli 2011

Meine alten Skateschuhe - R.I.P.

Ich bin immer noch in tiefer Trauer... meine Skateschuhe sind nach 15 Jahren (oder vielleicht mehr?) kaputt gegangen. Trotzdem sie von der Markenfirma DC Shoes waren...

Nun gut - 15 Jahre halten die wenigsten Schuhe. Und Skateschuhe erst recht nicht. Wer sich jetzt wundert - die letzten 12-13 Jahre bin ich ziemlich wenig gefahren. Und mein Griptape ist ziemlich abgenutzt. ;-)

Anbei noch ein letztes Foto. Vielen von euch werden den Schuh wahrscheinlich gar nicht kennen. Wenn mich meine Erinnerung nicht täuscht waren das die mit als erstes erhältlichen DC Schuhe in Deutschland. Das Modell müsste das damalige Guy Mariana Signature Model sein. Kann mich aber auch täuschen...



Jedenfalls: R.I.P.

Ubuntu - Installation auf USB-Stick

Vor dem Urlaub bestand für mich die Notwendigkeit, Ubuntu (meine favorisierte Linux-Distribution) auf einen USB-Stick zu installieren, da ich nur ein geliehenes Netbook mit hatte, auf das ich kein Ubuntu fix installieren durfte (wollte).

Also musste eine USB-Stick her. Gekauft habe ich einen 16GB Stick von Lexar, wobei ich vorab nicht speziell auf die Schreib- / Lesegeschwindigkeit geachtet habe, sondern nur darauf, dass es eine Marken-Stick ist. Die Installation sollte "echt" sein, also kein Live-System von USB, sondern richtig, wie man auf eine HD halt auch installiert.

Üblicherweise nutzte ich GNOME bzw. seit Natty 11.04 Unity, für den Stick habe ich dann aber Xubuntu gewählt. Grund: 1) wollte ich es nochmal ausprobieren und 2) vielleicht etwas performanter vom Stick als K|Ubuntu. Also flux das Alternate-ISO von Xubuntu 11.04 heruntergeladen, gebrannt, Stick eingesteckt und die CD gestartet.

Die Installation an sich läuft wie auf jedes andere Laufwerk auch. Man sollte halt nur als Ziel den Stick wählen (wenn man eine HD hat wird der Stick i.d.R. als /dev/sdb eingebunden - bei mir jedenfalls) und diesen dann von Hand Partitionieren. Hat man bereits eine Linux-Installation auf der regulären Festplatte, dann will der Installer wahrscheinlich die vorhandene Swap-Partition nutzen. Da man den Stick aber "stand-alone" nutzen will, muss man diese dann händisch abwählen und Swap auf dem Stick anlegen (oder weg lassen, je nach eigenem Geschmack). Außerdem sollte man tunlichst darauf achten, dass der Bootloader ebenfalls auf den Stick geschrieben wird und man sich nicht aus versehen den Bootloader auf der HD abschießt. Der Rest der Installation läuft dann wieder wie gewohnt.

Ein Punkt ist noch anzumerken: Der Bootloader GRUB2 erkannt alle Laufwerke auf dem aktuellen Rechner und fügt diese dem Bootmenü hinzu. Somit stimmt das Bootmenü natürlich nicht, wenn man den USB-Stick auf einem anderen Rechner nutzt. Natürlich kann man Ubuntu auf dem Stick darüber booten, aber halt nicht die anderen Betriebssysteme, welche auf der jeweiligen lokalen HD sind. Wer dies unbedingt braucht muss halt jedes mal GRUB2 aktualisieren und neu booten. Von Ubuntu aus kann man später natürlich auf den Inhalt der lokalen Laufwerke zugreifen.

Nach der Installation ist der Stick bereit und man kann Ubuntu so auf jedem Rechner nutzen, der von einem USB-Stick booten kann. Der Performance fand ich ok, heißt der Bootvorgang ist zügig genug und auch das Arbeiten läuft relativ flüssig. Lediglich wenn man viel I/O hat, d.h. mehrere Programme gleichzeitig startet oder ein Update von Paketen macht wird es ein bisschen langsamer - aber immer noch deutlich schneller als ein Live-System von CD oder DVD.

Python CGI und Templates - die Eleminierung von überflüssigen print-Statements

Zugegebener Maßen ist es vielleicht nicht mehr ganz auf der Höhe der Zeit, über Python und CGI-Programmierung zu schreiben. Schließlich ist WSGI der Stand der Technik und absolut die 1. Wahl bei der Webprogrammierung mit Python.

Nun ist aber auch so, dass das Urgestein CGI noch lange nicht am Ende ist. Das hat wohl mehrere Gründe: So unterstützt quasi jeder Webserver CGI mit Bordmitteln, während WSGI-Unterstützung - so fern überhaupt vorhanden - in der Regel nachträglich installiert und konfiguriert werden muss. Ein weiterer Punkt ist, dass inzwischen zwar relativ viele Anbieter von Homepage-Paketen / Webspace Python unterstützen - aber eben nur für CGI-Skripte. WSGI ist hier die absolute Ausnahme und wirklich rar.

Daher ist es auch nicht so verwunderlich, dass in Python Support-Foren auch immer wieder Fragen zu Thema „Python + CGI“ auftauchen.

Nun, weiter schwierig ist das Thema wirklich nicht. Eine Standardinstallation von Python enthält bereits ein Modul für CGI, Tutorials gibt es haufenweise im Web.

Eine Sache findet man jedoch recht selten: Die Nutzung von Standard-Templates (im Python String-Modul enthalten) in Kombination mit CGI. In vielen CGI Tutorials findet man eher ellenlange print Statements. Gut, zum einen könnte es daran liegen, dass das Templates erst seit Python 2.4 an Bord sind, viele Tutorials sind aber (wahrscheinlich) älter. Durch die Verwendung von Templates wird aber die Programmlogik von der Darstellung / Ausgabe getrennt, was das Programm an sich zum einen wesentlich übersichtlicher macht und zum anderen die Codepflege vereinfacht.

Das Vorgehen dabei ist eigentlich simpel: Man erstellt eine Template-Datei, was nichts anderes als eine „normale“ HTML-Datei ist, die aber die Platzhalter für die spätere Ersetzung enthält. Das CGI-Skript lädt dann diese Datei, generiert ein Dict, welches die Werte für die Substitution enthält und lässt das Template dann am Ende ausgeben.

Das folgende minimalistische Beispiel verdeutlicht dies. Es werden drei Dateien erstellt: die HTML-Datei namens „index.html“, welche das Eingabeformular enthält, das Template „ausgabe.html“ und das CGI-Skript „ausgabe.cgi“.

index.html:
<html>
<head>
<title>Python CGI und Templates</title>
</head>
<body>
<form action="cgi-bin/ausgabe.cgi">
<p>Bitte Namen eingeben: <input type="text" name="name"></p>
<p><input type="submit"></p>
</form>
</body>
</html>

ausgabe.html:
<html>
<head>
<title>Hallo CGI-Welt!</title>
</head>
<body>
<p>Hallo $name!</p>
</body>

ausgabe.cgi:
#!/usr/bin/env python

import cgi
from string import Template

form = cgi.FieldStorage()
name = form['name'].value
ersetzung = {'name': name}
temp = Template(open('ausgabe.html').read())

print 'Content-type: text/html'
print
print temp.substitute(ersetzung)

Letztendlich also nicht anderes als ein reguläres Template, nur halt in einem CGI angewendet.

Natürlich könnte man auch ein „echtes“ Template-Modul wie z.B. Jinja2, Mako oder Genshi einsetzen, sofern man selber Python-Module installieren kann bzw. darf. Für einfache Seiten reichen die Templates aus dem String-Modul aber alle Mal.

Zum Abschluss dann noch der obligatorische Hinweis, dass man dieses Beispiel natürlich nicht 1:1 für seine Anwendung übernehmen darf, da keinerlei Prüfung etc. des Eingabewerts „name“ erfolgt, was in realen Anwendungen eine Sicherheitslücke darstellen würde.

Montag, 25. Juli 2011

Pulley "The long and the short of it" - Rezension

Nach zwei Jahren Pause ist vor Ende Juni 2011 die neue EP von Pulley erschienen, Titel "The long and the short of it".

Pulley gehört zu meinen Lieblingsbands - schöner Westcoast-Punkrock, melodisch und straight.

Leider hat die neue EP nur drei Tracks und somit eine Gesamtspielzeit von etwas weniger als 9 Minuten... Nicht viel, aber besser als gar nichts.

Im Vergleich zu den Vorgängeralben und EPs finde ich "The long and the short of it" etwas rauer - klingt aber immer noch nach Pulley. Sprich, wer Pulley mag, dem wird auch diese EP mögen. Und wer Pulley noch nicht kennt, aber Westcoast-Punkrock mag, der sollte sich diesen Release mal anhören. Mir gefällt's jedenfalls.