Skip to content

Der Injection-Date:-Header

Das Usenet ist zunehmend in die Bedeutungslosigkeit zurückgefallen - ironischerweise sind die zugrundeliegenden Formate und Protokolle heutzutage aber klarer spezifiziert als das zu seinen Hochzeiten der Fall war. NNTP, das Übermittlungsprotokoll mit der größten Verbreitung, war recht gut definiert, erst in RFC 977 von 1986 und dann zwanzig Jahre später in RFC 3977; außerdem kann man den INN wohl als eine Referenzimplementation betrachten.

Mit dem Nachrichtenformat war es da schon schwieriger: Auf RFC 850 von 1983 folgte RFC 1036 von 1987, der während der Blütezeit des Usenets niemals aktualisiert wurde, obschon es bereits 1993 einen Entwurf für einen Nachfolger gab, den sog. "Son-of-1036" (der erst 2010 als historisches Dokument in Form von RFC 1849 veröffentlicht wurde). Der De-Facto-Standard war dann letztlich "Son-of-1036" mit weitgehend ungeschriebenen Modifikationen aus der Implementierungspraxis, während die USEFOR working group der IETF sich unendlich lange vergeblich mit der Erstellung einer Spezifikation abmühte. Als Ende 2009 dann endlich RFC 5536 "Netnews Article Format" veröffentlicht wurde (der zusammen mit RFC 5537 "Netnews Architecture and Protocols" ein umfassendes Kompendium zur Implementation von Newsservern, -readern und allen möglichen anderen Tools rund um das Usenet bzw. Netnews darstellt), waren die großen Zeiten des Usenets bereits Vergangenheit.

"Der Injection-Date:-Header" vollständig lesen

Fußnoten von MultiMarkDown zu Wordpress konvertieren (und zurück)

Wir Juristen lieben Fußnoten ... oder verwenden sie jedenfalls mit Vorliebe und in großer Zahl und Länge - eine juristische Arbeit ist nur echt, wenn mindestens ein Drittel, besser die Hälfte der jeweiligen Seite oder mehr von einem Fußnotenapparat in Anspruch genommen wird. :-)

Dieses Feeling will man natürlich auch beim Web-Publishing nicht vermissen; hier kommt Wordpress zu Hilfe, gibt es doch verschiedene Plugins für eine Fußnotenverwaltung, von denen mir bisher footnotes am besten gefällt. Man kann seine Fußnoten einfach im Fließtext an der passenden Stelle ergänzen, entweder in eckigen Klammern: ((...)) oder in Tags wie <fn>...</fn> oder ganz anders. Am einfachsten erscheint mir dabei die erstgenannte Möglichkeit, und da das Plugin umfangreiche Anpassungen auch des CSS direkt in der Konfiguration erlaubt, funktioniert das auch recht gut.

Nun schreibe ich meine Blogbeiträge in der Regel in Markdown, und auch das kann Wordpress natürlich verarbeiten. Was liegt also näher, als Blogbeiträge erst in einem Markdown-Editor vorzubereiten und dann am Ende in Wordpress (oder Serenidpity, natürlich) einzufügen? Umso mehr, als auch Scrivener als ein mögliches Ausgabeformat MultiMarkdown kennt?

Das Problem dabei ist allersings, dass Fußnoten zwar in MultiMarkdown (wenn auch nicht in "purem" Markdown) unterstützt werden, das Format da aber anders aussieht; dort ist nämlich an der Stelle, wo das Fußnotenzeichen im Text stehen soll, nicht etwa - wie bei den Wordpress-Plugins - der gesamte Fußnotentext einzufügen, sondern nur ein Platzhalter in der Form [^x], wobei x für eine beliebige Zeichenfolge steht. Die Fußnoten werden dann - wie im Ausgabeformat ja auch - am Ende des Textes in der Form [^x]: ... eingefügt. Das hat zwar den Nachteil, dass man einen Zähler hochzählen muss und Schwierigkeiten bekommt, wenn man eine Fußnoten "zwischendrin" einfügen will, ist aber besser lesbar - und für die Einfügerei hat man ja Tools wie Scrivener, die das bei der Ausgabe automatisch richtig machen.

Nur: wie bekommt man die Fußnoten im MultiMarkdown-Format dann in Wordpress, oder einen Text aus Wordpress wieder in einem verständlichen Format in den Markdown-Editor? Die ersten beiden Male habe ich das von Hand gemacht ... Das geht. Aber es dauert. Und dauert. Und spaßig ist auch anders. Und: wozu gibt es Computer?

Also habe ich nach ein paar Versuchen - und einigen Blicken ins Perl-Kochbuch, das passenderweise ausgerechnet ein Dickhorn-Schaf auf dem Cover hat! - ein kurzes Script zusammengehackt, das erst die vergleichsweise einfache Aufgabe der Konvertierung des Wordpress-Formats ins MultiMarkdown-Format übernommen hat und dann um die Konvertierung in umgekehrter Richtung erweitert wurde, die eigentlich auch gar nicht so richtig komplex ist. Das funktioniert unter Linux wie auch - mit Activestate-Perl - unter Windows und tut seinen Zweck, auch wenn man das Problem sicherlich noch eleganter lösen könnte und es an jeder Fehlerbehandlung (und an Dokumentation bisher auch ...) fehlt.

Wer auch vor diesem Konvertierungsproblem steht und wen der noch rohe Zustand des Scripts nicht abschreckt, der kann sich gerne im Git-Repository bedienen.

Markdown: HTML aus Text erzeugen

Der erste längere (Erläuterungs-)Text, den ich zur Veröffentlichung im Netz verfasst habe, war im September 1998 die Header-FAQ, deren erster Entwurf am 18.09.1998 in der Newsgroup de.admin.net-abuse.mail veröffentlicht wurde und die dann seit dem 15.10.1998 unter dem Titel "E-Mail-Header lesen und verstehen" dort über viele Jahre lang monatlich erschien.

Text- und HTML-Version

Natürlich sollte es zu der monatlich geposteten FAQ auch eine Web-Version geben, die bereits im Oktober entstanden war und deren URL im November 1998 das erste Mal in der FAQ genannt wurde. Und natürlich sollte diese Version auch mit allem Annehmlichkeiten, die HTML für Optik und Funktion bietet, also namentlich Formatierungen und Verlinkungen, ausgestattet sein. Das bedeutete dann umgekehrt aber auch, dass zwei völlig getrennte Versionen desselben Textes zu pflegen waren; insbesondere bei größeren Änderungen und Ergänzung keine wirklich gute Idee. Es musste also eine andere Lösung her: die eine Fassung sollte aus der anderen Fassung generiert werden, oder ggf. beide Fassungen aus demselben Rohtext.

HTML-Dokumente aus Textdokumenten erzeugen

Da mir das Usenet als Publikationsmedium (damals) deutlich näher lag, hatte ich zuerst den Gedanken, die Webseite - also das HTML-Dokument - zumindest im wesentlichen aus dem Textdokument der geposteten FAQ zu erzeugen. Bei entsprechenden Recherchen stieß ich dann auch auf das Tool AscToHTM, das genau diesem Zweck diente und sich auch insbesondere an FAQ-Autoren richtete. Eine Zeit lang habe ich damit auch gearbeitet (und das erzeuge HTML-Dokument dann quasi mit Header und Footer versehen, um es optisch und organisatorisch - Navigation! - in meine damalige Webseitenstruktur einzubinden), aber so wirklich überzeugend war das nicht. Es bedurfte einiger Kompromisse im Layout des geposteten Textes, um die HTML-Generierung überzeugend hinzubekommen, und der Aufwand war doch vergleichsweise groß.

Textdokumente aus HTML-Dokumenten erzeugen

Daher habe ich mich - theoretisch im übrigen völlig richtig - in der Folge davon überzeugen lassen, dass die Vorgehensweise, aus (letztlich) unstrukturiertem Text strukturierten Text (mit Markup) zu erzeugen, bereits gedanklich verfehlt ist und keinen dauerhaften Erfolg haben könne: HTML enthält gegenüber text/plain zusätzlichen Informationsgehalt, Struktur, Markup eben, und aus der Gestaltung des Rohtextes das Markup zu "erraten", ist keine brauchbare Lösung. Daher bin ich danach dann eben den umgekehrten Weg gegangen und habe beschlossen, dass nunmehr die Webversion der FAQ das "Master-Dokument" (oder die Quelle) sein sollte und ich den geposteten Text daraus erzeuge. Information und optische Gestaltung zu kürzen sollte ja vergleichsweise trivial sein. -- Ganz so war es dann erwartungsgemäß doch nicht, denn auch der gepostete "reine" Text sollte ja einigermaßen apart formatiert sein, mit dem was, man an "Formatierungen" in E-Mail und Usenet so gewohnt ist: Zitate eingeleitet mit "|" am Zeilenfang, Hervorhebungen und Betonungen durch *Sternchen* o.ä. und dieser Dinge mehr. Für den Anfang half dazu html2text, damals in C++ geschrieben, mittlerweile durch den verstorbenen Aaron Swartz auch in PYthon reimplementiert, aber ganz zufrieden war ich mit dem Output noch nicht.

Einiges Experimentieren führte dann zu dem folgenden Workflow:

  1. wget http://th-h.de/faq/$1 -O output.html
  2. html2text -nobs -width 70 -rcfile html2text.rc output.html > output.txt
  3. ./wrap.pl &lt; output.txt > wrapped.txt

Und wrap.pl, das (daher der Name) vor allem für den Umbruch auf 70 Zeichen pro Zeile unter Beachtung von (nicht zu umbrechenden Zitaten) zuständig war, sah folgendermaßen aus:

  1. #!/usr/bin/perl</p>
  2.  
  3. <p>use Text::Wrap qw(&amp;wrap $columns);
  4. $columns = 70;</p>
  5.  
  6. <p>while (&lt;>) {
  7.  if (/[-\/]$/) {
  8.   ($zeile, $rest) = /(.+\s)(\S+)$/;
  9.   print "$zeile\n";
  10.   JOINLOOP: while (&lt;>) {
  11.    $rest .= $_;
  12.    last JOINLOOP if (/^$/);
  13.   }
  14.   $rest =~ s/\n/ /g;
  15.   $_ = wrap('', '', $rest)."\n";
  16.  };
  17. print $_;
  18.  if (/^[|>:]/) {
  19.   QUOTELOOP: while (&lt;>) {
  20.    chomp;
  21.    if (/^$/) {
  22.     print "\n";
  23.     last QUOTELOOP;
  24.    } elsif (/^[|>:]/) {
  25.     print "\n$<em>";
  26.    } else {
  27.     print $</em>;
  28.    }
  29.   };
  30.  };
  31.  print "\n";
  32. };

Das ließ sich jetzt durchaus automatisieren; andererseits gefiel es mir nicht wirklich, dass die Quelle des Textes nun ein HTML-Dokument war und ich erst längere Konversionsprozesse laufen lassen musste, um zu überprüfen, ob auch die (aus meiner Sicht immer noch primäre) Textfassung ordentlich aussah. Und HTML schreiben ist auch deutlich aufwendiger als "Klartext", selbst wenn man sich durch geeignete Editoren beim Einfügen der passenden Tags (und deren Schließen!) unterstützen lässt.

Die Lösung?

Am Ende habe ich, glaube ich, einfach wieder beide Texte getrennt gepflegt oder, wahrscheinlicher, die FAQ (erst einige Zeit nicht mehr richtig aktualisiert und dann) gar nicht mehr gepostet; sowohl das Spam-Problem (jedenfalls der Wunsch, Spam nachzuverfolgen und zu melden) als auch das Usenet waren dabei, in die Bedeutungslosigkeit abzurutschen.

"Markdown: HTML aus Text erzeugen" vollständig lesen

newsstats 0.01 released

Unter usenet.dex.de stellt Cornell Binder Graphen über die Nutzung der verschiedenen Newsgroup der deutschsprachigen Usenethierachie de.* seit 1992 bereit. Ende 2009 versiegte aber offenbar der Rohdatenstrom, den bis dahin die FU Berlin - wohl über den dort betriebenen Dienst DFNNetNews - angeliefert hatte. Daher bin ich damals kurzfristig in die Bresche gesprungen und habe mit dem von mir betriebenen Newsserver news.szaf.org die Anlieferung der Daten übernommen.

Das dazu begonnene Projekt destat habe ich knapp ein Jahr später unter dem Namen newsstats weitergeführt. Die Entwicklung stagnierte - nach einigen Verbesserungen, namentlich der zuverlässigen Erfassung von Crossposts - allerdings schnell und wurde erst im Mai 2012 (nach einem weitgehenden Rewrite) fortgesetzt. Seitdem (und ab Januar 2012 zurückgehend) veröffentliche ich monatliche Postingstatistiken in der Newsgroup de.admin.news.misc, die aus dem vermittels newsstats erzeugten Datenbestand stammen, und versorge auch usenet.dex.de regelmäßig mit aktuellen Daten.

Erst jetzt, anderthalb Jahre später und rund drei Jahre nach den ersten Ansätzen, komme ich aber dazu, erstmals eine Fassung von newsstats als Version 0.01 zu veröffentlichen. Das Paket steht auf meiner Downloadseite zur Verfügung und kann auch aus dem Git-Repository heruntergeladen werden.

newsstats speichert statistische (Roh-)Daten live aus einem INN-Feed, die dann (monatlich) ausgewertet werden können, und kann daraus Statistiken - bspw. (und derzeit ausschließlich) über die Anzahl von Postings pro Newsgroup - erzeugen. Weitere Statistiken - einspeisende Server, Newsreader, ... - soll(t)en (ursprünglich) später einmal hinzukommen.

[Dieser Eintrag wurde nachträglich im Mai 2014 veröffentlicht.]

checkmail 0.5 released

Nach einem guten Jahr habe ich mal wieder Zeit zu einer kleinen Änderung in checkmail gefunden, die ich dann sogleich als Version 0.5 released habe.

checkmail überprüft die ihm übergebenen E-Mail-Adressen nun zunächst auf syntaktische Richtigkeit (wobei allerdings auf der Domain-Seite keine in eckigen Klammern stehenden IP-Adressen akzeptiert werden), bevor er weitere Tests damit durchführt.

Die Dokumentation wurde entsprechend aktualisiert.

Die aktuelle Version steht jeweils auf meiner Downloadseite zur Verfügung.

yapfaq 0.9.1 (Bugfix-Release)

Ich habe heute die Version 0.9.1 von yapfaq released, die einen Fehler der bisherigen Version 0.9 behebt:

  • Im Test-Modus (-t) wurde teilweise fälschlich eine leere Headerzeile "X-Supersedes:" hinzugefügt.

Die aktuelle Version steht jeweils auf meiner Downloadseite zur Verfügung.

yapfaq 0.9 released

Ich habe heute die bereits seit Juni im Prinzip fertige neue Version 0.9 von yapfaq released, die im Vergleich zur bisherigen Version 0.8.2 nur wenige Änderungen aufweist:

Packaging geändert

Neue Versionen von yapfaq können jetzt einfach durch Kopieren des Tarballs über die vorherige Version installiert werden, ohne die Konfiguration zu überschreiben; Beispiel-Konfigurationsdateien sind entsprechend umbenannt.

Kleine Änderungen an den Headern der erzeugten Postings

Das Standard-Format für die Message-ID hat sich geändert; nunmehr wird das internationale Datumsformat verwendet.

Wenn im Subject:-Header ein Platzhalter für die letzte Änderung der FAQ vorgesehen ist, wird dieser ersatzlos entfernt, falls das Änderungsdatum nicht extrahiert werden kann, bleibt also nicht mehr einfach stehen.

Und schließlich werden Test-Postings jetzt als solche gekennzeichnet, sie enthalten keinen Supersedes:-Header mehr, sondern nur noch eine entschärfte Version, und ihre Message-ID enthält nunmehr zwingend einen Timestamp, um mehrfache Tests - am selben Tag - zu ermöglichen.

Die Dokumentation wurde entsprechend aktualisiert.

Die aktuelle Version steht jeweils auf meiner Downloadseite zur Verfügung.

checkmail 0.4 released

Nach dem gestrigen Release der praktisch komplett neu geschriebenen Version 0.3 von checkmail kann ich heute die Version 0.4 von checkmail ankündigen, die die eigentlich geplanten Änderungen enthält.

checkmail erkennt temporäre Fehler - bspw. auch beim Greylisting - jetzt als solche, statt diese E-Mail-Adressen als nicht zustellbar zu definieren; außerdem werden in jedem Fall die Antworten des Mailservers standardmäßig ausgegeben.

Überdies kann checkmail jetzt selbst eine tatsächlich zufällige - und damit mit hoher Sicherheit nicht zustellbare - E-Mail-Adresse erzeugen, wenn geprüft werden soll, ob der betreffende Mailserver überhaupt schon im SMTP-Dialog die Zustellbarkeit überprüft (ansonsten sind positive Antworten keine Garantie für die Existenz der geprüften Adresse). Die übrigen Konfigurationsangaben (der zu verwendende Absender und die Angaben für HELO/EHLO) können nun nicht nur im Script definiert, sondern auch auf der Kommandozeile übergeben werden.

Die Dokumentation wurde entsprechend aktualisiert.

Die aktuelle Version steht jeweils auf meiner Downloadseite zur Verfügung.

checkmail 0.3 released

Nach rund 5 Jahren Pause habe ich nunmehr eine neue Version 0.3 von checkmail released, einem Kommandozeilen-Tool zur Überprüfung der Zustellbarkeit von E-Mail-Adressen.

Im Prinzip wurde das Script komplett neu geschrieben, modularisiert, neu strukturiert und in den Kommentaren vereinheitlicht. Außerdem habe ich die Ausgaben neu gefaßt und ausführlicher gemacht; MXe werden jetzt zuverlässig in der nach dem DNS vorgegebenen Reihenfolge ausprobiert, Multi-Line-Antworten ordnungsgemäß protokolliert und der Exit-Status bei der Batch-Verarbeitung von Adressen sinnvoll gesetzt (womit zugleich eine Veränderung der Bedeutung des Exit-Status verbunden war).

Außerdem wurde die Dokumentation im POD-Format in das Script integriert und ins Englische übersetzt und ein Changelog hinzugefügt.

Die aktuelle Version steht jeweils auf meiner Downloadseite zur Verfügung.

yapfaq 0.8 released

Soeben habe ich eine neue Version 0.8.1 von yapfaq released, die im Vergleich zur bisherigen Version 0.7 nur noch vergleichsweise kleine Änderungen aufweist:

PGP-/GPG-Support entfernt

Die Unterstützung für das Signieren von Postings ist ersatzlos entfallen. Es bestehen ausreichende Möglichkeiten, dies extern zu lösen, bspw. über tinews.pl; daher gibt es keinen Anlaß, den dort enthaltenen Code in yapfaq zu duplizieren. Seit der letzten Version ist der Aufruf - bspw. - von tinews.pl direkt aus yapfaq heraus möglich.

Konfiguration

Die in der Konfigurationsdatei yapfaq.cfg mögliche Definition des Schemas für die Erzeugung der Message-ID kann jetzt auch einen Platzhalter für einen Unix-Timestamp enthalten.

Außerdem kann die in der letzten Version hinzugefügte Möglichkeit, zum Posten ein externes Programm zu verwenden, nunmehr auch in der Konfigurationsdatei .yapfaqrc definiert werden, nicht nur über den Kommandozeilenparameter "-s".

Kleinere Änderungen und Fehlerbehebung

In der Konfigurationsdatei yapfaq.cfg wurden optionale Einstellungen als solche gekennzeichnet und auskommentiert, außerdem die Optionen mit einheitlichen Erläuterungen als Kommentar versehen.

Die Dokumentation wurde um bisher fehlende Optionen und die Erläuterung der voranstehenden ergänzt. Außerdem enthält sie jetzt Links zum Git-Repository und zum Bugtracker.

Die aktuelle Version steht jeweils auf meiner Downloadseite zur Verfügung.

Update: Nachdem Version 0.8 nicht lauffähig war, ist dieser Fehler in Version 0.8.1 behoben.

yapfaq 0.7 released

Gestern habe ich eine neue Version 0.7 von yapfaq released. Im Vergleich zur Version 0.6.2 ergeben sich folgende wesentlichen Änderungen und Neuerungen:

Konfiguration über .rc-Datei

Es sind keine Einstellungen in yapfaq.pl selbst mehr erforderlich; alle Konfigurationsparameter - zu nutzender Newsserver, Benutzername und Paßwort für diesen, etc. pp. - können jetzt in der Datei .yapfaqrc eingestellt und geändert werden.

Außerdem kann über den neuen Kommandozeilenparamter "-c" eine andere .rc-Datei übergeben werden; auf diese Weise lassen sich bspw. durch Angabe unterschiedlicher .cfg-Dateien in verschiedenen .rc-Dateien auch verschiedene FAQ-Sammlungen durch yapfaq bearbeiten.

Posten über externes Programm

Statt die FAQs durch yapfaq selbst posten zu lassen können diese nunmehr auch per Pipe an ein externes Programm weitergegeben werden, das durch den neuen Kommandozeilenparamter "-s" definiert wird, bspw. inews aus dem INN-Paket oder den mächtigeren Ersatz tinews.pl, den man von ftp.tin.org herunterladen kann. Selbstverständlich kann dieses externe Programm auch cat, mail o.ä. sein - je nachdem, was man erreichen möchte.

Kleinere Änderungen und Fehlerbehebung

Der Kommandozeilenparamter "-h" gibt jetzt nicht mehr nur Version und Kommandozeilenparameter aus, sondern stattdessen die komplette man-Page; Version und Copyright erhält man über den neuen Kommandozeilenparamter "-V" ausgegeben.

Die Statusinformationen - letztes Posting der FAQ und dessen Message-ID - werden jetzt nur noch nach erfolgreichem Posten (bzw. wenn das mit "-s" aufgerufene Programm den Exitcode "0" zurückgibt) gespeichert.

Ein Anmeldeversuch am Newsserver erfolgt nur noch, wenn ein Benutzername gesetzt ist.

Und schließlich ist die Angabe des Formats für die Message-ID jetzt optional; für den Default wird der Hostname des Systems als FQDN herangezogen. Bei ungültigen Angaben für Expires und Message-ID-Format wird jetzt korrekt der Default eingesetzt; außerdem finden beim Laden der Konfigurationsdatei (standardmäßig yapfaq.cfg) nunmehr weitere Überprüfungen statt.

Die aktuelle Version steht jeweils auf meiner Downloadseite zur Verfügung.

yapfaq 0.6.2 released

Wie am Wochenende schon angekündigt, habe ich yapfaq in den letzten Tagen etwas weiterbearbeitet. Version 0.6 (bzw., aufgrund einiger kleiner Fehler im ersten Release, Version 0.6.2) enthält neben einigen kleineren Änderungen vor allem folgende Erweiterungen:

Variabler Expires:-Header

Die bisherige Version hat einen Expires:-Header von drei Monaten gesetzt; dieser Wert ist nunmehr konfigurierbar.

Kommandozeilen-Parameter

yapfaq nimmt jetzt einige Kommandozeilen-Parameter entgegen. So können mittels "-v" Informationen über den Programmablauf ausgegeben werden; mit dem Parameter "-f" kann die Abarbeitung auf die genannte FAQ beschränkt werden, yapfaq arbeitet dann also nicht alle FAQs ab. Außerdem kann mit "-p" das Posten aller - oder einer - FAQ(s) erzwungen werden, auch wenn diese eigentlich noch nicht fällig ist; am sinnvollsten ist das im Zusammenhang mit "-f". Die Parameter "-d" und "-t" ermöglichen Tests: "-d" führt zu einem reinen Simulationslauf, bei dem nichts gepostet wird, so daß bspw. getestet werden kann, welche FAQs zum Posten anstehen würden. "-t" ermöglicht es, die FAQ nicht in die eigentlich vorgesehene(n) Gruppe(n) zu posten, sondern stattdessen in eine Testgruppe oder auf die Konsole auszugeben, um zu prüfen, wie ein Posting aussehen würde.

Die aktuelle Version steht jeweils auf meiner Downloadseite zur Verfügung.

POD - plain old documentation

Perl bietet eine recht interessante und bequeme Art, die Dokumentation zu einem Script oder Modul in den Programmcode einzubetten: POD, "plain old documentation".

Dieses Format ermöglicht es, die Dokumentation jeweils beim Code einzubetten oder doch zumindest am Ende des Programmcodes in derselben Datei zu speichern. Diese Dokumentation kann dann mittels perldoc angezeigt oder mit Hilfe von entsprechenden Tools in andere Formate - Klartext, HTML, man pages etc. - konvertiert werden, so daß die Dokumentation aus dem Sourcecode selbst erzeugt werden kann.

Mehr Informationen dazu:

yapfaq - yet another postfaq

Es gibt eine ganze Reihe von Lösungen, um FAQs automatisiert und regelmäßig ins Usenet zu posten:

Zum einen kann man dafür auto-faq von Ian Kluft und Paul W. Schleck nutzen, ein Perl-Script, das ich seit Ende der Neunziger für das automatische Posten diverser FAQs verwende. Es besteht aus einer Konfigurationsdatei, in der für jede FAQ definiert wird, wie sie nach wo gepostet wird. Die einzelnen FAQs sind als Textdateien abgelegt, über die Konfigurationsdatei werden die einzelnen Header und Pseudo-Header festgelegt; Message-IDs, Expires:- und Supersedes:-Header werden automatisch erzeugt. Gepostet werden die FAQs, deren Namen bei Aufruf des Scripts übergeben werden; das läßt sich via cron automatisieren, wobei für jede FAQ ein eigener crontab-Eintrag benötigt wird. auto-faq bietet einen ganzen Haufen an Optionen, hat aber den Nachteil, zum Posten zwingend inews - aus dem INN-Paket - oder vergleichbare Tools zu verwenden; außerdem bietet es eine Unzahl von Funktionen, namentlich auch zum Posten vielteiliger FAQs, die aber - jedenfalls für mich - keine Relevanz hatten. Und auto-faq wurde 1992 entwickelt und hat seit 1999, also seit über 10 Jahren, keine Änderung mehr erfahren ...

Eine Alternative dazu stellt postfaq von Russ Allbery dar, gleichfalls in Perl implementiert. postfaq verfolgt ein anderes Konzept: hinterlegt in einer Textdatei wird hier nicht nur der Body der FAQs, sondern das komplette Posting einschließlich aller Headerzeilen. Konsequenterweise wird eine gesonderte Konfigurationsdatei nicht benötigt. Auch postfaq erzeugt die notwendigen Headerzeilen und postet die beim Aufruf angegebenen FAQs, was via cron automatisiert werden kann; es benötigt dazu aber keine externen Programme wie inews o.ä. Es wird aktiv gepflegt (letzte Änderung 2008).

Und eine weitere Möglichkeit ist yapfaq ("yet another postfaq"), ein Script von Marc Brockschmidt, das ich vor etlichen Jahren bereits einmal angetestet hatte, jetzt aber nirgendwo mehr wiedergefunden habe. Marc war aber dankenswerterweise so nett, mir die aktuelle Version (letzte Änderung: Februar 2003) zu überlassen; ich plane, yapfaq noch ein wenig für meine Zwecke zu bearbeiten und weiter zu entwickeln, as time permits. Einstweilen steht yapfaq über ein Git-Repository zur Verfügung.

yapfaq arbeitet grundsätzlich vergleichbar zu auto-faq: in einer zentralen Konfigurationsdatei wird definiert, welche FAQs in welchen Abständen wohin gepostet werden sollen. Die einzelnen FAQs sind als Textdateien abgelegt, wobei die Header durch das Script beim Posten gesetzt und ergänzt werden. Im Unterschied zu auto-faq postet yapfaq aber nicht nur eine bestimme FAQ, sondern alle FAQs, die "dran" sind, die also zuletzt vor - mindestens - dem definierten Zeitraum gepostet wurden. Es ist also nicht notwendig, für jede FAQ einen eigenen crontab-Eintrag zu definieren; vielmehr kann man yapfaq einfach täglich aufrufen, und jede FAQ wird dann gepostet, soweit sie "fällig" ist.

INN: Authentifizierung gegen MySQL-Datenbank

INN bietet vielfältige Möglichkeiten der Benutzerauthentifizierung an. Wenn man einer größeren Anzahl von Benutzern einen Zugang einräumen will, bietet es sich an, die notwendigen Daten - Benutzerkennung, Paßwort, etc. - in einer Datenbank zu halten, bspw. in einer MySQL-Datenbank.

Eine denkbare Lösung dafür, die neben Benutzerkennung und Paßwort auch Namen und E-Mail-Adresse des Benutzers erfaßt sowie ein Flag für aktive/inaktive Benutzer und eine Trennung nach verschiedenen Zugriffsstufen kennt sowie den Zeitpunkt des letzten Logins festhält, möchte ich hier vorstellen. Dazu gehört über das hier vorgestellte Script für den INN hinaus natürlich noch ein passendes (Web-)Interface, mit dem Benutzer angelegt und gelöscht sowie Paßworte geändert werden können etc.

Die Datenbankstruktur sieht folgendermaßen aus:

CREATE TABLE IF NOT EXISTS `users` (
  `userid` int(11) NOT NULL auto_increment,
  `user` varchar(16) collate latin1_bin NOT NULL default '',
  `password` varchar(16) collate latin1_bin NOT NULL default '',
  `active` tinyint(1) NOT NULL default '1',
  `username` varchar(60) collate latin1_bin default NULL,
  `usermail` varchar(60) collate latin1_bin default NULL,
  `domain` varchar(40) collate latin1_bin default '&lt;EDITME&gt;',
  `llo` date default NULL,
  PRIMARY KEY  (`userid`),
  UNIQUE KEY `user` (`user`)
);

Die Felder sollten weitgehend selbsterklärend sein; "llo" steht für "last logged in".

"INN: Authentifizierung gegen MySQL-Datenbank" vollständig lesen
tweetbackcheck