Zebra-Tables mal wieder

Vor einiger Zeit hatte ich mal über einige Features von CSS3 geschrieben, und wie sie mir (und hoffentlich auch anderen Menschen) das Leben vereinfachen werden. Besonders die sogenannten Zebra-Tabellen sind immer ein beliebtes Thema. Eine Möglichkeit habe ich damals gar nicht in Betracht gezogen: JavaScript. Zu dem Zeitpunkt kannte ich JavaScript noch aus seiner 1.0er Inkarnation und war der Meinung, daß es nicht zu mehr als zu lästigen Pop-ups gut ist. Doch mit dem letzten AJAX-Hype habe ich mir JavaScript nochmal angeschaut und dabei festgestellt, daß es deutlich Mächtiger ist, als ich angenommen habe. JavaScript erlaubt es, sich im DOM-Tree eines HTML/XML-Dokuments zu bewegen und die Knoten dynamisch zu verändern.

Folgendes JavaScript wird alle Tabellenzeilen in einem Dokument mit even/odd-Klassen versehen (vorausgesetzt, die Tabelle trägt die Klasse zebra und die Zeilen befinden sich in einem <tbody>.

function doZebra() {
	var tables = document.getElementsByTagName("table");
	for (var x = 0; x < tables.length; x++) {
		var table = tables[x];
		if (table.className != "zebra") continue;
		var tbodies = table.getElementsByTagName("tbody");
		for (var y = 0; y < tbodies.length; y++) {
			var tbody = tbodies[y];
			var even = false;
			var trs = tbody.getElementsByTagName("tr");
			for (var z = 0; z < trs.length; z++) {
				tr = trs[z];
				tr.className += (even ? " even" : " odd");
				even = !even;
			}
		}
	}
}

window.onload = doZebra;

Das war’s schon. Ich werde mir JavaScript in nächster Zeit genauer anschauen. Und vor allem die Kommunikation über XML mit dem Server, wie sie bei AJAX benutzt wird.

Mal wieder Firefox-Extensions

Es ist schon eine Weile her, seit ich das letzte mal über nützliche Firefox-Erweiterungen geschrieben habe. Inzwischen habe ich ein paar neue Erweiterungen in meinen Werkzeugkasten aufgenommen, die ich nicht mehr missen möchte.

BugMeNot
Manche zwingen einen geradezu, sich erst zu registrieren, um deren Content zu sehen. Glücklicherweise bietet die Website bugmenot.com schon fertige Logins für diese Fälle an. Die Erweiterung erspart einem, auf der bugmenot-Website nach dem Login zu suchen (obwohl es wirklich kinderleicht ist). Man muß nur in den Formularfeldern für die Anmeldung die rechte Maustaste drücken und bekommt die Möglichkeit geboten, die Login-Daten automatisch von bugmenot.com zu beziehen. Eine echte Zeitersparnis.
JSView
Möchte man sich externe Stylesheets oder Javascripte anschauen, so muß man erst im Quelltext suchen, woher sie eingebunden werden. Mit JSView kann man sie sich direkt anzeigen lassen, ohne erst im Seitenquelltext nach den Verweisen zu suchen. Auch wieder eine angenehme Zeitersparnis.
QuickJava
Diese Erweiterung erlaubt es Java und JavaScript mit einem Mausklick zu (de)aktivieren. Hierzu werden 2 Symbole in der Statusleiste im Browser angezeigt. Ein Klick schaltet JavaScript aus, ein weiterer wieder ein. Ein Muß für den Powersurfer, der bei nervigen Websites den Nerv-Faktor schnell reduzieren möchte. (Eigentlich fehlt da noch ein 3. Button für Flash)
Stylish
Stylish wurde von einigen als das Greasemonkey für CSS bezeichnet. Man kann eigene Stylesheets für Websites festlegen. Mit nur wenigen Zeilen CSS, kann dann auch die OpenLDAP-Doku etwas frischer aussehen:

@namespace url(http://www.w3.org/1999/xhtml);
@-moz-document url-prefix(http://www.openldap.org/doc/) {
body { font-family: Optima; }
h1,h2,h3,h4,h5,h6 { color: #06a; }
pre, tt { font-family: Monaco; font-size: small; }
pre { background-color: #eee; }
table, th, td { border: 1px solid black; }
table { border-collapse: collapse; }
th, td { padding: 0.3ex; }
}
View Source Chart
Im Gegensatz zum normalen „Quelltext anzeigen“, zeigt diese Erweiterung zusammenhängende Blöcke hervorgehoben an. Damit kann man sich schnell einen Überblick über die Struktur verschaffen. Dies ist sehr angenehm, da man sofort sieht, welche Tags wo geschlossen werden.

Staffelfinales en masse

Nachdem Stargate SG-1, Stargate Atlantis und Battlestar Galactica vor einiger Zeit in ihre Staffelpause sich verabschiedeten, sind diesmal gleich 4 Serien am Ende ihrer Staffeln angekommen. CSI (Las Vegas), CSI Miami, CSI New York und NCIS. Alle hatten auf ihre Art ihre Cliffhanger oder Abschiede.

Achtung Spoiler!

Bei CSI (Las Vegas) endete die Staffel damit, daß Jim Brass angeschossen und schwer verwundet wurde. Er hat es überlebt, liegt jedoch noch im Krankenhaus. Es ist noch nicht klar, ob er damit aus der Serie ausscheiden soll. Im Übrigen bekommt der Zuschauer endlich einen kleinen Einblick in die Beziehung von Gil Grossom und Sarah Sidle.

Bei CSI Miami gibt es einen echten Abschied. Marisol Delko (die Schwester von Eric Delko) wird von einem Mitglied der Mala Noche angeschossen und stirbt im Krankenhaus. Horation Caine, der eine besondere Beziehung zu Marisol hatte, macht sich daraufhin auf die Jagd nach dem Schützen.

Auch CSI New York hat ein eher ungewisses Ende. Det. Don Flack wird bei einer Bombenexplosion schwer verletzt und liegt nun im Krankenhaus. Auch hier ist nicht klar, ob er in der nächsten Staffel wieder dabei sein wird.

Und zu guter Letzt wäre da noch NCIS. Hier gab es einen richtigen Kracher am Ende der 3. Staffel mit einer Doppelfolge. Zuerst wurde Leroy Jethro Gibbs bei einer Bombenexplosion verletzt und vergaß die letzten 15 Jahre seines Lebens. (Er glaubt es wäre 1991 und er wäre gerade aus dem ersten Golfkrieg zurückgekehrt) Ziva David hilft ihm, sich wieder zu erinnern. Doch dann werden Gibbs Warnungen vom Militär in den Wind geschlagen und Gibbs entschließ sich, deinen Dienst bei NCIS zu quittieren. Ja, ganz recht, Gibbs geht. Wie soll denn bitte NCIS ohne Gibbs funktionieren? Tony DiNozzo ist sicher ein guter neuer Chef, doch ohne Gibbs ist es einfach nicht mehr NCIS. Das wäre ja wie JAG ohne Harmon Rabb. Das werde ich erstmal verdauen müssen.

Was bleibt da noch an Serien in der Zwischenzeit, bis die neuen Staffeln wieder anlaufen? Leider wenig. Doctor Who ist gerade am Anfang seiner „zweiten“ Staffel. Erst im Herbst wird es dann wieder richtig losgehen mit Spooks, CSI (Las Vegas), CSI Miami, CSI New York, NCIS, Stargate SG-1, Stargate Atlantis und Battlestar Galactica.

Sind mir irgendwelche interessanten TV-Serien entgangen, die ich in der Zwischenzeit nachholen könnte?

Podcast-Perlen

Beim stöbern in den Podcasts bei iTunes bin ich über einen hochinteressanten Podcast gestoßen: Science Fiction and Politics. Es handelt sich dabei um Mitschnitte einer Vorlesung von Prof. Courtney Brown an der Emory University. Es ist faszinierend, wie Klassiker der Science Fiction nicht nur technologische Entwicklungen vorhersagten, sondern auch politische. Oder wie die Science Fiction politische Geschehnisse der Gegenwart verständlich macht.

Man sollte nur viel Zeit mitbringen. Derzeit sind es inzwischen 24 Dateien mit jeweils 1 Stunde Spielzeit.

802.11n bei Abstimmung durchgefallen

Dies wird einige Hersteller von sogenannten Pre-n-Produkten ganz schön ankotzen. Sie hatten schon die Geräte fertig und warteten in den Startlöchern auf die offizielle Abstimmung. Der zur Abstimmung stehende Draft ist ja seit längerem festgeklopft und die Hersteller konnten so bereits ihre Geräte vorbereiten. Bei der Abstimmung kamen nicht genug Stimmen für den Standard zusammen. Nun können die Hersteller ihre Produkte weiterhin nur als Pre-n verkaufen. (Was einige trotzdem nicht davon abhalten wird, es als 802.11n mit einem Haufen Sternchen dahinter zu bezeichnen)

Auch Käufer von Pre-n-Produkten, die den Versprechungen der Hersteller glauben geschenkt haben, sie könnten ihre Geräte per Firmware-Update 802.11n-Kompatibel machen, werden noch eine Weile warten müssen. Bis dahin dürfte die Interoperabilität von diesen Pre-n-Produkten unterschiedlicher Hersteller eher ein Glücksspiel darstellen.

PostgreSQL auf Mac OS X selbstgebaut

Dies ist eine Anleitung, um PostgreSQL auf Mac OS X Tiger zu installieren. Diese Anleitung ist größtenteils an diese Anleitung angelehnt, doch an einigen Stellen weiche ich davon ab, wo es mir sinnvoll erschien. Ich habe sie für mich und meinen Arbeitskollegen geschrieben, doch ich hoffe, daß sie sich auch für andere als hilfreich erweist.

Es gibt viele Anleitungen, die beschreiben, wie man PostgreSQL auf einem Unix-System installiert. Mac OS X ist im Grunde ein solches. Doch es bringt ein zusätzliches Verzeichnis-Layout mit sich, was sich hierfür eher anbietet. Nach der Installation befinden sich alle Dateien von PostgreSQL in /Library/PostgreSQL. Zusätzlich werden die Binaries sowie die Man-Pages nach /usr/local symlinked, damit man diese einfach von der Kommandozeile benutzen kann. (/usr/local/bin werden die meisten im $PATH haben). Zum Schluß landen die Datenbanken selbst in /Users/Shared/PostgreSQL. Alle Schritte wurden auf einem Powerbook mit G4-Prozessor durchgeführt, sollten jedoch auf den neuen Intel-Macs genauso funktionieren.

Die folgenden Schritte setzen voraus, daß Xcode auf dem System installiert ist. Ansonsten wird es schwierig, PostgreSQL zu kompilieren.

Installation von PostgreSQL auf Mac OS X

Nachdem du die Quelltexte von PostgreSQL (in meinem Fall ist es PostgreSQL 8.1.3) ausgepackt hast, wechsel in das Verzeichnis mit den Quelltexten. Der Anfang ist der übliche GNU-Dreisatz.

  1. ./configure --prefix=/Library/PostgreSQL --enable-thread-safety \
     --with-krb5 --with-bonjour --with-openssl
  2. make

    (nun ist etwas Zeit für einen Kaffee oder ein anderes Getränk)

  3. sudo make install
  4. Ich habe mich entschieden, die uid/gid 73 zu benutzen, da diese frei war. Dies muß bei späteren Mac OS X-Versionen nicht unbedingt der Fall sein, und es tut im Grunde auch jede andere uid/gid, solange diese bislang frei war. Die Gruppe und der Benutzer legst du mit diesen Befehlen an.
    sudo niutil -create . /groups/postgres
    sudo niutil -createprop . /groups/postgres gid 73
    sudo niutil -createprop . /groups/postgres realname "PostgreSQL Users"
    sudo niutil -createprop . /groups/postgres name postgres
    sudo niutil -createprop . /groups/postgres passwd "*"

    An dieser Stelle kannst du noch dich selbst zur Gruppe postgres hinzufügen. z.B:

    sudo niutil -createprop . /groups/postgres users fastjack

    (hier solltest du deinen Login-Namen einsetzen, außer du meldest dich auch als „fastjack“ an)

    sudo niutil -create . /users/postgres
    sudo niutil -createprop . /users/postgres uid 73
    sudo niutil -createprop . /users/postgres gid 73
    sudo niutil -createprop . /users/postgres name postgres
    sudo niutil -createprop . /users/postgres realname "PostgreSQL User"
    sudo niutil -createprop . /users/postgres shell /bin/sh
    sudo niutil -createprop . /users/postgres home /Users/Shared/PostgreSQL
    sudo niutil -createprop . /users/postgres passwd "*"
    sudo niutil -createprop . /users/postgres expire 0
    sudo niutil -createprop . /users/postgres change 0

    Falls du lieber mit einem graphischen Tool arbeitest, kannst du den NetInfo Manager (befindet sich bei den Dienstprogrammen) benutzen.

  5. Mac OS X sollte die Gruppe und den Benutzer direkt erkennen. Ein kurzer Test mit „sudo -u postgres id“ sollte folgende Ausgabe bringen:
    uid=73(postgres) gid=73(postgres) groups=73(postgres)Wir können also diesen Benutzer nun verwenden.
  6. Jetzt sollte das Verzeichnis mit dem frisch installierten PostgreSQL noch der Gruppe der PostgreSQL-Benutzer zugänglich gemacht werden. Dies ist nicht unbedingt nötig, doch ich wollte da ganz sichergehen.
    sudo chgrp -R postgres /Library/PostgreSQL
    sudo chmod -R g+r /Library/PostgreSQL
    sudo chmod -R g+x /Library/PostgreSQL/bin/*
  7. Lege nun die Symlinks für die einzelnen Binaries in /usr/local/bin an, sowie die Man-Pages in /usr/local/man. Falls die Verzeichnisse in /usr/localnoch nicht existieren, lege sie vorher an.
    cd /Library/PostgreSQL/bin
    for FOO in /Library/PostgreSQL/bin/*; do
    sudo ln -s $FOO /usr/local/bin/${FOO#$(pwd)/}
    done
    cd ../man/man1
    for FOO in /Library/PostgreSQL/man/man1/*; do
    sudo ln -s $FOO /usr/local/man/man1/${FOO#$(pwd)/}
    done
    cd ../man7
    for FOO in /Library/PostgreSQL/man/man7/*; do
    sudo ln -s $FOO /usr/local/man/man7/${FOO#$(pwd)/}
    done
  8. Zsh-Benutzer werden sollten an dieser Stelle einmal rehash aufrufen, damit die Shell die Binaries in /usr/local/binfindet.Ergänzung: Sollten es beim erstellen der Symlinks zu Fehlermeldungen kommen, so könnte es sein, daß die Verzeichnisse /usr/local/bin, /usr/local/man/man1 oder /usr/local/man/man7 nicht exisitieren. Lege diese dann an und führe das Skript zum erstellen der Symlinks erneut aus.
  9. Nun wird es an der Zeit, auch eine Datenbank anzulegen, oder einen Cluster, wie es im PostgreSQL-Slang heißt.Wie ich bereits am Anfang erwähnte, soll die Datenbank in /Users/Shared/PostgreSQL liegen. Dazu muß das Verzeichnis erst existieren. Lege das Verzeichnis mit folgendem Befehl an.
    sudo mkdir -p /Users/Shared/PostgreSQL
    sudo chown postgres:postgres /Users/Shared/PostgreSQL

    Und jetzt initialisiere die Datenbank mit initdb.

    sudo -u postgres initdb -U dba -A md5 -E UTF8 -W -D /Users/Shared/PostgreSQL/data

    Nun sollte erstmal ein Haufen Zeilen über den Bildschirm huschen. An einer Stelle wirst du nach dem Passwort für den Admin (in diesem Fall habe ich den Admin „dba“ genannt) gefragt. Gib dort ein Passwort ein, aber vergiß es hinterher nicht!

    The files belonging to this database system will be owned by user "postgres".
    This user must also own the server process.
    
    The database cluster will be initialized with locale C.
    
    creating directory /Users/Shared/PostgreSQL/data ... ok
    creating directory /Users/Shared/PostgreSQL/data/global ... ok
    creating directory /Users/Shared/PostgreSQL/data/pg_xlog ... ok
    creating directory /Users/Shared/PostgreSQL/data/pg_xlog/archive_status ... ok
    creating directory /Users/Shared/PostgreSQL/data/pg_clog ... ok
    creating directory /Users/Shared/PostgreSQL/data/pg_subtrans ... ok
    creating directory /Users/Shared/PostgreSQL/data/pg_twophase ... ok
    creating directory /Users/Shared/PostgreSQL/data/pg_multixact/members ... ok
    creating directory /Users/Shared/PostgreSQL/data/pg_multixact/offsets ... ok
    creating directory /Users/Shared/PostgreSQL/data/base ... ok
    creating directory /Users/Shared/PostgreSQL/data/base/1 ... ok
    creating directory /Users/Shared/PostgreSQL/data/pg_tblspc ... ok
    selecting default max_connections ... 50
    selecting default shared_buffers ... 300
    creating configuration files ... ok
    creating template1 database in /Users/Shared/PostgreSQL/data/base/1 ... ok
    initializing pg_authid ... ok
    Enter new superuser password: Hier das Passwort eingeben
    Enter it again: und hier nochmal wiederholen
    setting password ... ok
    enabling unlimited row size for system tables ... ok
    initializing dependencies ... ok
    creating system views ... ok
    loading pg_description ... ok
    creating conversions ... ok
    setting privileges on built-in objects ... ok
    creating information schema ... ok
    vacuuming database template1 ... ok
    copying template1 to template0 ... ok
    copying template1 to postgres ... ok
    
    Success. You can now start the database server using:
    
        postmaster -D /Users/Shared/PostgreSQL/data
    or
        pg_ctl -D /Users/Shared/PostgreSQL/data -l logfile start
  10. Damit der Server auch ein Log anlegt, was uns bei Problemen hilfreich sein könnte, mußt du noch ein Verzeichnis in /var/loganlegen. Der postgres-Benutzer muß Schreibrechte für dieses Verzeichnis besitzen. Dies geht am besten mit diesen Befehlen:
    sudo mkdir /var/log/pgsql
    sudo chown postgres /var/log/pgsql

    Damit sollte das Verzeichnis für den PostgreSQL-Server beschreibbar sein, damit dieser uns seine Befindlichkeiten mitteilen kann. Falls du ein anderes Verzeichnis verwenden möchtest, so muß der Pfad entsprechend in der launchd-Konfigurationsdatei aus dem nächsten Schritt auch geändert werden.

  11. Nun könntest du zwar den Server, wie oben beschrieben, starten, doch dies würde nur bis zum nächsten Reboot halten. Da muß was dauerhaftes her. Dazu braucht Mac OS X Tiger eine Konfigurationsdatei für den launchd. Meine sieht so aus. (Im Grunde ist sie unverändert aus der Anfangs erwähnten englischen Anleitung)
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 
    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"  "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict>     <key>Label</key>     <string>org.postgresql.postmaster</string>     <key>OnDemand</key>     <false/>     <key>ProgramArguments</key>     <array>         <string>/Library/PostgreSQL/bin/postmaster</string>         <string>-D</string>         <string>/Users/Shared/PostgreSQL/data</string>         <string>-c</string>         <string>redirect_stderr=YES</string>         <string>-c</string>         <string>log_connections=YES</string>         <string>-c</string>         <string>log_directory=/var/log/pgsql</string>         <string>-c</string>         <string>log_filename=postgres_log</string>     </array>     <key>ServiceDescription</key>     <string>PostgreSQL Server</string>     <key>UserName</key>     <string>postgres</string> </dict> </plist> 

    Speichere diese Datei als org.postgresql.postmaster.plist und kopiere sie dann nach /Library/LaunchDaemons. Hier auch direkt zum herunterladen.

    Diese Datei benötigt Mac OS X in /Library/LaunchDaemons, damit der PostgreSQL-Server beim booten mitgestartet wird. Von Hand kann nun der Server mit folgenden Befehlen gestartet werden:

    sudo launchctl load /Library/LaunchDaemons/org.postgresql.postmaster.plist
    sudo launchctl start org.postgresql.postmaster
  12. Der Server sollte nun eigentlich laufen. Ein ps ax | egrep "post(master|gres)"sollte ungefähr folgendes Bild ergeben:
      1825  ??  Ss     0:00.29 /Library/PostgreSQL/bin/postmaster -D /Users/Shared/PostgreSQL/data
    -c redirect_stderr=YES -c log_connections=YES -c log_directory=/var/log/pgsql -c log_filename=postgres_log
      1827  ??  S      0:00.02 postgres: logger process
      1829  ??  R      0:00.08 postgres: writer process
      1830  ??  S      0:00.00 postgres: stats buffer process
      1831  ??  S      0:00.01 postgres: stats collector process

    Der Server läuft also. In /var/log/pgsql sollte sich nun auch ein Logfile wiederfinden. Schau darin nach, ob auch alles reibungslos gelaufen ist. Sollten sich Probleme ergeben, so ist das Logfile die erste Anlaufstelle, um Hinweise zur Lösung zu finden. Mein Logfile sieht so aus:

    LOG:  database system was shut down at 2006-05-03 08:22:15 CEST
    LOG:  checkpoint record is at 0/33E75C
    LOG:  redo record is at 0/33E75C; undo record is at 0/0; shutdown TRUE
    LOG:  next transaction ID: 567; next OID: 10793
    LOG:  next MultiXactId: 1; next MultiXactOffset: 0
    LOG:  database system is ready
    LOG:  transaction ID wrap limit is 2147484148, limited by database "postgres"

    Wir können also eine erste Kontaktaufnahme zum Server wagen. Da wir beim initdb keinen Benutzernamen als Datenbankadministrator angegeben haben, ist der Name des Datenbankadministrators „postgres“. Um also als Datenbankadministrator eine Verbindung zur Datenbank aufzubauen, gib folgenden Befehl ein: psql -U dba template1. PostgreSQL sollte nun nach dem Passwort fragen, was wir beim initdb (s. Punkt 9) festgelegt haben. Nach erfolgreicher Authentifizierung, sollte uns der Prompt des Komandozeilenclients für PostgreSQL begrüßen:

    Welcome to psql 8.1.3, the PostgreSQL interactive terminal.
    
    Type:  \copyright for distribution terms
           \h for help with SQL commands
           \? for help with psql commands
           \g or terminate with semicolon to execute query
           \q to quit
    
    template1=#

    Da wir noch keine eigenen Datenbanken angelegt haben, wird sich die Beispielquery auf eine unspektakuläre Addition beschränken. Gib am Prompt folgendes ein: select 1+1; (Das Semikolon darf hier nicht weggelassen werden). PostgreSQL sollte nun so antworten:

     ?column?
    ----------
            2
    (1 row)

    Damit ist klar, daß 1 + 1 = 2 ist, und daß PostgreSQL rechnen kann.

  13. Die folgenden Schritte sind optional und eher für Anfänger empfohlen, um sich ein wenig mit PostgreSQL vertraut zu machen. Fortgeschrittene können den Rest getrost überspringen.Nun wollen wir erstmal eine neue Datenbank anlegen, in der wir auch arbeiten können. Du solltest nicht versuchen, Datenbanken in der template1-Datenbank anzulegen. Diese Datebank wird als Vorlage bei jedem „create database“ benutzt. Alles was in dieser Datenbank also angelegt wird, wird in jede neu erstellte Datenbank kopiert, was nicht unbedingt gewünscht ist.Eine neue Datebank kann man entweder von der Shell mit „createdb“ oder im PostgreSQL-Client mit „create database“. Da wir noch im PostgreSQL-Client (hoffentlich) drin sind, können wir also schnell eine Datenbank mit create database testdb; anlegen. Der Client sollte dies mit einem „CREATE DATABASE“ bestätigen. Wechsel nun zu dieser Datenbank mit \connect testdb. Der Prompt sollte nun den Namen der neuen Datenbank anzeigen.
  14. Legen wir also nun eine Tabelle in unserer neuen Datebank an.
    create table testtable
    id serial,
    somestring varchar(20),
    primary key(id)
    );

    PostgreSQL wird nun einige Meldungen ausgeben und zum Schluß mit „CREATE TABLE“ bestätigen, daß eine neue Tabelle angelegt wurde. Hier gibt es einige PostgreSQL-Besonderheiten zu beachten (besonders für MySQL-Umsteiger). PostgreSQL wandelt Tabellen- und Spaltennamen standardmäßig in Kleinbuchstaben um, wenn sie nicht nicht explizit in doppelte Anführungszeichen setzt. Hätten wir also „create table TestTable…“ geschrieben, wäre trotzdem nur eine Tabelle mit dem Namen „testtable“ angelegt worden. Wollten wir tatsächlich eine Tabelle „TestTable“ anlegen, so hätten wir „create table "TestTable"…“ schreiben müssen.

  15. Die Tabelle ist im Augenblick noch leer. Fügen wir also ein paar Datensätze ein.
    insert into testtable (somestring) values ('foo');
    insert into testtable (somestring) values ('bar');
    insert into testtable (somestring) values ('baz');
    insert into testtable (somestring) values ('qux');
  16. Um die Daten auch wieder aus der Tabelle herauszuholen, führen wir select * from testtable;aus. PostgreSQL sollte mit dem Inhalt der gesamten Tabelle antworten.
     id | somestring
    ----+------------
      1 | foo
      2 | bar
      3 | baz
      4 | qux
    (4 rows)

Damit läuft PostgreSQL nun auf auf deinem Mac. Jetzt kannst du es mit sinnvollen Daten füllen.

Nachtrag: Folgender Alias für die Shell hat sich als recht nützlich erwiesen: alias pg_ctl='sudo -u postgres pg_ctl'.

Toilettenpapier mit Fußballmotiven

Da geht man nichtsahnend in den Laden, um sich Toilettenpapier zu kaufen und findet dann so ein komisches Fußball-Toilettenpapier. Zuhause angekommen packte ich eine Rolle aus und fand auf dem Papier aufgedruckt irgendwelche Fußballweisheiten. Und plötzlich machte es Sinn. Wissenswertes über Fußball auf dem Toilettenpapier und Fußball ganz allgemein. Beides geht mir am Arsch vorbei.

Doctor Who, mal wieder

Die zweite Staffel (eigentlich die 28.) von Doctor Who ist angelaufen. Am Freitag lief bereits die 3. Folge in England. Dies war diesmal eine ganz besondere Folge, denn es gab mal ein Wiedersehen mit alten Bekannten. Und ich meine wirklich alt. Sarah Jane Smith, die Begleiterin des 3. und 4. Doctors, sowie ihr Begleiter K-9. Ein geradezu rührendes Wiedersehen. Ich hatte noch wenige Monate zuvor die alten Folgen von Doctor Who (Doctor 4-7) angeschaut, und fand es geradezu fantastisch, wie die Autoren alte Geschichtsfäden wieder aufnehmen.

Fehlt eigentlich nur noch „The Master“ (könnte etwas schwierig werden, da die Schauspieler bereits verstorben sind) und „The Rani“. Und wie ich gerade gelesen habe, werden auch die Cybermen, ihr Comeback haben.

Ich liebe diese alten BBC-Serien. Jetzt müßte nur noch ein Sender „The Tripods“ wieder zeigen.