<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>Netz - Rettung - Recht (Artikel mit Tag perl)</title>
    <link>https://netz-rettung-recht.de/</link>
    <description>Netzleben, Rettungs- und Rechtswesen</description>
    <dc:language>de</dc:language>
    <generator>Serendipity 2.5.0 - http://www.s9y.org/</generator>
    <pubDate>Wed, 04 May 2022 09:20:56 GMT</pubDate>

    <image>
    <url>https://netz-rettung-recht.de/templates/2k11/img/s9y_banner_small.png</url>
    <title>RSS: Netz - Rettung - Recht - Netzleben, Rettungs- und Rechtswesen</title>
    <link>https://netz-rettung-recht.de/</link>
    <width>100</width>
    <height>21</height>
</image>

<item>
    <title>Base64 ist schlecht zu lesen</title>
    <link>https://netz-rettung-recht.de/archives/2410-Base64-ist-schlecht-zu-lesen.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2410-Base64-ist-schlecht-zu-lesen.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2410</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2410</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Bereits im vergangenen Juli hatte ich berichtet, dass ich die Moderation der Newsgroup &lt;em&gt;de.alt.netdigest&lt;/em&gt; übernommen hatte, und auch ein wenig den von mir verwendeten &lt;a href=&quot;https://netz-rettung-recht.de/archives/2315-de.alt.netdigest-Hinter-den-Kulissen.html&quot; title=&quot;&quot;&gt;Workflow&lt;/a&gt; vorgestellt.&lt;/p&gt;

&lt;p&gt;Das Konversions-Script, das aus einer Einreichung per E-Mail ein Posting für die Newsgroup macht, konvertiert auch den Inhalt der Mail (des Postings) nach UTF-8 und entfernt eine ggf. vorhandene &lt;code&gt;quoted-printable&lt;/code&gt;-Kodierung. Beim Thema &amp;#8220;Konvertierung&amp;#8221; musste ich schon im November letzten Jahres einmal ansetzen, um im Subject:-Header UTF-8-Zeichen &amp;#8220;oberhalb&amp;#8221; von &lt;code&gt;0xff&lt;/code&gt; korrekt zu kodieren; Anfang diesen Jahres stand ich dann aber zum ersten Mal vor einer E-Mail, deren Body - also der eigentliche Inhalt - als &lt;a href=&quot;https://de.wikipedia.org/wiki/Base64&quot; title=&quot;&quot;&gt;Base64&lt;/a&gt; kodiert war. Eigentlich vorgesehen zur Kodierung binärer Inhalte ist das eine durchaus zulässige Kodierung für reinen Text - nur etwas schwer lesbar. Und da das vom Konversions-Script generierte Posting mit&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;gepostet wird, war das etwas blöd.&lt;/p&gt;

&lt;p&gt;Glücklicherweise war die Lösung hinreichend einfach: so, wie man &lt;code&gt;quoted-printable&lt;/code&gt; nach &lt;code&gt;8bit&lt;/code&gt; umkodiert, kann man das auch mit &lt;code&gt;base64&lt;/code&gt; machen. Es braucht nur &lt;code&gt;MIME::Base64&lt;/code&gt; zusätzlich zu &lt;code&gt;MIME::QuotedPrint&lt;/code&gt;, und zum bedarfsweisen Aufruf von &lt;code&gt;decode_qp()&lt;/code&gt; im Fall der Fälle einen Aufruf von &lt;code&gt;decode_base64()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Das war einfach, und nunmehr bin ich auch auf solche seltsamen Formate gerichtet.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Nachträglich veröffentlicht im April 2022.]&lt;/em&gt;&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Tue, 05 Apr 2022 04:45:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2410-guid.html</guid>
    <category>perl</category>
<category>usenet</category>

</item>
<item>
    <title>de.alt.netdigest: Hinter den Kulissen</title>
    <link>https://netz-rettung-recht.de/archives/2315-de.alt.netdigest-Hinter-den-Kulissen.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2315-de.alt.netdigest-Hinter-den-Kulissen.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2315</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2315</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;&lt;em&gt;de.alt.netdigest&lt;/em&gt; ist eine moderierte Newsgroup; das bedeutet, dass Postings nicht direkt in der Gruppe veröffentlicht werden, sondern per E-Mail an einen Moderator versandt werden, der dann - wenn nichts gegen eine Veröffentlichung spricht - aus dieser E-Mail wieder ein Posting macht und es veröffentlicht. Das geht natürlich im Grundsatz mit einem Mail- und Newsreader, wäre aber vergleichsweise aufwendig; meistens werden daher per Mail oder über ein Webinterface betriebene Moderationssysteme (oder &amp;#8220;Bots&amp;#8221;) verwendet.&lt;/p&gt;

&lt;p&gt;Für &lt;em&gt;de.alt.netdigest&lt;/em&gt; gibt es keine so komplexen Lösungen; im Prinzip müssen ja nur die per Mail eingereichten Beiträge ausgewählt, in ein bestimmtes Format gebracht und dann veröffentlicht werden. Dabei hilft eine Reihe von Scripts, die ich von meinem Vorgänger als Moderator übernommen und an meine Bedürfnisse angepasst habe - genau genommen habe ich auf der Basis der Scripts und aus Versatzstücken daraus meine eigene Lösung erstellt.&lt;/p&gt;

&lt;p&gt;Für erste Aufgabe, das Auswählen der per Mail eingereichten Postings für eine Veröffentlichung, lässt sich bequem in einem Mailclient lösen; ich verwende wie Holger, der bisherige Moderator von &lt;em&gt;de.alt.netdigest&lt;/em&gt;, zu diesem Zweck &lt;em&gt;Thunderbird&lt;/em&gt;. Holger hat die ausgewählten Postings dann in einen Unterfolder verschoben, die entsprechende Datei mit einem Script zur Konvertierung bearbeitet, dass die einzelnen Mails/Postings umformatiert und in eine neue Datei schreibt, aus der sie dann mit einem weiteren Script gepostet werden können. Die eindeutigen IDs der geposteten Einreichungen werden zur Vermeidung von Duplikaten gespeichert und die fertigen Mails archiviert und später gelöscht.&lt;/p&gt;

&lt;p&gt;Diesen Workflow habe ich im Prinzip beibehalten, aber mit einigen Abweichungen. Zum einen nutze ich keinen &lt;em&gt;Thunderbird&lt;/em&gt;-Folder, sondern ein Verzeichnis auf dem IMAP-Server; zum anderen (und das ist vermutlich der wesentliche Unterschied) veröffentliche ich die ausgewählten Postings nicht live, sondern schiebe sie in eine Warteschlange, aus der jeden Tag eine bestimmte Anzahl veröffentlicht wird, ganz ohne mein Zutun. Das führt zu einem gleichmäßigeren Nachschub, und vor allem vermeidet es, dass Veröffentlichungen in der Gruppe unmittelbar von meinem Zeitbudget abhängig sind. Ich kann Einreichungen &amp;#8220;schubweise&amp;#8221; bearbeiten, wenn ich einmal am Stück Zeit habe, und mit ihnen die Warteschlange befüllen, die dann auch mal einige Tage (während des Abbaus des von Holger übernommenen Vorrats: einige Wochen) ohne Nachschub auskommt.&lt;/p&gt;

&lt;h3 id=&quot;auswahl&quot;&gt;Auswahl&lt;/h3&gt;

&lt;p&gt;Zum Auswählen verschiebe ich mit &lt;em&gt;Thunderbird&lt;/em&gt; die Beiträge, die veröffentlichungswürdig sind, aus dem Posteingang der Submissionsadresse in einen IMAP-Folder namens &amp;#8220;auswahl&amp;#8221;. Spam und ungeeignete Beiträge oder ersichtliche Duplikate kann ich löschen oder anderweitig archivieren; auch könnte ich E-Mails direkt beantworten oder in einem anderen IMAP-Folder (auch in einem anderen IMAP-Konto) verschieben.&lt;/p&gt;

&lt;h3 id=&quot;konvertierung&quot;&gt;Konvertierung&lt;/h3&gt;

&lt;p&gt;Als Quelle für die Weiterverarbeitung dient mir nicht eine Datei, in der die einzelnen Mails (bspw. im &lt;em&gt;MBOX&lt;/em&gt;-Format) zusammengefasst sind, sondern unmittelbar der IMAP-Folder im &lt;a href=&quot;https://de.wikipedia.org/wiki/Maildir&quot; title=&quot;&quot;&gt;&lt;em&gt;Maildir&lt;/em&gt;&lt;/a&gt;-Format. Das Konvertierungsscript &lt;code&gt;convert.pl&lt;/code&gt; liest die einzelnen Mails ein und schreibt sie nach Konvertierung in ein Datenverzeichnis &lt;code&gt;data/auswahl/&lt;/code&gt;. Zuvor werden die in einzelnen, nach Jahren geordneten Dateien gespeicherten Message-IDs der bereits veröffentlichten Postings eingelesen und die IDs der neuen, zur Veröffentlichung vorgesehenen Postings mit dieser Liste abgeglichen. Wurde das Posting bereits veröffentlicht, oder enthält die Einreichung keine Message-ID, wird die entsprechende Datei nicht kopiert und eine Fehlermeldung ausgegeben; ansonsten wird die Message-ID auf &lt;code&gt;STDOUT&lt;/code&gt; ausgegeben. Die veröffentlichungsfähigen Beiträge im Datenverzeichnis können jetzt mit einem Texteditor eingesehen und ggf. nachbearbeitet werden.&lt;/p&gt;

&lt;p&gt;Die Dateien, die nicht ins Datenverzeichnis kopiert wurden, können im Falle von Duplikaten einfach im IMAP-Folder verbleiben; sie sollen ja nicht noch einmal veröffentlicht werden. Fehlt ihnen eine Message-ID oder bestehen andere Probleme, kann auch die Datei im IMAP-Folder entsprechend bearbeitet und bspw. die Message-ID herausgesucht und ergänzt werden. Ist das zuviel Aufwand, kann die Datei ebenfalls schlicht dort verbleiben; sie wird dann eben später nicht veröffentlicht.&lt;/p&gt;

&lt;p&gt;Wenn nach dem ersten Durchlauf des Konvertierungsscripts Änderungen am Inhalt des IMAP-Folders vorgenommen wurden, kann man es einfach noch einmal starten; es kopiert dann wieder alle veröffentlichungsfähigen Beiträge in das Datenverzeichnis, möglicherweise diesmal auch die nachbearbeiteten.&lt;/p&gt;

&lt;p&gt;Zur Bearbeitung gehört:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Das Verwerfen aller Mail-Header außer dem Absender (&amp;#8220;From:&amp;#8221; und ggf. &amp;#8220;Reply-To:&amp;#8221;), der den Einreicher wiedergibt.&lt;/li&gt;
&lt;li&gt;Das Erstellen eines Betreffs (&amp;#8220;Subject:&amp;#8221;) aus dem Betreff des eingereichten Postings und der in eckigen Klammern vorweggestellten Newsgroup, aus der die Einreichung stammt, samt korrekter Kodierung (&lt;em&gt;MIME encoded words&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;Das Konvertieren des Inhalts (Body) des eingereichten Postings nach UTF-8 ohne &lt;code&gt;quoted-printable&lt;/code&gt;-Kodierung.&lt;/li&gt;
&lt;li&gt;Das Entfernen von Leerzeilen am Ende des eingereichten Postings.&lt;/li&gt;
&lt;li&gt;Das Herausschreiben eines veröffentlichungsfähigen Postings, das so 1:1 eingespeist werden kann.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Das Konvertierungsscript kann auch statt aller nur eine bestimmte Mail aus dem IMAP-Folder lesen oder - statt die Mails aus dem IMAP-Folder zu lesen - die bereits ins Datenverzeichnis kopierten Beiträge neu einlesen und nochmal konvertieren; das macht zum Beispiel Sinn, wenn nach dem ersten Durchlauf noch Änderungen vorgenommen wurden (oder im Script nachgebessert werden musste &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; class=&quot;emoticon&quot; /&gt;). Außerdem kann die Prüfung auf Duplikate unterdrückt werden, und es kann auch nur die Message-IDs der veröffentlichungsfähigen Beiträge ausgeben, ohne sie zu (kopieren und zu) konvertieren.&lt;/p&gt;

&lt;p&gt;Sind die Beiträge im Datenverzeichnis veröffentlichungsreif, kann man sie in die Warteschlange - ein anderes Datenverzeichnis - verschieben. Sinnigerweise sollten dann die Message-IDs der nun zur Veröffentlichung bereitstehenden Beiträge in die Liste für den Duplikatcheck aufgenommen werden.&lt;/p&gt;

&lt;h3 id=&quot;ver-ffentlichung&quot;&gt;Veröffentlichung&lt;/h3&gt;

&lt;p&gt;Die Veröffentlichung ist vergleichsweise einfach - vor allem deshalb, weil ich dafür keinen eigenen Code geschrieben habe, sondern schlicht das Allzweckwerkzeug &lt;a href=&quot;ftp://ftp.tin.org/pub/news/clients/tin/tools/tinews.pl&quot; title=&quot;&quot;&gt;&lt;code&gt;tinews.pl&lt;/code&gt;&lt;/a&gt; verwende, das sich auch um das Anhängen der Signatur und die GPG-Headersignatur kümmert.&lt;/p&gt;

&lt;p&gt;Das Postingscript &lt;code&gt;post.pl&lt;/code&gt; kann daher auch nur zwei Dinge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eine zufällig ausgewählte Datei aus der Warteschlange (oder eine als Parameter übergebene bestimmte Datei) vermittels &lt;code&gt;tinews.pl&lt;/code&gt; posten.&lt;/li&gt;
&lt;li&gt;Optional vorher Datum und Message-ID neu setzen (denn die wurden ja ursprünglich bei der Konvertierung neu erzeugt, die zu diesem Zeitpunkt Tage, im Extremfall auch Wochen zurückliegen kann).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;workflow&quot;&gt;Workflow&lt;/h3&gt;

&lt;p&gt;Aus diesen Bausteinen entsteht folgender Workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auswählen der zur Veröffentlichung vorgesehenen Einreichungen im Posteingang und Verschieben in den Auswahl-IMAP-Ordner.&lt;/li&gt;
&lt;li&gt;Starten von &lt;code&gt;convert.pl&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ggf. Nachbearbeiten fehlerhafter Einreichungen (im IMAP-Folder) und erneuter Konvertierungslauf, bis alle Beiträge ohne Fehlermeldung kopiert werden bzw. Fehlermeldungen nur noch Duplikate betreffen.&lt;/li&gt;
&lt;li&gt;Durchsicht aller Postings im Datenverzeichnis im Texteditor (&lt;em&gt;vim&lt;/em&gt; auf der Shell, alternativ auch &lt;em&gt;Sublime Edit&lt;/em&gt; oder ein anderes Tool via &lt;em&gt;SCP&lt;/em&gt;): Stimmen Umlaute und Sonderzeichen, passt der Zeilenumbruch, sieht alles richtig aus? Wurde der Betreff richtig erzeugt?&lt;/li&gt;
&lt;li&gt;Verschieben aller Beiträge in die Warteschlange, speichern der Message-IDs für den Duplikatcheck.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Für den letzten Schritt verwende ich ein simples Shellscript:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/bin/bash
~/bin/convert.pl -rm &amp;gt;&amp;gt; ~/data/mid-2021.txt
mv ~/data/auswahl/* ~/data/fertig/
mv ~/mail/.INBOX.auswahl/cur/* ~/mail/.INBOX.fertig/cur/
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Der erste Befehl gibt alle Message-IDs der in den veröffentlichungsfähigen Beiträgen enthaltenen Postings aus, ohne sonst irgendeine Konvertierung vorzunehmen; diese werden an die Datei für das laufende Jahr angehängt. Die zweite Zeile verschiebt die Beiträge aus dem Auswahl-Datenverzeichnis in die Warteschlange. Die dritte Zeile kopiert die Mails aus dem IMAP-Folder &amp;#8220;auswahl&amp;#8221; in einen anderen für die erledigten Beiträge.&lt;/p&gt;

&lt;p&gt;Die eigentliche Veröffentlichung erfolgt dann mehrmals täglich über einen Cronjob, der das Postingscript aufruft; solange die Warteschlamge immer nachgefüllt wird, bedarf die eigentliche Veröffentlichung dann keiner Interaktion mehr. Ist die Warteschlange zu voll, können aber natürlich auch durch einen manuellen Aufruf des Postingscripts zusätzliche Beiträge veröffentlicht werden.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Nachträglich veröffentlicht im Oktober 2021.]&lt;/em&gt;&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/2631e9f9cd0f445f88397a2087e3ed9a&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Tue, 06 Jul 2021 20:15:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2315-guid.html</guid>
    <category>perl</category>
<category>usenet</category>

</item>
<item>
    <title>Der Injection-Date:-Header</title>
    <link>https://netz-rettung-recht.de/archives/2037-Der-Injection-Date-Header.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/2037-Der-Injection-Date-Header.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=2037</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=2037</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;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. &lt;em&gt;NNTP&lt;/em&gt;, das Übermittlungsprotokoll mit der größten Verbreitung, war recht gut definiert, erst in &lt;a href=&quot;https://www.eyrie.org/~eagle/nntp/rfcs/rfc977.txt&quot; title=&quot;&quot;&gt;RFC 977&lt;/a&gt; von 1986 und dann zwanzig Jahre später in &lt;a href=&quot;https://www.eyrie.org/~eagle/nntp/rfcs/rfc3977.txt&quot; title=&quot;&quot;&gt;RFC 3977&lt;/a&gt;; außerdem kann man den &lt;em&gt;INN&lt;/em&gt; wohl als eine Referenzimplementation betrachten.&lt;/p&gt;

&lt;p&gt;Mit dem Nachrichtenformat war es da schon schwieriger: Auf &lt;a href=&quot;https://www.ietf.org/rfc/rfc850.txt&quot; title=&quot;&quot;&gt;RFC 850&lt;/a&gt; von 1983 folgte &lt;a href=&quot;https://www.eyrie.org/~eagle/usefor/rfcs/rfc1036.txt&quot; title=&quot;&quot;&gt;RFC 1036&lt;/a&gt; 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. &amp;#8220;Son-of-1036&amp;#8221; (der erst 2010 als historisches Dokument in Form von &lt;a href=&quot;https://www.eyrie.org/~eagle/usefor/rfcs/rfc1849.txt&quot; title=&quot;&quot;&gt;RFC 1849&lt;/a&gt; veröffentlicht wurde). Der De-Facto-Standard war dann letztlich &amp;#8220;Son-of-1036&amp;#8221; mit weitgehend ungeschriebenen Modifikationen aus der Implementierungspraxis, während die &lt;em&gt;USEFOR working group&lt;/em&gt; der &lt;em&gt;IETF&lt;/em&gt; sich unendlich lange vergeblich mit der Erstellung einer Spezifikation abmühte. Als Ende 2009 dann endlich &lt;a href=&quot;https://www.eyrie.org/~eagle/usefor/rfcs/rfc5536.txt&quot; title=&quot;&quot;&gt;RFC 5536&lt;/a&gt; &amp;#8220;Netnews Article Format&amp;#8221; veröffentlicht wurde (der zusammen mit &lt;a href=&quot;https://www.eyrie.org/~eagle/usefor/rfcs/rfc5537.txt&quot; title=&quot;&quot;&gt;RFC 5537&lt;/a&gt; &amp;#8220;Netnews Architecture and Protocols&amp;#8221; 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.&lt;/p&gt;

&lt;h3 id=&quot;implementation-von-rfc-5536&quot;&gt;Implementation von RFC 5536&lt;/h3&gt;

&lt;p&gt;Es dauerte dementsprechend auch seine Zeit, bis die Theorie der RFCs allmählich in die Praxis einzusickern begann. Die ersten Neuerungen fanden sich schon in &lt;em&gt;INN 2.5.0&lt;/em&gt; (von 2009), aber neue Header wie &lt;em&gt;Injection-Info&lt;/em&gt; oder &lt;em&gt;Injection-Date&lt;/em&gt; wurden erst ab &lt;em&gt;INN 2.5.3&lt;/em&gt; (2012) tatsächlich beachtet und erst ab &lt;em&gt;INN 2.6.0&lt;/em&gt; (2015!) erzeugt.&lt;/p&gt;

&lt;p&gt;Damit wurden dann die bisherigen, nie offiziell standardisierten Header &lt;em&gt;NNTP-Posting-Host&lt;/em&gt;, &lt;em&gt;NNTP-Posting-Date&lt;/em&gt; und &lt;em&gt;X-Trace&lt;/em&gt; durch eine klarere Definition des &lt;em&gt;Path&lt;/em&gt;-Headers und die neuen Header &lt;em&gt;Injection-Info&lt;/em&gt; und &lt;em&gt;Injection-Date&lt;/em&gt; ersetzt. Dabei ersetzt &lt;em&gt;Injection-Date&lt;/em&gt; das &lt;em&gt;NNTP-Posting-Date&lt;/em&gt; (also den Zeitstempel der Einspeisung ins Netz per &lt;kbd&gt;POST&lt;/kbd&gt;), wohingegen im Header &lt;em&gt;Injection-Info&lt;/em&gt; alle Daten über das einspeisende System enthalten sind; dieser Header ersetzt also neben &lt;em&gt;NNTP-Posting-Host&lt;/em&gt; vor allem &lt;em&gt;X-Trace&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Wer als Newsserver-Betreiber diese Tracking-Header zu Zwecken der Anonymisierung oder Pseudonymisierung seiner Nutzer bisher entfernt oder modifiziert hat, muss beim Update auf &lt;em&gt;INN 2.6.0&lt;/em&gt; (und damit beim Update auf &lt;em&gt;Debian Stretch&lt;/em&gt;) entsprechend &lt;a href=&quot;https://netz-rettung-recht.de/archives/2032-Von-Jessie-zu-Stretch.html#c4649&quot; title=&quot;&quot;&gt;aufpassen und nacharbeiten&lt;/a&gt;. Dasselbe gilt auch für denjenigen, der Postings aus seinem &lt;em&gt;INN&lt;/em&gt; heraus per &lt;em&gt;suck&lt;/em&gt; erneut ins Netz einspeist: auch der Header &lt;em&gt;Injection-Info&lt;/em&gt; muss vor dem Repost entfernt werden.&lt;/p&gt;

&lt;h3 id=&quot;-injection-date-als-ersatz-f-r-nntp-posting-date-&quot;&gt;&lt;em&gt;Injection-Date&lt;/em&gt; als Ersatz für &lt;em&gt;NNTP-Posting-Date&lt;/em&gt;?&lt;/h3&gt;

&lt;p&gt;So weit, so gut - eines sollte man aber dabei nicht aus den Augen verlieren: &lt;em&gt;Injection-Date&lt;/em&gt; ist &lt;strong&gt;nicht&lt;/strong&gt; dasselbe wie &lt;em&gt;NNTP-Posting-Date&lt;/em&gt;, obschon das eine der Ersatz des anderen sein soll (RFC 5536, 3.2.7):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;This header field is intended to replace the currently used but
undocumented &quot;NNTP-Posting-Date&quot; header field, whose use is now
deprecated.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;NNTP-Posting-Date&lt;/em&gt; wurde nämlich - wenn konfiguriert - immer gesetzt, um den Zeitpunkt der tatsächlichen Einspeisungs ins Netz anzugeben, der durchaus Stunden oder Tage nach der Erstellung des Artikels liegen kann. &lt;em&gt;Injection-Date&lt;/em&gt; hat zwar denselben Zweck - um aber zu vermeiden, dass ansonsten identische Artikel mit verschiedenen &lt;em&gt;Injection-Date&lt;/em&gt;-Headern verbreitet werden, &lt;strong&gt;darf&lt;/strong&gt; &lt;em&gt;Injection-Date&lt;/em&gt; nicht gesetzt werden, wenn der eingelieferte Artikel bereits sowohl einen &lt;em&gt;Date:&lt;/em&gt;- als auch einen &lt;em&gt;Message-ID:&lt;/em&gt;-Header hat:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;                                     If the proto-article had
both a Message-ID header field and a Date header field, an
Injection-Date header field MUST NOT be added, since the proto-
article may have been multiply injected by a posting agent that
predates this standard.  Otherwise, the injecting agent MUST add
an Injection-Date header field containing the current date and
time.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Sinnigerweise findet man das nicht in RFC 5536, sondern in RFC 5537 (3.6, Ziffer 11). Der Hintergrund für diese Regelung ist etwas komplex: Die Verbreitung von Duplikaten bereits vorhandener Artikel wird verhindert, indem jeder Newsserver nur solche Artikel annimmt, deren &lt;em&gt;Message-ID&lt;/em&gt; er noch nicht kennt. Um nun diese Liste bekannter &lt;em&gt;Message-IDs&lt;/em&gt; (die sog. &lt;em&gt;History&lt;/em&gt;) nicht ins Unendliche wachsen zu lassen, speichert jeder Newsserver die ihm bekannte &lt;em&gt;Message-IDs&lt;/em&gt; nur für einen begrenzten Zeitraum (bspw. 14 Tage) und nimmt ältere Artikel schlicht nicht an. Für die Bestimmung des Alters eines Artikels soll aber auf den &lt;em&gt;Injection-Date&lt;/em&gt;-Header abgestellt werden, nicht auf &amp;#8220;Date&amp;#8221;; schließlich mag ein Artikel vor seiner Einspeisung länger auf Halde gelegen haben. Wenn nun aber ein Artikel (mit &lt;em&gt;Date&lt;/em&gt; und &lt;em&gt;Message-ID&lt;/em&gt;) einmal heute und dann nochmals drei Wochen später eingespeist würde und beide Male ein aktuelles &lt;em&gt;Injection-Date&lt;/em&gt; bekäme, dann würde ein Newsserver, der seine &lt;em&gt;History&lt;/em&gt; nur 14 Tage hält, den zweiten Artikel annehmen (lt. &lt;em&gt;Injection-Date&lt;/em&gt; ist er ja ganz frisch) und duplizieren (weil er nicht mehr weiß, dass derselbe Artikel vor drei Wochen schonmal vorbeikam).&lt;/p&gt;

&lt;p&gt;Nun ist es alles andere als ungewöhnlich, dass ein einzuspeisender Artikel bereits über &lt;em&gt;Date&lt;/em&gt; und &lt;em&gt;Message-ID&lt;/em&gt; verfügt; das Datum wird ohnehin regelmäßig gesetzt, und die Message-ID setzten viele (die meisten?) Newsreader auch. Das bedeutet dann aber im Umkehrschluss, dass &lt;em&gt;Injection-Date&lt;/em&gt; in sehr vielen Situationen eben kein Ersatz für &lt;em&gt;NNTP-Posting-Date&lt;/em&gt; ist.&lt;/p&gt;

&lt;p&gt;Mir fiel das auf, als ich mal wieder einen Stapel noch auf meinem Laptop herumliegender Artikel mit ungefähr einer Woche Verspätung gepostet hatte: nach dem Update meines lokalen Newsservers auf &lt;em&gt;Debian Stretch&lt;/em&gt; war nicht mehr erkennbar, dass diese Postings verspätet eingespeist worden waren, weil es keinen &lt;em&gt;Injection-Date&lt;/em&gt;-Header gab. Die Ursache dieses scheinbaren Fehlers musste ich mir dann erst von &lt;em&gt;Russ Allbery&lt;/em&gt; persönlich erklären lassen &amp;#8230;&lt;/p&gt;

&lt;h3 id=&quot;-x-nntp-posting-date-&quot;&gt;&lt;em&gt;X-NNTP-Posting-Date&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Ich habe mir dann kurzerhand einen Ersatz geschaffen und setze nunmehr über den Perl-Filter (&lt;code&gt;filter_nnrpd.pl&lt;/code&gt;) einen &lt;em&gt;X-NNTP-Posting-Date&lt;/em&gt;-Header:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Add X-NNTP-Posting-Date header
$hdr{&#039;X-NNTP-Posting-Date&#039;} = strftime(&quot;%a, %d %b %Y %H:%M:%S %z&quot;, localtime);
&lt;/code&gt;&lt;/pre&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/757823ebb3e148a6b238b1627c04ff19&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Fri, 06 Oct 2017 06:05:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/2037-guid.html</guid>
    <category>debian</category>
<category>inn</category>
<category>perl</category>
<category>stretch</category>
<category>usenet</category>

</item>
<item>
    <title>Fußnoten von MultiMarkDown zu Wordpress konvertieren (und zurück)</title>
    <link>https://netz-rettung-recht.de/archives/1775-Fussnoten-von-MultiMarkDown-zu-Wordpress-konvertieren-und-zurueck.html</link>
            <category>Bits'n'Bytes</category>
            <category>Releases</category>
    
    <comments>https://netz-rettung-recht.de/archives/1775-Fussnoten-von-MultiMarkDown-zu-Wordpress-konvertieren-und-zurueck.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1775</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1775</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Wir Juristen lieben Fußnoten &amp;#8230; 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. &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Dieses Feeling will man natürlich auch beim Web-Publishing nicht vermissen; hier kommt &lt;i&gt;Wordpress&lt;/i&gt; zu Hilfe, gibt es doch verschiedene Plugins für eine Fußnotenverwaltung, von denen mir bisher &lt;em&gt;&lt;a href=&quot;https://wordpress.org/plugins/footnotes/&quot; title=&quot;footnotes &amp;#8211; WordPress plugin &amp;#124; WordPress.org&quot;&gt;footnotes&lt;/a&gt;&lt;/em&gt; am besten gefällt. Man kann seine Fußnoten einfach im Fließtext an der passenden Stelle ergänzen, entweder in eckigen Klammern: &lt;code&gt;((...))&lt;/code&gt; oder in Tags wie &lt;code&gt;&amp;lt;fn&amp;gt;...&amp;lt;/fn&amp;gt;&lt;/code&gt; 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.&lt;/p&gt;

&lt;p&gt;Nun schreibe ich meine Blogbeiträge in der Regel in &lt;em&gt;&lt;a href=&quot;https://netz-rettung-recht.de/plugin/tag/markdown&quot; title=&quot;&quot;&gt;Markdown&lt;/a&gt;&lt;/em&gt;, und auch das kann &lt;i&gt;Wordpress&lt;/i&gt; natürlich verarbeiten. Was liegt also näher, als Blogbeiträge erst in einem &lt;em&gt;Markdown&lt;/em&gt;-Editor vorzubereiten und dann am Ende in &lt;i&gt;Wordpress&lt;/i&gt; (oder &lt;i&gt;Serenidpity&lt;/i&gt;, natürlich) einzufügen? Umso mehr, als auch &lt;i&gt;Scrivener&lt;/i&gt; als ein mögliches Ausgabeformat &lt;em&gt;MultiMarkdown&lt;/em&gt; kennt?&lt;/p&gt;

&lt;p&gt;Das Problem dabei ist allersings, dass Fußnoten zwar in &lt;em&gt;MultiMarkdown&lt;/em&gt; (wenn auch nicht in &amp;#8220;purem&amp;#8221; &lt;em&gt;Markdown&lt;/em&gt;) 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 &lt;i&gt;Wordpress&lt;/i&gt;-Plugins - der gesamte Fußnotentext einzufügen, sondern nur ein Platzhalter in der Form &lt;code&gt;[^x]&lt;/code&gt;, wobei &lt;code&gt;x&lt;/code&gt; für eine beliebige Zeichenfolge steht. Die Fußnoten werden dann - wie im Ausgabeformat ja auch - am Ende des Textes in der Form &lt;code&gt;[^x]: ...&lt;/code&gt; eingefügt. Das hat zwar den Nachteil, dass man einen Zähler hochzählen muss und Schwierigkeiten bekommt, wenn man eine Fußnoten &amp;#8220;zwischendrin&amp;#8221; einfügen will, ist aber besser lesbar - und für die Einfügerei hat man ja Tools wie &lt;i&gt;Scrivener&lt;/i&gt;, die das bei der Ausgabe automatisch richtig machen.&lt;/p&gt;

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

&lt;p&gt;Also habe ich nach ein paar Versuchen - und einigen Blicken ins &lt;em&gt;Perl-Kochbuch&lt;/em&gt;, das passenderweise ausgerechnet ein Dickhorn-Schaf auf dem Cover hat! - ein kurzes Script zusammengehackt, das erst die vergleichsweise einfache Aufgabe der Konvertierung des &lt;i&gt;Wordpress&lt;/i&gt;-Formats ins &lt;em&gt;MultiMarkdown&lt;/em&gt;-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 &lt;em&gt;Activestate-Perl&lt;/em&gt; - 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 &amp;#8230;) fehlt.&lt;/p&gt;

&lt;p&gt;Wer auch vor diesem Konvertierungsproblem steht und wen der noch rohe Zustand des Scripts nicht abschreckt, der kann sich gerne im &lt;a href=&quot;http://code.th-h.de/?p=scripts.git&quot; title=&quot;301 Moved Permanently&quot;&gt;Git-Repository&lt;/a&gt; bedienen.&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/08086fdecd074c67800f1c5cd562525e&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Sun, 28 Sep 2014 10:15:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1775-guid.html</guid>
    <category>perl</category>
<category>wordpress</category>

</item>
<item>
    <title>Markdown: HTML aus Text erzeugen</title>
    <link>https://netz-rettung-recht.de/archives/1723-Markdown-HTML-aus-Text-erzeugen.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1723-Markdown-HTML-aus-Text-erzeugen.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1723</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1723</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Der erste längere (Erläuterungs-)Text, den ich zur Veröffentlichung im Netz verfasst habe, war im September 1998 die &lt;a href=&quot;http://th-h.de/faq/headerfaq.php&quot; title=&quot;302 Found&quot;&gt;Header-FAQ&lt;/a&gt;, deren erster Entwurf am 18.09.1998 in der Newsgroup de.admin.net-abuse.mail &lt;a href=&quot;https://groups.google.com/forum/#!original/de.admin.net-abuse.mail/d2ZVUXwQz-Y/LpBjyuxuB6sJ&quot; title=&quot;Redirecting to Google Groups&quot;&gt;veröffentlicht&lt;/a&gt; wurde und die dann seit dem &lt;a href=&quot;https://groups.google.com/forum/#!original/de.admin.net-abuse.mail/YoHW_rh3DJo/XYO8J_hNTH8J&quot; title=&quot;Redirecting to Google Groups&quot;&gt;15.10.1998&lt;/a&gt; unter dem Titel &amp;#8220;&lt;strong&gt;E-Mail-Header lesen und verstehen&lt;/strong&gt;&amp;#8221; dort über viele Jahre lang monatlich erschien.&lt;/p&gt;

&lt;h3 id=&quot;text-und-html-version&quot;&gt;Text- und HTML-Version&lt;/h3&gt;

&lt;p&gt;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 &lt;a href=&quot;https://groups.google.com/forum/#!original/de.admin.net-abuse.mail/DPpa1YLx_Q8/YIAM6XVVMIgJ&quot; title=&quot;Redirecting to Google Groups&quot;&gt;genannt&lt;/a&gt; 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.&lt;/p&gt;

&lt;h4 id=&quot;html-dokumente-aus-textdokumenten-erzeugen&quot;&gt;HTML-Dokumente aus Textdokumenten erzeugen&lt;/h4&gt;

&lt;p&gt;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 &lt;a href=&quot;http://www.jafsoft.com/asctohtm/&quot; title=&quot;Access Denied&quot;&gt;&lt;em&gt;AscToHTM&lt;/em&gt;&lt;/a&gt;, 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ß.&lt;/p&gt;

&lt;h4 id=&quot;textdokumente-aus-html-dokumenten-erzeugen&quot;&gt;Textdokumente aus HTML-Dokumenten erzeugen&lt;/h4&gt;

&lt;p&gt;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 &lt;em&gt;text/plain&lt;/em&gt; zusätzlichen Informationsgehalt, Struktur, Markup eben, und aus der Gestaltung des Rohtextes das Markup zu &amp;#8220;erraten&amp;#8221;, 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 &amp;#8220;Master-Dokument&amp;#8221; (oder die Quelle) sein sollte und ich den geposteten Text daraus erzeuge. Information und optische Gestaltung zu kürzen sollte ja vergleichsweise trivial sein. &amp;#8212; Ganz so war es dann erwartungsgemäß doch nicht, denn auch der gepostete &amp;#8220;reine&amp;#8221; Text sollte ja einigermaßen apart formatiert sein, mit dem was, man an &amp;#8220;Formatierungen&amp;#8221; in E-Mail und Usenet so gewohnt ist: Zitate eingeleitet mit &amp;#8220;|&amp;#8221; am Zeilenfang, Hervorhebungen und Betonungen durch &amp;#42;Sternchen&amp;#42; o.ä. und dieser Dinge mehr. Für den Anfang half dazu &lt;a href=&quot;http://www.mbayer.de/html2text/&quot; title=&quot;html2text | mbayer.de&quot;&gt;&lt;em&gt;html2text&lt;/em&gt;&lt;/a&gt;, damals in C++ geschrieben, mittlerweile durch den verstorbenen &lt;a href=&quot;http://de.wikipedia.org/wiki/Aaron_Swartz&quot; title=&quot;&quot;&gt;Aaron Swartz&lt;/a&gt; auch in PYthon &lt;a href=&quot;http://www.aaronsw.com/2002/html2text/&quot; title=&quot;html2text: THE ASCIINATOR (aka html2txt)&quot;&gt;reimplementiert&lt;/a&gt;, aber ganz zufrieden war ich mit dem Output noch nicht.&lt;/p&gt;

&lt;p&gt;Einiges Experimentieren führte dann zu dem folgenden Workflow:&lt;/p&gt;

&lt;p&gt;&lt;div class=&quot;bash geshi&quot; style=&quot;text-align: left&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;wget&lt;/span&gt; http:&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;//&lt;/span&gt;th-h.de&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;faq&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$1&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-O&lt;/span&gt; output.html&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;html2text &lt;span style=&quot;color: #660033;&quot;&gt;-nobs&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-width&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;70&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-rcfile&lt;/span&gt; html2text.rc output.html &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; output.txt&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;.&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;wrap.pl &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;lt; output.txt &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; wrapped.txt&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Und &lt;code&gt;wrap.pl&lt;/code&gt;, 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:&lt;/p&gt;

&lt;p&gt;&lt;div class=&quot;perl geshi&quot; style=&quot;text-align: left&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#!/usr/bin/perl&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #009999;&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;use&lt;/span&gt; Text&lt;span style=&quot;color: #339933;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;Wrap&lt;/span&gt; &lt;a href=&quot;http://perldoc.perl.org/functions/qw.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;qw&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;amp;amp&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;wrap &lt;span style=&quot;color: #0000ff;&quot;&gt;$columns&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$columns&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;70&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&amp;lt;/&lt;/span&gt;p&lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #009999;&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;lt&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;a href=&quot;http://perldoc.perl.org/functions/chomp.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;chomp&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009966; font-style: italic;&quot;&gt;/[-\/]$/&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$zeile&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$rest&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009966; font-style: italic;&quot;&gt;/(.+\s)(\S+)$/&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &lt;a href=&quot;http://perldoc.perl.org/functions/print.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;print&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#8220;$zeile\n&amp;amp;#8221;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; JOINLOOP&lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;lt&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160;&lt;span style=&quot;color: #0000ff;&quot;&gt;$rest&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$_&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160;&lt;span style=&quot;color: #b1b100;&quot;&gt;last&lt;/span&gt; JOINLOOP &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009966; font-style: italic;&quot;&gt;/^$/&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &lt;span style=&quot;color: #0000ff;&quot;&gt;$rest&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=~&lt;/span&gt; &lt;span style=&quot;color: #009966; font-style: italic;&quot;&gt;s/\n/ /g&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &lt;span style=&quot;color: #0000ff;&quot;&gt;$_&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; wrap&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#8221;, &amp;amp;#8221;, $rest).&amp;amp;#8221;\n&amp;amp;#8221;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;a href=&quot;http://perldoc.perl.org/functions/print.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;print&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$_&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009966; font-style: italic;&quot;&gt;/^[|&amp;gt;:]/&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; QUOTELOOP&lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;lt&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160;&lt;a href=&quot;http://perldoc.perl.org/functions/chomp.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;chomp&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160;&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009966; font-style: italic;&quot;&gt;/^$/&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160; &lt;a href=&quot;http://perldoc.perl.org/functions/print.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;print&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#8220;\n&amp;amp;#8221;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #b1b100;&quot;&gt;last&lt;/span&gt; QUOTELOOP&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;elsif&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009966; font-style: italic;&quot;&gt;/^[|&amp;gt;:]/&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160; &lt;a href=&quot;http://perldoc.perl.org/functions/print.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;print&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#8220;\n$&amp;lt;em&amp;gt;&amp;amp;#8221;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160; &lt;a href=&quot;http://perldoc.perl.org/functions/print.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;print&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;/&lt;/span&gt;em&lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;a href=&quot;http://perldoc.perl.org/functions/print.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;print&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#8220;\n&amp;amp;#8221;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;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 &amp;#8220;Klartext&amp;#8221;, selbst wenn man sich durch geeignete Editoren beim Einfügen der passenden Tags (und deren Schließen!) unterstützen lässt.&lt;/p&gt;

&lt;h4 id=&quot;die-l-sung-&quot;&gt;Die Lösung?&lt;/h4&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3 id=&quot;what-would-i-today-do-&quot;&gt;What would I today do?&lt;/h3&gt;

&lt;p&gt;(Ja, das ist kein Englisch. Nein, das ist Absicht. Ja, das spielt auf WWJD an.)&lt;/p&gt;

&lt;p&gt;Inzwischen sind bald 16 Jahre ins Land gegangen, und es gibt damit natürlich ganz andere technische Möglichkeiten, dieses Problem zu lösen. Über manche habe ich zwischendurch nachgedacht, bspw. über &lt;a href=&quot;http://www.docbook.org/&quot; title=&quot;301 Moved Permanently&quot;&gt;&lt;em&gt;Docbook&lt;/em&gt;&lt;/a&gt; und die zugehörige Toolchain, wenn ich mich recht erinnere, sogar einmal kurz damit gebastelt, aber mich nie ernsthaft damit beschäftigt. Richtig lange, umfangreiche Texte würde ich heute vermutlich in &lt;a href=&quot;http://www.methods.co.nz/asciidoc/&quot; title=&quot;&quot;&gt;&lt;em&gt;AsciiDoc&lt;/em&gt;&lt;/a&gt; zu schreiben versuchen. Beides sind Varianten der Technik &amp;#8220;mehrere Formate aus einem Quelltext erzeugen&amp;#8221;.&lt;/p&gt;

&lt;h4 id=&quot;markdown&quot;&gt;Markdown&lt;/h4&gt;

&lt;p&gt;Insbesondere für kürzere Texte und als generische Lösung bietet sich aber mittlerweile sozusagen ein Königsweg an, der auch entsprechende Verbreitung gefunden hat: &lt;a href=&quot;http://daringfireball.net/projects/markdown/&quot; title=&quot;301 Moved Permanently&quot;&gt;&lt;strong&gt;Markdown&lt;/strong&gt;&lt;/a&gt;. Die Idee setzt wieder dort an, wo auch ich damals - ganz instinktiv - angefangen hatte, nämlich bei der Erzeugung eines HTML-Dokuments aus einem entsprechend formatierten Textdokument, wobei aber eben durchaus &amp;#8220;optische&amp;#8221; Formatierungen eingebaut werden, die sich erkennen, parsen und in strukturiertes Markup umsetzen lassen. Wir kennen das - mittlerweile - auch aus Wikis. Das schöne an &lt;em&gt;Markdown&lt;/em&gt; ist dabei, dass sich die Formatierungen dem E-Mail- und Usenet-Nutzer zumeist unmittelbar erschließen und die &lt;a href=&quot;http://daringfireball.net/projects/markdown/syntax&quot; title=&quot;301 Moved Permanently&quot;&gt;Syntax&lt;/a&gt; leicht erlernbar ist, die Texte selbst weitgehend lesbar bleiben und keiner großen Nachbearbeitung mehr bedürfen und auch (insbesondere bei der Verwendung von Erweiterungen wie &lt;em&gt;Markdown Extra&lt;/em&gt; oder &lt;a href=&quot;http://fletcherpenney.net/multimarkdown/&quot; title=&quot;301 Moved Permanently&quot;&gt;&lt;em&gt;MultiMarkdown&lt;/em&gt;&lt;/a&gt;) nahezu alle Formatierungen, die man sich im generierten HTML nur wünschen kann, machbar sind. Wenn man die Möglichkeiten dazunimmt, die modernes CSS bei der optischen Gestaltung von Webseiten bietet, bleiben kaum mehr Wünsche offen.&lt;/p&gt;

&lt;h4 id=&quot;ein-beispiel&quot;&gt;Ein Beispiel&lt;/h4&gt;

&lt;p&gt;Für längere oder komplexere Texte wird man sich möglicherweise ergänzende Gedanken machen müssen, aber zumindest kurze Postings lassen sich so ohne großen Aufwand elegant ins Web stellen. So sieht bspw. der gepostete und leicht lesbare Text &lt;a href=&quot;http://code.th-h.de/?p=faqs/misc.git;a=blob_plain;f=den-info.txt;hb=HEAD&quot; title=&quot;301 Moved Permanently&quot;&gt;&lt;em&gt;Willkommen in de.etc.notfallrettung!&lt;/em&gt;&lt;/a&gt; auch in der &lt;a href=&quot;http://th-h.de/faq/den-info.php&quot; title=&quot;302 Found&quot;&gt;Webversion&lt;/a&gt; entsprechend aus, und diese Webversion kann jederzeit automatisiert erzeugt werden. Ich plane durchaus, auch meine längeren FAQs - die bisher auch im Web nur als Textversionen abrufbar sind - zukünftig auf diese Weise formatiert verfügbar zu machen, nehme aber an, dass insoweit noch einige Nacharbeiten erforderlich sein werden.&lt;/p&gt;

&lt;h4 id=&quot;weitere-vorteile&quot;&gt;Weitere Vorteile&lt;/h4&gt;

&lt;p&gt;Insbesondere in Verbindung mit Versionsverwaltungssystemen wie &lt;em&gt;Git&lt;/em&gt; zahlt es sich m.E. darüber hinaus aus, wenn der Quelltext möglichst gut lesbar ist und nicht mit Formatierungen oder HTTML-Tags überladen ist; aus einem &lt;em&gt;Markdown&lt;/em&gt;-Dokument kann ich überdies bei jeder Änderung automatisch den zu postenden Text und die Webversion ohne zusätzlichen Aufwand aus dem &lt;em&gt;Git&lt;/em&gt;-Repository erzeugen, kann mich also auf das Schreiben der Texte konzentrieren, ohne mich mit Routineaufgaben belasten zu müssen. (So jedenfalls die Theorie; ich strebe zukünftig auch eine entsprechende Automatisierung an. &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; class=&quot;emoticon&quot; /&gt;)&lt;/p&gt;

&lt;p&gt;Noch ein Vorteil ist, dass &lt;em&gt;Markdown&lt;/em&gt; (wie auch Wiki-Syntax) vergleichsweise leicht zu erlernen ist und ggf. (wie in Wikis) mit entsprechenden Editoren gekoppelt werden kann, in denen Buttons entsprechendes &amp;#8220;Markup&amp;#8221; erzeugen. Die Barriere für das Verfassen von Web-Texten wird damit abgesenkt.&lt;/p&gt;

&lt;h3 id=&quot;schlusswort&quot;&gt;Schlusswort&lt;/h3&gt;

&lt;p&gt;Insgesamt kann ich jedem nur raten: probiert &lt;em&gt;Markdown&lt;/em&gt; einmal aus!&lt;/p&gt;

&lt;p&gt;Die Texte schreiben sich darin sehr flüssig, und für die meisten CMS und Blogsysteme gibt es entsprechende Plugins. Nicht umsonst setzt bspw. auch &lt;a href=&quot;https://github.com/&quot; title=&quot;GitHub · Change is constant. GitHub keeps you ahead. · GitHub&quot;&gt;&lt;em&gt;Github&lt;/em&gt;&lt;/a&gt; sehr intensiv auf &lt;em&gt;Markdown&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;(Wie ich gerade bemerke, hatte ich darüber übrigens vor vier Jahren &lt;a href=&quot;https://netz-rettung-recht.de/archives/1593-markdown-Text-in-HTML-verwandeln.html&quot; title=&quot;&quot;&gt;schon einmal geschrieben&lt;/a&gt;. Manchmal dauert eben alles etwas länger &amp;#8230;)&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/044e2765f2784e3eb30d89291c726209&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Sat, 24 May 2014 15:19:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1723-guid.html</guid>
    <category>markdown</category>
<category>perl</category>

</item>
<item>
    <title>newsstats 0.01 released</title>
    <link>https://netz-rettung-recht.de/archives/1714-newsstats-0.01-released.html</link>
            <category>Releases</category>
    
    <comments>https://netz-rettung-recht.de/archives/1714-newsstats-0.01-released.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1714</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1714</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Unter &lt;a href=&quot;http://usenet.dex.de/&quot; title=&quot;de.* zum gucken&quot;&gt;usenet.dex.de&lt;/a&gt; stellt Cornell Binder Graphen über die Nutzung der verschiedenen Newsgroup der deutschsprachigen Usenethierachie de.&amp;#42; seit 1992 bereit. Ende 2009 versiegte aber offenbar der Rohdatenstrom, den bis dahin die FU Berlin - wohl über den dort betriebenen Dienst &lt;a href=&quot;http://news.dfncis.de/&quot; title=&quot;News.CIS.DFN.DE - DFNNetNews&quot;&gt;DFNNetNews&lt;/a&gt; - angeliefert hatte. Daher bin ich damals kurzfristig &lt;a href=&quot;https://netz-rettung-recht.de/archives/1569-Usenet-Statistik.html&quot; title=&quot;&quot;&gt;in die Bresche gesprungen&lt;/a&gt; und habe mit dem von mir betriebenen Newsserver &lt;a href=&quot;https://news.szaf.org/&quot; title=&quot;Willkommen beim Szafs-Newsserver!&quot;&gt;news.szaf.org&lt;/a&gt; die Anlieferung der Daten übernommen.&lt;/p&gt;

&lt;p&gt;Das dazu begonnene Projekt &lt;em&gt;destat&lt;/em&gt; habe ich knapp ein Jahr später unter dem Namen &lt;em&gt;newsstats&lt;/em&gt; 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 &lt;code&gt;de.admin.news.misc&lt;/code&gt;, die aus dem vermittels &lt;em&gt;newsstats&lt;/em&gt; erzeugten Datenbestand stammen, und versorge auch &lt;em&gt;usenet.dex.de&lt;/em&gt; regelmäßig mit aktuellen Daten.&lt;/p&gt;

&lt;p&gt;Erst jetzt, anderthalb Jahre später und rund drei Jahre nach den ersten Ansätzen, komme ich aber dazu, erstmals eine Fassung von &lt;em&gt;newsstats&lt;/em&gt; als Version &lt;strong&gt;0.01&lt;/strong&gt; zu veröffentlichen. Das Paket steht auf meiner &lt;a href=&quot;http://th-h.de/download/scripts.php&quot; title=&quot;302 Found&quot;&gt;Downloadseite&lt;/a&gt; zur Verfügung und kann auch aus dem &lt;a href=&quot;http://code.th-h.de/?p=usenet/newsstats.git&quot; title=&quot;301 Moved Permanently&quot;&gt;Git-Repository&lt;/a&gt; heruntergeladen werden.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;newsstats&lt;/em&gt; 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, &amp;#8230; - soll(t)en (ursprünglich) später einmal hinzukommen.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&amp;#91;Dieser Eintrag wurde nachträglich im Mai 2014 veröffentlicht.&amp;#93;&lt;/em&gt;&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Mon, 02 Sep 2013 11:32:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1714-guid.html</guid>
    <category>perl</category>
<category>usenet</category>

</item>
<item>
    <title>checkmail 0.5 released</title>
    <link>https://netz-rettung-recht.de/archives/1692-checkmail-0.5-released.html</link>
            <category>Releases</category>
    
    <comments>https://netz-rettung-recht.de/archives/1692-checkmail-0.5-released.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1692</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1692</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Nach &lt;a title=&quot;checkmail 0.4 released&quot; href=&quot;https://netz-rettung-recht.de/archives/1604-checkmail-0.4-released.html&quot;&gt;einem guten Jahr&lt;/a&gt; habe ich mal wieder Zeit zu einer kleinen Änderung in &lt;em&gt;checkmail&lt;/em&gt; gefunden, die ich dann sogleich als Version &lt;strong&gt;0.5&lt;/strong&gt; released habe. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;checkmail&lt;/em&gt; ü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.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Die Dokumentation wurde entsprechend aktualisiert.&lt;/p&gt;

&lt;p&gt;Die aktuelle Version steht jeweils auf meiner &lt;a href=&quot;http://th-h.de/download/scripts.php&quot; title=&quot;Downloadbereich: 
Scripts und Programme&quot;&gt;Downloadseite&lt;/a&gt;
 zur Verfügung. &lt;/p&gt;
 
    </content:encoded>

    <pubDate>Sat, 23 Jul 2011 22:32:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1692-guid.html</guid>
    <category>checkmail</category>
<category>e-mail</category>
<category>perl</category>

</item>
<item>
    <title>yapfaq 0.9.1 (Bugfix-Release)</title>
    <link>https://netz-rettung-recht.de/archives/1636-yapfaq-0.9.1-Bugfix-Release.html</link>
            <category>Releases</category>
    
    <comments>https://netz-rettung-recht.de/archives/1636-yapfaq-0.9.1-Bugfix-Release.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1636</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1636</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Ich habe heute die Version &lt;strong&gt;0.9.1&lt;/strong&gt; von &lt;strong&gt;yapfaq&lt;/strong&gt; released, die einen Fehler der bisherigen Version &lt;a href=&quot;archives/1619-yapfaq-0.9-released.html&quot; title=&quot;yapfaq 0.9 released&quot;&gt;0.9&lt;/a&gt; behebt:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Im Test-Modus (&lt;em&gt;-t&lt;/em&gt;) wurde teilweise fälschlich eine leere Headerzeile &amp;quot;X-Supersedes:&amp;quot; hinzugefügt.&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;Die aktuelle Version steht jeweils auf meiner &lt;a href=&quot;http://th-h.de/download/scripts.php&quot; title=&quot;Downloadbereich: Scripts und Programme&quot;&gt;Downloadseite&lt;/a&gt;  zur Verfügung.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Mon, 01 Nov 2010 15:41:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1636-guid.html</guid>
    <category>perl</category>
<category>usenet</category>
<category>yapfaq</category>

</item>
<item>
    <title>yapfaq 0.9 released</title>
    <link>https://netz-rettung-recht.de/archives/1619-yapfaq-0.9-released.html</link>
            <category>Releases</category>
    
    <comments>https://netz-rettung-recht.de/archives/1619-yapfaq-0.9-released.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1619</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1619</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Ich habe heute die bereits seit Juni im Prinzip fertige neue Version &lt;strong&gt;0.9&lt;/strong&gt; von &lt;strong&gt;yapfaq&lt;/strong&gt; released, die im Vergleich zur bisherigen Version &lt;a href=&quot;https://netz-rettung-recht.de/archives/1587-yapfaq-0.8-released.html&quot; title=&quot;yapfaq 0.8 released&quot;&gt;0.8.2&lt;/a&gt; nur wenige Änderungen aufweist:&lt;/p&gt;

&lt;h4&gt;Packaging geändert&lt;br /&gt;&lt;/h4&gt;

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

&lt;h4&gt;Kleine Änderungen an den Headern der erzeugten Postings&lt;br /&gt;&lt;/h4&gt;

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

&lt;p&gt; 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.&lt;/p&gt;

&lt;p&gt;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.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Die Dokumentation wurde entsprechend aktualisiert.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Die aktuelle Version steht jeweils auf meiner &lt;a href=&quot;http://th-h.de/download/scripts.php&quot; title=&quot;Downloadbereich: Scripts und Programme&quot;&gt;Downloadseite&lt;/a&gt;
 zur Verfügung.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Sun, 15 Aug 2010 16:55:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1619-guid.html</guid>
    <category>perl</category>
<category>usenet</category>
<category>yapfaq</category>

</item>
<item>
    <title>checkmail 0.4 released</title>
    <link>https://netz-rettung-recht.de/archives/1604-checkmail-0.4-released.html</link>
            <category>Releases</category>
    
    <comments>https://netz-rettung-recht.de/archives/1604-checkmail-0.4-released.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1604</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1604</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Nach dem &lt;a href=&quot;https://netz-rettung-recht.de/archives/1603-checkmail-0.3-released.html&quot; title=&quot;checkmail 0.3 released&quot;&gt;gestrigen Release&lt;/a&gt; der praktisch komplett neu geschriebenen Version 0.3 von &lt;em&gt;checkmail&lt;/em&gt; kann ich heute die Version &lt;strong&gt;0.4&lt;/strong&gt;
 von &lt;strong&gt;checkmail&lt;/strong&gt; ankündigen, die die eigentlich geplanten Änderungen enthält.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;checkmail&lt;/em&gt; 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.&lt;/p&gt;

&lt;p&gt;Überdies kann &lt;em&gt;checkmail&lt;/em&gt; 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.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Die Dokumentation wurde entsprechend aktualisiert.&lt;/p&gt;

&lt;p&gt;Die aktuelle Version steht jeweils auf meiner &lt;a title=&quot;Downloadbereich: 
Scripts und Programme&quot; href=&quot;https://netz-rettung-recht.de/download/scripts.php&quot;&gt;Downloadseite&lt;/a&gt;
 zur Verfügung. &lt;/p&gt;
 
    </content:encoded>

    <pubDate>Sat, 19 Jun 2010 11:58:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1604-guid.html</guid>
    <category>checkmail</category>
<category>e-mail</category>
<category>perl</category>

</item>
<item>
    <title>checkmail 0.3 released</title>
    <link>https://netz-rettung-recht.de/archives/1603-checkmail-0.3-released.html</link>
            <category>Releases</category>
    
    <comments>https://netz-rettung-recht.de/archives/1603-checkmail-0.3-released.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1603</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1603</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Nach rund 5 Jahren Pause habe ich nunmehr eine neue Version &lt;strong&gt;0.3&lt;/strong&gt; von &lt;strong&gt;checkmail&lt;/strong&gt; released, einem Kommandozeilen-Tool zur Überprüfung der Zustellbarkeit von E-Mail-Adressen.&lt;/p&gt;

&lt;p&gt;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).&lt;/p&gt;

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

&lt;p&gt;Die aktuelle Version steht jeweils auf meiner &lt;a href=&quot;http://th-h.de/download/scripts.php&quot; title=&quot;Downloadbereich: 
Scripts und Programme&quot;&gt;Downloadseite&lt;/a&gt;
 zur Verfügung.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Fri, 18 Jun 2010 21:23:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1603-guid.html</guid>
    <category>checkmail</category>
<category>e-mail</category>
<category>perl</category>

</item>
<item>
    <title>yapfaq 0.8 released</title>
    <link>https://netz-rettung-recht.de/archives/1587-yapfaq-0.8-released.html</link>
            <category>Releases</category>
    
    <comments>https://netz-rettung-recht.de/archives/1587-yapfaq-0.8-released.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1587</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1587</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Soeben habe ich eine neue Version &lt;strong&gt;0.8.1&lt;/strong&gt; von &lt;strong&gt;yapfaq&lt;/strong&gt; released, die im Vergleich zur bisherigen Version &lt;a href=&quot;https://netz-rettung-recht.de/archives/1567-yapfaq-0.7-released.html&quot; title=&quot;yapfaq 0.7 released&quot;&gt;0.7&lt;/a&gt; nur noch vergleichsweise kleine Änderungen aufweist:&lt;/p&gt;

&lt;h4&gt;PGP-/GPG-Support entfernt&lt;/h4&gt;

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

&lt;h4&gt;Konfiguration&lt;/h4&gt;

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

&lt;p&gt;Außerdem kann die in der letzten Version hinzugefügte Möglichkeit, zum Posten ein externes Programm zu verwenden, nunmehr auch in der Konfigurationsdatei &lt;em&gt;.yapfaqrc&lt;/em&gt; definiert werden, nicht nur über den Kommandozeilenparameter &amp;quot;-s&amp;quot;.&lt;br /&gt;&lt;/p&gt;

&lt;h4&gt;Kleinere Änderungen und Fehlerbehebung&lt;/h4&gt;

&lt;p&gt;In der Konfigurationsdatei &lt;em&gt;yapfaq.cfg&lt;/em&gt; wurden optionale Einstellungen als solche gekennzeichnet und auskommentiert, außerdem die Optionen mit einheitlichen Erläuterungen als Kommentar versehen.&lt;/p&gt;

&lt;p&gt;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.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Die aktuelle Version steht jeweils auf meiner &lt;a href=&quot;http://th-h.de/download/scripts.php&quot; title=&quot;Downloadbereich: Scripts und Programme&quot;&gt;Downloadseite&lt;/a&gt;
 zur Verfügung.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update:&lt;/strong&gt; Nachdem Version 0.8 nicht lauffähig war, ist dieser Fehler in Version 0.8.1 behoben. &lt;/em&gt;&lt;br /&gt;&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Thu, 13 May 2010 21:37:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1587-guid.html</guid>
    <category>perl</category>
<category>usenet</category>
<category>yapfaq</category>

</item>
<item>
    <title>yapfaq 0.7 released</title>
    <link>https://netz-rettung-recht.de/archives/1567-yapfaq-0.7-released.html</link>
            <category>Releases</category>
    
    <comments>https://netz-rettung-recht.de/archives/1567-yapfaq-0.7-released.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1567</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1567</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Gestern habe ich eine neue Version &lt;strong&gt;0.7&lt;/strong&gt; von &lt;strong&gt;yapfaq&lt;/strong&gt; released. Im Vergleich zur Version &lt;a title=&quot;yapfaq 0.6.2 released&quot; href=&quot;https://netz-rettung-recht.de/archives/1534-yapfaq-0.6.2-released.html&quot;&gt;0.6.2&lt;/a&gt; ergeben sich folgende wesentlichen Änderungen und Neuerungen:&lt;/p&gt;

&lt;h4&gt;Konfiguration über .rc-Datei&lt;/h4&gt;

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

&lt;p&gt;Außerdem kann über den neuen Kommandozeilenparamter &amp;quot;&lt;strong&gt;-c&lt;/strong&gt;&amp;quot; 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 &lt;em&gt;yapfaq&lt;/em&gt; bearbeiten.&lt;br /&gt;&lt;/p&gt;

&lt;h4&gt;Posten über externes Programm &lt;br /&gt;&lt;/h4&gt;

&lt;p&gt;Statt die FAQs durch &lt;em&gt;yapfaq &lt;/em&gt;selbst posten zu lassen können diese nunmehr auch per Pipe an ein externes Programm weitergegeben werden, das durch den neuen Kommandozeilenparamter &amp;quot;&lt;strong&gt;-s&lt;/strong&gt;&amp;quot; definiert wird, bspw. &lt;em&gt;inews &lt;/em&gt;aus dem INN-Paket oder den mächtigeren Ersatz &lt;em&gt;tinews.pl&lt;/em&gt;, den man von &lt;a href=&quot;http://ftp.tin.org&quot; title=&quot;ka-nus ka&#039;s not Usenet&quot;&gt;ftp.tin.org&lt;/a&gt; herunterladen kann. Selbstverständlich kann dieses externe Programm auch &lt;em&gt;cat&lt;/em&gt;, &lt;em&gt;mail &lt;/em&gt;o.ä. sein - je nachdem, was man erreichen möchte.&lt;br /&gt;&lt;/p&gt;

&lt;h4&gt;Kleinere Änderungen und Fehlerbehebung&lt;/h4&gt;

&lt;p&gt;Der Kommandozeilenparamter &amp;quot;-h&amp;quot; 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 &amp;quot;&lt;strong&gt;-V&lt;/strong&gt;&amp;quot; ausgegeben.&lt;/p&gt;

&lt;p&gt;Die Statusinformationen - letztes Posting der FAQ und dessen Message-ID - werden jetzt nur noch nach erfolgreichem Posten (bzw. wenn das mit &amp;quot;-s&amp;quot; aufgerufene Programm den Exitcode &amp;quot;0&amp;quot; zurückgibt) gespeichert.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Ein Anmeldeversuch am Newsserver erfolgt nur noch, wenn ein Benutzername gesetzt ist.&lt;/p&gt;

&lt;p&gt;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 &lt;em&gt;yapfaq.cfg&lt;/em&gt;) nunmehr weitere Überprüfungen statt.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Die aktuelle Version steht jeweils auf meiner &lt;a title=&quot;Downloadbereich: Scripts und Programme&quot; href=&quot;http://th-h.de/download/scripts.php&quot;&gt;Downloadseite&lt;/a&gt; zur Verfügung.&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/de6857f6b38c4ae79a2cc31e010b2c0b&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Thu, 15 Apr 2010 05:00:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1567-guid.html</guid>
    <category>perl</category>
<category>usenet</category>
<category>yapfaq</category>

</item>
<item>
    <title>yapfaq 0.6.2 released</title>
    <link>https://netz-rettung-recht.de/archives/1534-yapfaq-0.6.2-released.html</link>
            <category>Bits'n'Bytes</category>
            <category>Releases</category>
    
    <comments>https://netz-rettung-recht.de/archives/1534-yapfaq-0.6.2-released.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1534</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1534</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Wie am Wochenende schon &lt;a href=&quot;https://netz-rettung-recht.de/archives/1532-yapfaq-yet-another-postfaq.html&quot; title=&quot;yapfaq - yet another postfaq&quot;&gt;angekündigt&lt;/a&gt;, habe ich &lt;strong&gt;yapfaq&lt;/strong&gt; in den letzten Tagen etwas weiterbearbeitet. Version &lt;strong&gt;0.6&lt;/strong&gt; (bzw., aufgrund einiger kleiner Fehler im ersten Release, Version &lt;strong&gt;0.6.2&lt;/strong&gt;) enthält neben einigen kleineren Änderungen vor allem folgende Erweiterungen:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Variabler Expires:-Header&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Kommandozeilen-Parameter&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;yapfaq&lt;/em&gt; nimmt jetzt einige Kommandozeilen-Parameter entgegen. So können mittels &amp;quot;&lt;strong&gt;-v&lt;/strong&gt;&amp;quot; Informationen über den Programmablauf ausgegeben werden; mit dem Parameter &amp;quot;&lt;strong&gt;-f&lt;/strong&gt;&amp;quot; kann die Abarbeitung auf die genannte FAQ beschränkt werden, &lt;em&gt;yapfaq&lt;/em&gt; arbeitet dann also nicht alle FAQs ab. Außerdem kann mit &amp;quot;&lt;strong&gt;-p&lt;/strong&gt;&amp;quot; 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 &amp;quot;-f&amp;quot;. Die Parameter &amp;quot;&lt;strong&gt;-d&lt;/strong&gt;&amp;quot; und &amp;quot;&lt;strong&gt;-t&lt;/strong&gt;&amp;quot; ermöglichen Tests: &amp;quot;-d&amp;quot; führt zu einem reinen Simulationslauf, bei dem nichts gepostet wird, so daß bspw. getestet werden kann, welche FAQs zum Posten anstehen würden. &amp;quot;-t&amp;quot; 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.&lt;/p&gt;

&lt;p&gt;Die aktuelle Version steht jeweils auf meiner &lt;a href=&quot;http://th-h.de/download/scripts.php&quot; title=&quot;Downloadbereich: Scripts und Programme&quot;&gt;Downloadseite&lt;/a&gt; zur Verfügung.&lt;br /&gt;&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Fri, 26 Feb 2010 19:59:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1534-guid.html</guid>
    <category>perl</category>
<category>usenet</category>
<category>yapfaq</category>

</item>
<item>
    <title>POD - plain old documentation</title>
    <link>https://netz-rettung-recht.de/archives/1535-POD-plain-old-documentation.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1535-POD-plain-old-documentation.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1535</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1535</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Perl bietet eine recht interessante und bequeme Art, die Dokumentation zu einem Script oder Modul in den Programmcode einzubetten: &lt;strong&gt;POD&lt;/strong&gt;, &amp;quot;plain old documentation&amp;quot;.&lt;/p&gt;

&lt;p&gt;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 &lt;em&gt;perldoc&lt;/em&gt; 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.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Mehr Informationen dazu:&lt;/u&gt;&lt;/p&gt;

&lt;ul&gt; 
&lt;li&gt;&lt;a href=&quot;http://perldoc.perl.org/perlpod.html&quot; title=&quot;perlpod&quot;&gt;perlpod man page&lt;/a&gt;&lt;/li&gt; 
&lt;li&gt;&lt;a href=&quot;http://perldoc.perl.org/perldoc.html&quot; title=&quot;perldoc&quot;&gt;perldoc man page&lt;/a&gt;&lt;/li&gt; 
&lt;li&gt;&lt;a href=&quot;http://www.eyrie.org/~eagle/software/podlators/&quot; title=&quot;podlators&quot;&gt;podlators&lt;/a&gt; (translators from POD to text and nroff from Russ Allbery)&lt;/li&gt; 
&lt;li&gt;&lt;a href=&quot;http://perldoc.perl.org/pod2text.htm&quot; title=&quot;pod2text&quot;&gt;pod2text man page&lt;/a&gt;&lt;/li&gt; 
&lt;li&gt;&lt;a href=&quot;http://perldoc.perl.org/pod2html.html&quot; title=&quot;pod2html&quot;&gt;pod2html man page&lt;/a&gt;&lt;br /&gt;&lt;/li&gt; 
&lt;/ul&gt;
 
    </content:encoded>

    <pubDate>Thu, 25 Feb 2010 20:56:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1535-guid.html</guid>
    <category>perl</category>

</item>

</channel>
</rss>
