Zumindest scheint irgendjemand der Ansicht zu sein:

IWSS Security Event
Access to this URL is currently restricted because of its classification.
URL: http://www.fabrik-kellerkinder.de/
Content classification: Pornography

Die Kellerkinder-Seite ist eine Community von Leuten die die gleiche Party besuchen wie ich. Im Moment ist die Seite wegen einer größeren Umbau-Aktion geschlossen, aber wenn man mal bei archive.org oder Google danach sucht kann man sich ein Bild von dem angeblichen Schmuddelkram machen: Da ist einfach keiner.

Ich habe mir da nie Gedanken drüber gemacht, aber jetzt wo ich das sehe fällt mir doch ziemlich deutlich ins Auge wie gefährlich Content Classification sein kann. Ich brauche nicht viel Phantasie um mir ein Szenario auszumalen in dem ich mich beispielsweise irgendwo bewerbe, irgendjemand tippt meinen Namen in eine Suchmaschine, kommt auf die Seite und klassifiziert mich als Ferkel. Ohne auch nur gesehen zu haben was auf der Seite tatsächlich angeboten wird, denn das zeigt der Filter natürlich nicht. Oder da ich im Moment nicht vor habe mich irgendwo zu bewerben: letzte Tage habe ich auf einen ‚Request for Qualifications‘ geantwortet. Ein Kunde meines Arbeitgebers sucht Leute für einen Job, ich soll da angeboten werden. Wenn der Kunde mich hinterleuchten will wirft das womöglich ein falsches Bild auf die Firma für die ich arbeite.

Das ist beides nicht abwegig, oder?

Ich habe danach gesucht, aber keine Möglichkeit gefunden um festzustellen ob ich da von einem lokalen Admin klassifiziert wurde, oder ob das global von Trend Micro so eingestellt wurde (von denen stammt der Filter). Mein Hinweisgeber tippt aber auf die globale Variante, da das Produkt bei ihm gerade erst installiert wurde. Also habe ich eine Mail mit der Bitte um Aufklärung an Trend Micro geschrieben, ich bin gespannt ob ich da eine Antwort bekomme…

Wenn jemand einen Tip hat wie ich rausfinden kann ob das eine globale Einstellung ist, oder was ich sonst noch tun könnte: immer her damit…

buntes remindIch weiß auch nicht was mich da überkommen hat, aber so steht es am Ende meiner .zshrc:

ESC=$(echo -e \e)
remind ~/.reminders | sed -e "s/^/| /;s/| (Reminders for.*):/,---- [ ${ESC}[37;1m1${ESC}[0m ]/;s/Sunrise in.*/${ESC}[0;37m$(ddate | sed -e :a -e "/$/N; s/n/ - ${ESC}[31;1m/; ta")${ESC}[0mn| ${ESC}[0;37m&${ESC}[0m/;s/(today|tomorrow)(| at ..:..)$/${ESC}[31;1m&${ESC}[0m/;s/on [A-Z][a-z]*(| at ..:..)$/${ESC}[0;31m&${ESC}[0m/;$s/.*/&n`----/g"

Wenn jemand eine noch elegantere Lösung hat: immer her damit. :-)

Insbesondere gefällt mir das mit der Variable $ESC nicht, aber ich wollte nicht so viele echos in die Zeile einbauen, und sed scheint auf e, 33 und Konsorten nicht anzusprechen. Das Ergebnis von [Strg-V-Esc] wäre gegangen (also das Zeichen das im Editor aussieht wie „^[„), aber das hätte zur Folge dass das Skript nicht mehr vernünftig druckbar wäre. Und dass bei Ausgabe mit cat bunte Stellen auf dem Bildschirm erscheinen.

Ach ja, die Ausgabe der Zeile sieht übrigens so aus wie in dem Screenshot. Die bunte Einfärbung der einzelnen Termine kommt schon aus der .reminders (kann ich bei Gelegenheit auch nochmal zeigen). Die Zeile hier sorgt für den Rahmen, das diskordische Datum und alle anderen Farben.

Eigentlich bin ich der Ansicht, dass einem auf einem Server nicht viel besseres passieren kann als ein Debian. Heute wurde dieser Eindruck böse getrübt, allerdings glaube ich weiterhin dass andere Systeme nicht besser sind. Höchstens ‚anders Scheiße‘. :-)

Was passiert ist? Ich habe endlich mal den angestaubten Apache einspunktirgendwas durch einen hypermodernen Apache 2 ersetzt. Das hat im Wesentlichen gut funktioniert, mit einem kleinen Dämpfer: ich benutze SysCP um den Server zu verwalten. Das Ding hat eine MySQL-Datenbank, und darin stehen unter anderem meine Mitbenutzer. Also Namen und (verschlüsselte) Passwörter der Leute die auf dem Server was zu sagen haben. Ich habe an einer Stelle verschiedene administrative Tools installiert, auf die eben diese Benutzer zugreifen können sollen. Sowas wie phpMyAdmin, aber auch die Oberfläche von SysCP selbst. Diese Seite war bis dato über libapache-mod-auth-mysql geschützt. Naheliegend, da die Namen und die Passwörter eh in einer Tabelle liegen. Dummerweise gibt es kein libapache2-mod-auth-mysql für Etch, und damit fingen die Probleme an…

Klar, ich hätte mir da eben selbst was stricken können. Wollte ich aber nicht, unter anderem weil absehbar ist dass das keine Dauerlösung werden würde. Und genau das ist es, was mich aufregt: Das Modul gab es für Sarge, das gibt es für Sid und das wird es für Lenny auch wieder geben. Nur eben für Etch nicht. Grund ist, dass der Maintainer die Klamotten hin geschmissen hat und zur Zeit der Veröffentlichung von Etch niemand den Job haben wollte. :-(

Naja, viele Versuche und einiges an Nerven später habe ich es dann doch geschafft, wieder gegen die SysCP-Datenbank zu autorisieren. Geholfen hat eine Kurzanleitung die ich hier zu meiner persönlichen Referenz noch mal wieder gebe. Ist zwar eigentlich für Ubuntu, hat aber auch auf Etch geklappt:

To get mysql authentication working in Gutsy, you have to manually compile mod_auth_mysql:

1. wget http://heanet.dl.sourceforge.net/sourceforge/modauthmysql/mod_auth_mysql-3.0.0.tar.gz
2. wget http://www.bleb.org/software/mod_auth_mysql-3.0.0-apache-2.2.3.patch
3. tar zxf mod_auth_mysql-3.0.0.tar.gz
4. apt-get install apache2-prefork-dev libmysqlclient15-dev; apt-get --purge remove libapache2-mod-auth-mysql
5. cd mod_auth_mysql-3.0.0
6. patch < ../mod_auth_mysql-3.0.0-apache-2.2.3.patch
7. sed -i 's|#include <mysql.h>|#include <mysql /mysql.h>|' mod_auth_mysql.c
8. apxs2 -c -lmysqlclient -lm -lz mod_auth_mysql.c
9. apxs2 -i mod_auth_mysql.la
10. echo 'LoadModule mysql_auth_module /usr/lib/apache2/modules/mod_auth_mysql.so' > /etc/apache2/mods-available/auth_mysql.load
11. a2enmod auth_mysql

Configure it as follows (adapt to your environment):

<location /mysqlauth>
  AuthName "test"
  AuthType Basic
  AuthUserFile /dev/null
  AuthBasicAuthoritative Off

  AuthMySQLEnable On
  AuthMySQLAuthoritative On
  AuthMySQLDB apache_auth_test
  AuthMySQLUser authtestuser
  AuthMySQLPassword something
  AuthMySQLUserTable auth
  AuthMySQLNameField username
  AuthMySQLPasswordField passwd
  require valid-user
</location>

Hope this helps someone.

Also mir hat es definitiv geholfen, Dank an mrts. Ich musste nur noch mittels AuthMySQLPwEncryption md5 angeben wie die Passwörter verschlüsselt sind.

Damit ich mir nicht schon wieder das komplette Kommando zusammensuchen muss: Nach einem fröhlichen Aufruf von

remind -lmp12b1 ~/.reminders | rem2ps -i -e -m A4 | lp

fällt ein Kalender für das nächste Jahr aus dem Drucker. Samt aller jetzt bekannten wichtigen Termine natürlich.

Vor einem halben Jahr habe ich mal festgestellt dass ich zwar einer Pokersendung im Fernsehen folgen kann, es aber nicht auf die Reihe kriege selbst zu spielen. Wer darf wann was machen, wer muss wann was machen…? Kann daran liegen dass es mir niemand erklärt hat… ;-)

Um das mal in Ruhe nachvollziehen zu können wollte ich eine passende Software haben, und da bin ich ziemlich schnell bei PokerTH gelandet. Dummerweise gibt es das für mich nicht als Paket, und an der Compilierung bin ich aus irgendwelchen nicht innerhalb einer halben Stunde lösbaren Problemen gescheitert. Mehr Aufwand habe ich da dann auch nicht mehr rein fließen lassen, und seitdem ruhen die Karten.

Ein Blogeintrag von Frank hat die schlafende Idee wieder geweckt, und siehe da: neue Version, neues Glück. Letzteres hatte ich jetzt nämlich immerhin schon beim Compilieren. Beim Spiel hapert es noch: in meiner ersten Runde gegen sieben Computergegner konnte ich nur aus einer Hand was machen… :-)

PokerTHEdit: Ich nehme alles zurück und behaupte das Gegenteil. Nein, compilieren konnte ich wie gesagt. Aber schon die zweite Runde hat deutlich besser geklappt. :-) So, jetzt aber nix wie auf zur Arbeit…

Ist das mein Fehler oder der vom W3C?

Nach meiner Auffassung sollte es legitim sein, wenn ich im HTML-Quelltext eine Art Optischen Trenner der folgenden Form unterbringe:

<!-- ------- -->

Der Validator beim W3C — den ich eigentlich für maßgeblich halten würde — sieht das anders. :-(

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head><title>invalid</title></head>
<!-- ---- -->
<body><p>invalid</p></body>
</html>

Das gleiche passiert wenn ich den Kommentar in die p-Tags verschiebe. Ich halte das aber in beiden Varianten für valides HTML.

Falls tatsächlich der Wurm im W3C-Validator steckt: wem kann man dann noch trauen, heutzutage? Was HTML-Validierung angeht, meine ich. ;-)

Natuerlich kann man davon ausgehen dass jede halbwegs komplexe Software irgendwelche grösseren oder kleineren Fehler enthält. Dass ich aber innerhalb einer Woche gleich über zwei — ich nenne sie mal Ungereimtheiten — stolpere hätte ich nicht erwartet. Zumindest nicht in altehrwürdigen Programmen wie dem allseits beliebten ;-) Editor Vim und dem Mail-Client Mutt.

Der Reihe nach, erstmal der Vim: Mir hat die Tagline sehr gut gefallen, die Frank Terbeck sich gebaut hat. Bis vor einer Woche habe ich mich noch nicht um Tabs im Vim bemüht, mit der FTTablineSet() von Frank wird das alles aber schön übersichtlich. Klappt auch prächtig… im Vim7. Ich habe aber auch noch Rechner mit Debian Woody im Einsatz, da ist noch ein Vim6 drauf. Der kannte noch keine Tabs, da kann das also nichts bringen. Also wie einige andere Funktionen nach der Versionsnummer ausklammern, aber das klappt in diesem Fall nicht.

Ich habe das Problem mal etwas eingedampft. Sobald ich eine Funktion mit einer For-Schleife in der Konfiguration habe kriege ich einen Fehler. Minimal sieht das so aus:

if version >= 700
  function FunctionTest()
    for tabnum in 1
    endfor
    return 1
  endfunction
endif

Das führt im Vim6 beim Start des Editors zu folgender Ausgabe:

E133: :return außerhalb einer Funktion
Drücken Sie die EINGABETASTE oder geben Sie einen Befehl ein

Täusche ich mich, oder sollte der Vim6 den Teil überhaupt nicht ’sehen‘? Naja, ich denke nicht dass es dafür noch einen Patch gibt der mir auf Woody weiterhelfen wird. Erstmal habe ich mir so beholfen, das funktioniert:

" Zusaetzliche Funktionen fuer Vim ab 7.0.0
if version >= 700
  source ~/.vim/features700.vim
endif

Und als ich Gestern nochmal eine Mail ansehen wollte die ich zu dem Thema geschrieben habe ist mir was merkwürdiges im Mutt aufgefallen. Ich persönlich bin nicht abgeneigt, das einen Fehler zu nennen, aber die FAQ sagt dass das so gewollt ist. Ich frage mich nur ob und wenn ja wie ich das elegant lösen kann.

Ich möchte Kopien meiner ausgehenden Mails monatlich sortiert in Ordnern ablegen. Das macht Sinn, und die Ordnerstruktur passt dann auch schön wenn ich mal mit Squirrelmail darauf zugreife. Also steht in der Konfiguration folgendes:

set record="=INBOX.Sent.date +%Y.%m"

Mein Mutt läuft dauerhaft in einem Screen, wird also in der Regel nur neu gestartet wenn der Rechner neu gestartet wird, was in diesem Fall nur alle paar Monate mal vorkommt — in der Regel nach Stromausfällen. Und die Backticks werden offenbar nur beim Start evaluiert, so dass ausgehende Mails immer im Ordner des Monats landen in dem das Programm gestartet wurde. In der FAQ bei Fefe steht auf die Frage ob das irgendwie mit Bordmitteln geht „No. And that’s on purpose.“ Ich frage mich ob das so immer noch aktuell ist, ich finde das etwas… befremdlich in einem Programm das ansonsten so fein einstellbar ist.

Und eine Cron-Loesung wäre zwar denkbar, aber nicht schön. Wie würde das aussehen? Die Mail-Ordner direkt auf dem Server umverschieben? Geht. Aber auch nur weil ich da Root bin. Ist also nicht allgemein möglich. Und wenn Mutt immer nur nach „Sent“ schreibt, ein Skript sich am Monatsersten per IMAP mit dem Server verbindet und die Ordner umbenennt? Ginge auch, das wäre dann aber nicht mehr kompatibel zur Squirrel-Ordnerstruktur…

Vor einer Weile habe ich aus einer Reihe von JPG-Bildern ein Video zusammengebaut. Dazu habe ich Diascope benutzt, das ist ein sehr nettes kleines Werkzeug dazu. Dabei hat mich unter anderem die Funktionsweise fasziniert: das ist im Prinzip nur ein AWK-Skript. Das erstellt aus einer Beschreibungsdatei ein Shell-Skript, welches wiederum die Tools aufruft die das Video rendern.

Krank, dachte ich. Videos generieren mit einem Texteditor — nichts anderes ist AWK schließlich. Dass vim die Türme von Hanoi lösen kann wusste ich, aber der spielt ja eh in einer Klasse für sich…

Arkanoid als sed-SkriptUnd jetzt das: bei der Suche nach Tips zu sed — einem anderen Texteditor-Tool — finde ich arkanoid.sed. Ein Breakout-Game nach alter Schule, geschrieben vollständig in sed.

Hint: Starten kann man das nach dem Herunterladen mit sed -f arkanoid.sed, es hat mich aber eine Weile gekostet herauszufinden dass dann erst nach Druck auf Enter was passiert. Auch im Spiel wird jede Aktion durch Enter bestätigt.

Das mit den Türmen von Hanoi im vim war vor Jahren einer der Auslöser für mich, den mal genauer in Augenschein zu nehmen. OK, Emacs bringt auch einen Sokoban-Clone mit, aber die Türme waren wirklich nur ein vim-Makro. Jetzt kenne ich auch für die beiden nicht-interaktiven Editoren Skripte mit denen man ungläubige beeindrucken kann. Da fehlen eigentlich nur noch analoge Anwendungen für cut und grep — kennt jemand welche?

Nachtrag: Der Autor von arkanoid.sed scheint auch ein Sokoban in sed implementiert zu haben. Das habe ich aber (noch) nicht ausprobiert…

Screenshot von ScreenNachdem ich mehrfach gefragt worden bin habe ich jetzt einen neuen Bereich in die Linux-Rubrik meiner Seite eingebaut: Dotfiles. Nach und nach werde ich da einige meiner Konfigurationsdateien zur Verfügung stellen. An manchen habe ich ziemlich lange gefeilt, vielleicht sind die für den einen oder anderen von Interesse.

Den Anfang macht meine Konfiguration für GNU Screen. Die ist insofern etwas ungewöhnlich als dass sie ein Helfer-Skript enthält mit dem Systeminformationen wie Akku-Status und IP-Adressen in der Statuszeile angezeigt werden. Mein Windowmanager enthält keine eigene Statuszeile, da ist das der ideale Ort dafür.

Wie immer: Kommentare und Verbesserungsvorschläge werden gern angenommen.