 So einen wunderschönen guten Morgen. Erster Talk am Tag 3. Dafür ist das halb eigentlich sehr voll. Ich bin positiv beeindruckt. Alle Emaxius erheben wir mal alle drei Hände bitte. Gut, also du weißt, womit du zu tun hast. Und will ich sagen, dann machen wir einfach gleich mit dem Talk weiter. Ich begrüße ganz herzlich den Rohieb mit Text-Prain Text, die unerträgliche Leichtigkeit des Seins. Herzlich willkommen. Ja, für die Emax-User gleich eine Enttäuschung. Ich bin Wim-User, wie man es leicht erkennen kann. Aber das soll hier auch gar nicht Thema sein, weil auch für Wim gibt es gute Kehmbilings, genau. Und gute Plakins. Prinzipiell ist dieser Talk eigentlich unabhängig von dem eingesetzten Editor, ob es nun Wim, Emax, Nano oder Ed ist. Das ist eins, weil plaintext ist für alle gleich, sag ich mal. Und jo, fangen wir an. Wer bin ich überhaupt? Man kennt mich unter dem Namen Rohieb oder im Social Networks auch unter Daniel Bura. Auf Twitter gucke ich nicht so oft rein, aber auf dem Verdiverse of Chaos Social findet ihr mich sehr viel häufiger inzwischen und wenn ihr Fragen per E-Mail absenden wollt, bitte. Jo, ich bin früher mal Student gewesen, bin jetzt seit nicht allzu langer Zeit in der freien Wirtschaft tätig sozusagen, in einer kleinen Firma, die mir sehr gefällt. Und diese Firma hat angefangen mit Kernel-Hackern. Also der Chef selber hat sich irgendwann mal selbstständig gemacht und dann wurden immer mehr Kernel-Hacker und da Kernel-Hacker ja so ihre Eigenschaften haben, wie sie gerne arbeiten, also gerne halt mit Code möglichst und auch Versionierung in Git und Dropbox und so. Das wird da einfach gar nicht angesprochen und Open-Office, was ist das? Und wenn unsere Kunden uns Dokumente schicken, dann versuchen wir die möglichst nicht lange aufzubehalten, sondern es in unser Format zu gießen sozusagen. Und da kommt eigentlich diese Denke von diesem Plaintext, habe ich so so mitbekommen, jetzt in den letzten zwei Jahren. Und das gefällt mir eigentlich sehr gut, weil das so zu diesem Hacker-Workflow sehr gut passt, wenn man seinen Büro sozusagen auch so einrichtet, wie man es von der Arbeit, von der anderen Arbeit sozusagen, von der Produktivarbeit schon gewohnt ist, genau. Und ich habe nebenher auch ein bisschen in unserem Hackerspace angefangen, einen Protokoll-Workflow aufzusetzen so für Mitgliederversammlungen und damals, als ich noch im Vorstand war, die letzten sieben Jahre auch für Vorstandssitzungen und habe da immerhin mal wieder hin und her probiert, was da sich so eignet. Und ich glaube, die Essenzen aus diesen sieben Jahren versuche ich jetzt mal hier so darzustellen. Vielleicht überspringe ich mal das Kapitel, wo ich mit M4 rumgespielt habe, das ist okay, aber man muss sehr viel denken dabei und man kann sich eigentlich nicht auf das Wesentliche konzentrieren, nämlich einen Text schreiben. Ja, jeder guter Talk fängt mit einer Definition an, was ist eigentlich Plaintext? Wir haben hier die ganz einfache Definition, einfach menschenlesbarer Text ohne Informationen über die Darstellung, also keine Informatierung, kein sonst was, keine Zeichen, die nicht ASCII 32 bis 126 sind, also 32 ist der Space. Dann kommen hier die paar Sonderzeichen, dann die Zahlen, dann noch ein paar Sonderzeichen und dann die ganzen Buchstaben. Und 0x7e ist dann das DELL, was allgemeinhin nicht als Plaintext Zeichen angesehen wird und eigentlich auch nicht als solches in Dokumenten vorkommen sollte, außer ihr habt euer Terminal Verkriegskandal oder so. Und das ist sozusagen das Plain ASCII, was heutzutage ja auch immer noch von Mailern unterstützt wird. 7-Bit ASCII sozusagen, wo immer alles darunter gerendert wird aus historischen Gründen, dann haben sich natürlich über die Zeit mehrere andere Encodics darauf gesetzt, so zum Beispiel die ganzen ISO-Encodings 8, 8, 5, 9, 1, 15, was man da hat, 7 ist glaube ich noch verbreitet, egal. Nehmen alle dieses ASCII und machen es halt zu einem 8-Bit Format, also in dem Sie das erste Bit weiter verwenden, über Windows sprechen wir lieber nicht, aber dieser Talk ist natürlich auch für Windows User ganz geeignet, wenn Sie ein Edit haben. Und der ganz heiße neue Scheiß seit 1992 Unicode hat uns sehr viel Fluch und Segen gebracht mit right to left markers und emojis. Ich würde Unicode einfach so erstmal auch als Plaintext bezeichnen, falls man es benutzen will, kann man es benutzen, ich benutze es sehr gerne. Auch emoji? Auch emoji ja, auch wenn mein Terminal sie manchmal sehr schlecht rendert, aber auch emoji. Genau und ja, ich habe das gerade schon gezeigt, hier in so einem Editor wird das meist so in MonoSpace dargestellt, dicken gleicher Text, also alle Zeichen stehen schön untereinander und in Abgrenzung dazu sind es halt die Office-Formate, die man so als LibreOffice oder so MS-Office benutzt, erkennt, die halt wirklich ein Bineadaten-Format sind, die man halt nicht einfach mal so in dem Text-Editor aufmachen kann und da drin editieren kann. Genau und Bineadaten wie JPEGs, PNGs, was auch immer. Wobei, da muss ich sagen, es gibt ja auch Bildformate, die man sehr schön mit einem Editor betrachten kann, zum Beispiel PNM, das kommt so aus der XOR gewählt, ich habe leider gerade kein Beispiel, aber es fährt mir gerade so ein, basiert auch im Prinzip auf Zeichen. Genau. Ah ja, das habe ich vergessen, genau, CRLF und VerticalTab, was meinst du, CR ist, was? Ja, stimmt, hast recht. Bitte. Genau, die CRLF und VerticalTabs sind zwar nicht in diesem ASCII-Bereich, den ich gerade angesprochen habe, aber sind natürlich für Line-Endnicks essentiell, wenn wir schon dabei sind. Okay, wobei Sie ja halt XML in Gzip sind oder ZIP in dem Fall und da hast du immer das Problem, dass du eigentlich prinzipiell erst einmal auspacken musst und dann noch das XML verstehen musst. Du kannst bei XML als User selber schreiben, würde ich mal sagen, aber ich würde es der durchschnittlichen Gemeinde hier nicht zutrauen und mir auch nicht. Was anderes, ein Beispiel für plaintext ist zum Beispiel so ein Textdokument. Ich habe mal ein Beispiel mitgebracht, mit dem wir arbeiten können, die Datenschutzgrundverordnung und hier sieht man halt schon, alles ist schön eingerückt am Anfang, damit es schön aussieht, damit man es direkt so auf den Line-Printer werfen kann. Die Überschriften sind schon zentriert, vorzentriert und die Listenpunkte sind auch eins und zwei und nicht so, wie man es jetzt in HTML zum Beispiel erwarten würde, als Listenpunkte definiert und dann automatisch durchnummeriert werden. Apropos Line-Printer, wenn man an sowas wie Line-Printer denkt, dann fällt da ja auch meistens immer plaintext raus oder Schreibmaschinen oder so, was man früher hatte und hier sieht man halt genau dieselben Herangehensweisen, dass man hier den Absatz einrückt, indem man die Space-Taste drückt, zum Beispiel oder hier dementsprechend rechts ausgerichtete Daten, indem man halt vorher auch möglichst viel entweder tap oder space drückt. Und wir sehen auch keine Grafiken hier drin oder so. Das höchste, was es gibt, ist hier vielleicht mal eine Unterstreichung, die man übrigens mit der Unterstrich-Taste früher gemacht hat, falls noch jemand eine Schreibmaschine besitzt oder sie irgendwann mal benutzt hat, weißt das vielleicht? Genau. Und insofern würde ich mal sagen, ist plaintext eigentlich so seit dem, ja eigentlich seit es Schreibmaschinen gab, das herkömmliche Datenformat gewesen, auch wenn es damals noch nicht Maschinen lesbar sozusagen, also das war damals noch kein Thema, weil man es einfach nicht brauchte, sondern es war halt Human Interface sozusagen, nicht das Maschinen-Interface. Genau. Und da findet man auch gleich einige Vorteile dabei, weil dieses plaintext ist halt sehr, wie ich schon sagte, in diesem Hacker-Workflow sehr leicht zu benutzen und die Menschen, die es benutzen wollen oder bearbeiten wollen, können es einfach bearbeiten in einem Text-Editor und brauchen nicht irgendwie eine spezielle Software dafür. Und man kann es halt auch leicht versionieren und zum Beispiel irgendwie in ein Git oder ein Subversion oder das Versions-Kontrollsystem der Wahlpacken, wie Patches per Brieftaube würde auch gehen. Ein Patches zum Beispiel dann so aus, ich glaube ich unterfordere hier manche, wenn ich hier von Patches erzähle, weil sie wahrscheinlich taktiklich damit arbeiten, wenn ich zum Beispiel hier so ein Rechtschreibkorrektur machen will und die Grundrechte durch wirkliche Grundrechte austauschen will, kann ich das in einen Patch verpacken und muss nicht die ganze Datei immer irgendwo hinschieben und Punkt V2 nennen. Ihr kennt die Vorteile von Versions-Kontrollsystemen. Und was das nächste ist, was mit Versions-Kontrollsystem kommt, ist halt die Versionierbarkeit, die Synchronisierbarkeit. Wenn man irgendwie einen gemeinsamen Genutz des Git für seine Dokumente benutzt, kann man auch mit mehr als einer Person gleichzeitig darin arbeiten. Wenn jetzt irgendwie zwei Leute zufällig den gleichen, die gleiche Stelle in diesem Text angefasst haben, dann kommt es halt zu einem Merch-Konflikt oder einem Versionskonflikt, den man halt manuell beheben muss in dem Fall. Aber da Hacker sowieso taktiklich machen und Leute, die mit Git arbeiten und 50 Kernel Branches nebeneinander pflegen müssen, ist das kein Thema für die außer vielleicht ein bisschen nervig, aber besser als alles andere würde ich sagen. Also Binerformate, die eine Datei aufmachen, die andere Datei gleichzeitig aufmachen, visuell gucken, was sich verändert hat, möglichst keine Fehler machen. Also da ist mir Text schon lieber. Und die meisten Versionskontrollsysteme machen ja auch hier diese schönen Markereien, beispielsweise wenn jetzt jemand hier, was wir vorhin hatten, eben den Patch, die Grundrechte mit dem D versehen hat hier, den Typewo gefixt hat und hier hinten ein insbesondere ist hier unten mit einem E auch richtig. Das wurde halt in dieser Version, in der unteren Version repariert und das andere wurde in der oberen Version repariert und da der Kontext in diesem Teil halt diese andere Zeile jeweils beinhaltet, muss man halt manuell merken. In dem Fall würde man einfach die oberste Zeile von der obersten Version und die unteren Zeile von der untersten Version nehmen. Worauf spielst du an, gleich lang? Achso, ja, ja, kann ich machen. Genau, wenn man jetzt eine Zeile umgebrochen hätte, weil sie zum Beispiel über die 80 Zeilen Grenze hinaus lang geworden wäre in der einen Version, dann wäre es natürlich ein etwas harigere Konflikt. Deswegen bin ich eigentlich auch verfechter von Semantic New Lines. Das heißt, was jetzt hier nicht der Fall ist, weil ich hier mitten in einem Wort zum Beispiel getrennt habe, Grundfreiheiten. Aber Semantic New Lines ist sozusagen an der Stelle, wo ein Satz zum Beispiel zu Ende ist, eine neue Zeile anfangen oder wo ein Halbsatz irgendwie neu anfängt von einem und zum Beispiel oder nach einem Komma oder so halt einen Zeilenumbruch machen, damit es halt bei solchen Dokumenten nicht zu solchen Konflikten kommt, wo man nachher die Zeilen auf 80 Zeichen umbrechen muss und dadurch wieder Merchkonflikte verursacht. Genau, diese Dokumente sind ja sehr schön jetzt, so als Mensch kann man die ganz gut lesen, aber wenn man die so ein bisschen weiter verarbeiten will, dann hat man da vielleicht so ein paar Probleme mit. Deswegen fängt man meist an, irgendwie Text mit Struktur zu versehen, aber auch trotzdem auf dieser ASCII oder Unicode Plaintext-Ebene, in dem man halt sich so ein Schema ausdenkt, so ein bisschen Markup oder so vielleicht und dadurch versucht halt die Vorteile, wie oben weiter zu benutzen, Versionierbarkeit und Synchronisierbarkeit durch Version Control und halt auch, dass Menschen es leicht bearbeiten können, aber trotzdem, damit es nachher irgendwie leicht von Tools lesbar ist und damit die Tools da auch vielleicht so ein bisschen was mit anfangen können, wenn man es weiter verarbeiten will. Und ich würde mal sagen, die Struktur hilft einmal diesen Tools halt und andererseits halt auch dem Menschen, die diese Dokumente lesen, meistens genau und das Ziel davon ist halt nie wieder seinen Lieblingseditor zu verlassen müssen oder seine Shell, weil die guten Editorien haben ja sowieso alles eingebaut. Genauso ein einfaches Format wäre zum Beispiel CSV, kennt glaube ich jeder von euch, comma separated values oder in dem Fall DSV delimiter separated values mit einem Simicolan, ich habe hier mal ein CSV aus unserem Hackerspace von der Finanzbuchhaltung genommen und die Zeilen sind hier einfach durch ein Simicolan getrennt und ein Tool kann sozusagen eine Tabelle einfach zurückpausen, indem es halt dieses Simicolons durch, ja, dieses Simicolons findet im Prinzip. Ich habe ja kurz ein kleines Python Script mitgebracht, was das tut. Im Endeffekt öffnen wir einmal unsere Datei, lesen die Zeilen einmal in ein, in dieses area hier oben ein, in dieses area lines, gehen dann einmal über jede Zeile drüber und splitten die aktuelle Zeile an einem Simicolon auf und packen das in unser sales array und im zweiten Schritt können wir einfach über dieses sales array, über die Zeilen und die Spalten da drüber iterieren und eine HTML Tabelle daraus machen, indem wir hier noch die erste Zeile als header mitnehmen zum Beispiel und die Ausgabe sieht dann entsprechend so aus und wenn ein Tool das pausen will, dann geht das recht einfach. Harich wird es dann, wenn man irgendwie so sein delimiter Zeichen irgendwie in dem, in den Spalten selber benutzen will, da gibt es aber auch Möglichkeiten sowie Quoting oder so, aber das muss man sich da später mit befassen, wenn es auftritt. Genau. Was habe ich denn das Nächstes hier? Ah ja, wir gehen mal wieder zu unserem Beispiel zurück, das wir vorhin hatten. Dieses hier, wo ich ja schon gesagt hatte, dass das die Struktur quasi in dem plaintext drin ist, in dem die Zeilen eingerückt sind oder die die Listenpunkte entsprechend vornummeriert sind in diesen Klammern hier. Wir versuchen einfach mal mit einem Skript dieses Dokumenten zu pausen, auch wieder ein Pausen Skript mitgebracht. Ich würde das jetzt einfach mit Rack Access machen, indem ich auf jede Zeile einmal draufgucke, ob sie mit einer Klammer anfängt, in der eine Nummer steht und danach also mehr als eine oder eine Nummer und dann eine schließende Klammer hat, dann einen Space und dann etwas Bediebiges bis zum Zeilenende. Wenn das der Fall ist, hol ich mir hier diesen ersten Match, der hier geklammert ist. Das wäre in dem Fall der Part nach dem Listenpunkt sozusagen. Merke mir, dass ich gerade in einer Liste bin und merke mir das als mein aktuelles Item. Und wenn eine Zeile mit so vier Spaces anfängt, also wir haben eben gesehen hier, die sind alle schön eingerückt hier, damit sie mit dem Listenpunkt abschließen. Und wenn sie, wenn die Zeile damit anfängt, dann ist das offensichtlich ein Listenpunkt, der weitergeht und ich tue Ihnen an das aktuelle Item dran. Genau und so gehe ich dann drüber und habe nachher ein Array von meinen zwei Listenpunkten, die ich hier in dieser Datei drin habe. Das ist so eine Strategie, die man anwenden kann, zum Beispiel Rack Access darauf zu werfen, also reguläre Ausdrücke. Und ich würde mal sagen, man kann eigentlich in 90 Prozent der Fälle sogar HTML mit Rack Access erschlagen, wenn man weiß, wie das HTML formatiert ist. Und man muss da eigentlich kein SGML-Paser oder XML-Paser drauf werfen, wenn man weiß, wonach man sucht. Das ist natürlich nicht das generische, aus jedem XML oder aus jedem HTML eine Struktur darstellen, das dafür braucht man halt stärkere Paser, aber weiß nicht irgendwie so eine Appi von, keine Ahnung, was hatte ich letztens, Last FM oder so, letztens ist auch schon wieder 7 Jahre her. Appi von Last FM, Pasen ist halt, ja, es sieht halt immer gleich aus, die Struktur ist gleich, da stehen halt nur andere Platzhalter drin sozusagen. Und das kann man relativ gut halt mit regulären Ausdrücken dann erschlagen, sag ich mal, Pormans HTML Pausing. Gut. Und das wäre so ein Beispiel, wie bei uns die To-Do-Listen aussehen. Also wir haben für jedes Projekt so ein Dokument, wo To-Do's drinstehen, die noch getan werden müssen. Und in dem Fall wäre das jetzt ein Arbeitspunkt, der getan werden muss, zum Beispiel den Bootloader, Bearbox in dem Fall, auf die Version 2014 zu updaten, 2014 01, steht hier oben halt in der ersten Zeile als Header drin. Das hat eine Task-Nummer, die immer aufsteigend vergeben wird oder beziehungsweise pro Kapitel. Priorität ist dann immer, ja, wir schicken das dem Kunden und der sagt mal, welche Task gerade für ihn wichtig sind. Und dann pflegen wir das zurück über Tools. Und an diesem Arbeitspunkt wird auch gerade gearbeitet, das sieht man durch diesen Punkt hier. Und dieser Arbeitspunkt hat irgendwie Subtasks, nämlich einmal den Bootloader zu updaten, dann irgendwie die Remaining, die die anfallenden Patches, die noch über sind, irgendwie an Abstümen zu schicken. Also gucken, dass halt möglichst alles abschwimmen landet, damit man nicht selbst pflegen muss, sozusagen, seinen Aufwand. Und dann hier noch ein bestimmtes Reset Issue, was vorher aufgetreten ist, irgendwie zu reproduzieren. Und dann nötigerweise das auch zu fixen. Und dieser Arbeitspunkt hier, den Bootloader Update, der schon errichtet, deswegen steht hier ein X drin. Und dieses Reset Issue, das hat der Fridolin Tux hier versucht zu reproduzieren und hat darunter geschrieben, er kann das nicht reproduzieren, deswegen hat der Fix hier auch ein Minus. Und das ist sozusagen abgesagt. Ja, erst mal Fragen dazu. Hier unten stehen dann noch so weitere Informationen, so wie Estimates, also wie Schätzungen, wie lange man für diesen Task sozusagen brauchen würde. Und all dieses kann man halt prinzipiell eigentlich über Regexes erschlagen, sag ich mal. Also man muss da so ein bisschen State einbauen. Also zum Beispiel jeder Task fängt hier oben mit so einem in Spalte 0, sozusagen mit einer Klammer an. Und dann muss man so ein bisschen State einführen und danach halt die einzelnen Subpunkte passen oder vielleicht auch die Beschreibung vorher noch hier, was ja eigentlich getan werden soll. Dann guckt man nachher hier nach dieser Zwischenüberschrift hier Objectives oder so oder Estimates. Genau. Und dann, wenn man da ein entsprechendes Tooling für hat, dann kann man da auch ganz einfach, relativ einfach eine Abschätzung machen, was noch so in diesem Projekt getan werden muss halt aufgrund dieser Information hier. Und zweite wäre so ein Beispielkalender von diesem Fridolin Tux, der bei uns arbeitet. Oben steht erst mal, wem dieser Kalender gehört, ein paar Trainer zur visuellen Übersicht halt, die sind nicht wichtig, weil also wie gesagt, man soll ja als Manager auch schön sich darin zurechtfinden können. Hier unten ist der Kalender mit den Tagen aufgeschlüsselt und was an diesem Tag getan werden soll hier, zum Beispiel ist für den Montag hier dieser Task 06030 aufgeplant. Und diese Ressourcen, wie wir sie nennen, sind halt hier in Spitzenklammern und die normalen Tasks an dem Tag, die man noch erledigen muss, werden halt jetzt in so eckigen Klammern wie vorher auch erledigt. Und wenn sie nachher nicht abgehakt werden, dann wandern sie am Ende der Woche hier oben in die Altlasten und dann hat man sie noch mal so als Backlog sozusagen, um zu gucken, was da noch so eigentlich zu tun ist. Genau. Und auf diesen Kalender kann jetzt jeder drauf schreiben und einen Termin eintragen und einen Git-Commit und einen Push bzw. wir uns einen SVN-Commit machen und so machen wir im Prinzip kollaborative Kalender. Und bisher hat es relativ gut funktioniert. Sonst noch Fragen bisher? Wenn du nach Fragen fragst, das ist jetzt ganz viel verschiedene Sündungsvarianten mit verschiedenen Trendzeichen, Strichen, Spitzenklammern plus das sonst was, macht eine Sündungsprüfung, wenn es sich jemand vertippt hat, dass es nachher nicht hinten raus in dem Passer dann irgendwie sich zerstückelt und zerjagt, wenn es umsortiert wird. Es gibt eigentlich keine Sündungsprüfung, es gibt Sündungshighlighting im Editor, also die meisten Editor haben sowas, die also relativ einfach machpflegbar, auch für die eigenen Dinge, die man sich so überlegt. Sündungs, in dem Fall würde dann halt auffallen, wenn es nicht mehr passt, aber dann wird es halt einfach ignoriert oder falsch gepasst wird. Ich glaube, die Sündungshighlighting ist auch einfach genug, dass man sie halt als Mensch immer richtig macht oder so. Und wirklich Sündungshighlighting hilft einem dabei schon vielen, aber so ein Sündungschecker in dem Fall ist, findet jetzt bei uns nicht statt. Außer bei Stundenzetteln zum Beispiel, Stummzettel sind bei uns auch einfach delimiter separate values und da wird dann wirklich gecheckt, ob die Kostenstellen, auf die man bucht, existieren und ob die ganzen Zeiten so passbar sind. Das passiert alles in einem Comet Hook auf dem Server halt. Sowas könnte man zum Beispiel auch machen. Gut, das bin ich schon soweit durch. Was viele vielleicht auch kennen, ist vielleicht Markdown. Ich glaube, da muss ich gar nicht zu sehr darauf eingehen und da kennt jemand Markdown nicht. Der Leirer kennt keinen Markdown. Okay, gut. Dann skip ich dann noch kurz drüber und möchte eigentlich Pandoc erwähnen, weil Pandoc und Markdown sehr gut zusammengehen. Pandoc ist ein Tool, was in Haskell geschrieben ist, aber das ist eigentlich nicht wichtig, wenn man es einfach ausführt. Und es ist so, die Eier legen wollen mich so auf für alles Mögliche, was es mit Markup zu tun hat, nämlich Restructure Text hat im L. Es kann sogar DocX lesen und schreiben. Ich glaube, lesen kann es sogar auch noch oder schreiben kann es sogar auch noch PowerPoint erteilen, wenn man mal irgendwie Slides machen will. Also dieses Slides sind übrigens auch aus Pandoc gefallen. Was ich vielleicht vorhin in dem, was ich habe vorhin in dieses Fenster hier gezeigt, da sind, das ist der Quelltext dazu. Genau und es ist ja weiter aber über Filter, das heißt, man kann sich so in diesen Sonntagsbaum den Pandoc intern parsed reinhängen und da selbst irgendwie Transformationen drauf machen. Es gibt da zwei Projekte in Palsen, die einem das abnehmen, dieses Parsing. Von diesem Sonntagsbaum und das Lua und Haskell ist einfach integriert in Pandoc schon. Haskell, weil es halt nativ in Haskell geschrieben ist und Lua, weil es halt sehr leichtgewichtig einzubetten ist. Und in dem Fall würde ich jetzt sozusagen einmal das Dokument hier einlesen, hier Slides.md, Markdown einlesen und das to JSON konvertieren und das dann durch meinen Filter hier pipen, einfach durch eine Shell Pipe, so zu sagen und dieser Filter arbeitet dann auf diesen JSON-Daten und transformiert sie um. Und im nächsten Schritt habe ich das wieder in Pandoc rein und lasse Ihnen dieses JSON wieder in mein Output Format in dem Fall latig umformatieren, genau, zurücksetzen, umsetzen. Und ja, also der Standard-Anwendungsfall für mich ist halt Markdown schreiben und danach PDF mit Präsentationen bekommen. Und es geht auch sehr gut, wenn man halt irgendwie einfach nur ganz normales PDF als Seite haben, also DIN A4 oder so zum Ausdrucken haben will. Das läuft halt bei Pandoc alles überall latig. Es rennt halt das Markdown halt in latig und einmal durch PDF latig durch. Wenn man da ein bisschen Gehirnschmalz reinsteckt oder eins von den vordefinierten Templates benutzt, die Markdown anbietet, dann kann man da auch relativ schön ansehnliche Dokumente herausbekommen. Und man muss halt keinen latig schreiben, also man kann trotzdem latig schreiben. Zwischendrin, wenn Pandoc halt in dem Markdown merkt, dass es halt ein Latigbefehl erkennt, dann reicht es ihm halt direkt durch. Aber den ganzen anderen Kletterradstimmen in latig halt machen muss, irgendwie so Beginn, Item Nice, Backslash Item und das muss man halt alles nicht machen, weil die Markdown-Listen halt sehr schön einfach von der Hand gehen sozusagen. Genau dieser Sündagstree kann man sich einmal durchlesen, wenn man will. Aber im Endeffekt ist, dass es sozusagen die interne Repräsentierung in Pandoc wie es auch die Haskell-Typen sozusagen intern darstellt. Und man kann nicht vielleicht erkennen, dass da oben so ein Heder ist, der irgendwie so ein Link-Titel hat, damit man ihn anspringen kann. Dann hat er hier, this is Markdown-Document, dazwischen dieses Space ist immer damit Pandoc weiß, wo es trennen muss, die die Zeilen umrechnen muss und so. Wenn wir so ein Paragraf, dann eine Bullet List mit ein paar Items. Das Ganze gibt es auch noch sehr viel unlesbarer als Jason. Und ich bin sehr froh, dass Tools mir diese Arbeit abnehmen. Lass mich kurz. Ja, ich kann diese Frage kurz beantworten, indem ich hier das Terminal größer mache. Also, was Pandoc lesen kann, ist dies. Da steht bestimmt irgendwo Latich drin. Also kann ich auch Latich reinreichen und es in Markdown konvertieren? Ja, es kann auch Markdown nach Markdown konvertieren. Das heißt, wenn du dann Markdown schön formatiert haben willst, kannst du es einmal durch Pandoc peipen und dann ist es schön. Und als Output-Format ist hier halt alles mögliche anderen. Also Output-Formate sind meist mehr als Input-Formate, weil man sie halt einfach durch so einen Template irgendwie mit Platz halt dann ersetzen kann. Ja, es ist schon eine ganze Weile. Verschiedene Markdown-Dialekte sind da auch mit drin hier, so irgendwie Githubflavoured Markdown oder irgendwie Common Mark oder so. Weil wir noch ein bisschen Zeit haben, kann ich da gleich drauf eingehen. Es gibt so eine ganze Reihe von Extensions, die Markdown, die man in Markdown in Pandoc an- und ausschalten kann. Also zum Beispiel hier so Smart-Typography oder so was, oder wie man seine Header definieren will. Also wenn man zum Beispiel die ... Moment, ist das hier? Finde ich jetzt gerade nicht. Na ja, vielleicht hab ich ... Ah, hier genau. Man kann die Header ja einmal so in Markdown mit diesen Hashes am Anfang definieren oder halt wie in Newstructure Text auch mit diesen Unterstrichen. Und das kann man außen einschalten, nachher wie man seine Tabellen strukturiert haben will, alles mit Lückchen. Und ... Ja, da kann man auswählen. Das ist sehr flexibel. So, wo wollen wir eigentlich stehen geblieben? Ach ja, richtig, Pandoc. Ich würde einmal so ein Lua-Filter kurz erklären. Mein Einwindungsfall war halt, wie gesagt, vorhin schon, dass ich mit der Versammlungsprotokolle oder Vorstandsprotokolle halt in Markdown einfach ohne viel Overhead irgendwie definieren kann und sie dann nachher schön gerendert werden sozusagen. Ich hab mir die folgende Sintags ausgedacht. Diese Doppelpunkte in Markdown-Latech, in Pandoc, Markdown sind halt wie die DIVS in HTML sozusagen und man kann ihnen Klassen geben. Das heißt, in diesen geschweiften Klammern steht das die Klasse drin, die dieses DIVS haben soll, in dem Fall klasse Wort, damit ich das wiedererkenne. Und ich nehme einfach die erste Zeile hier als Titel, Erlastung des Vorstands für das Jahr 2019. Das ist etwas, worüber abgestimmt wird und dahinter halt in so kurzen Tags die pro Kontra und Enthaltungen. Also 19 pro Stimmen, 0 Kontrastimmen, 6 Enthaltungen. Und darunter weiterer Text für diese Abstimmung halt. Der Lua-Fügel sieht sehr einfach aus. Wenn ich mir das einmal in, dann hab ich jetzt gar nicht drauf, wenn ich mir das einmal in diesem Sintagstree angucke, dann würde diese 3 Doppelpunkte in so ein DIVS-Element gerendert werden. Und in, hier bin ich, in Lua kann ich einfach diese Funktion DIVS nennen, dann wird sie jedes Mal ausgeführt, wenn ein DIVS-Element gefunden wird und das DIVS-Element in diesem Sintagstree wird da halt reingereicht als Parameter. In dem Fall gehe ich jetzt einmal durch dieses Element durch und gucke, ob diese Klassen, die ich oben reinreiche, was hier dieses wäre. Wurde beinhaltet und das ist hier ja der Fall, deswegen mach ich hier weiter. Holen wir einmal aus dem Content sozusagen, also der Content ist sozusagen in dem Fall eine Liste von weiteren Blöcken, die in diesem, in diesem Lüft drin sind. In dem Fall wären es 2 Blöcke, weil hier einmal ein Paragraf ist und hier unten einmal ein Paragraf. Dadurch, dass sie durch eine Leerzeile getrennt sind, weil Leerzeile sind ja in Markdown halt Paragrafen-Trenner, Absatz-Trenner. Holen wir den ersten, auch wirklich den ersten, weil Lua fängt bei 1 an zu zählen, es verwirrt manche immer so ein bisschen, wenn sie von C kommen. Holen wir davon den ersten Block, das wäre diese erste Zeile oben mit dem Titel und Stringify-D, das heißt, alles, was da drin ist, dieses ganzen Spaces, die dazwischen den einzelnen Strings drin sind, mach ich wieder zu einem String zurück. Und habe nachher im Endeffekt wieder diese Zeile, wie sie hier steht, in dieser lokalen Variable drin. Und dann werfe ich da wieder ein Rekex drauf. In Lua sehen die Rekex etwas anders aus, aber man muss sich einfach nur merken, dass die Prozentzeichen in Lua das sind, was die Backslashes in Perl-Rekexes sind. Also ich gucke hier nach beliebigen Dingen, CaptureD, dann suche ich eine öffnende Klammer und darin eine Zahl, dann ein Pipe, dann noch eine Zahl, ein Pipe, noch eine Zahl und eine schließende Klammer. Das wäre sozusagen der Rekex für diesen Part hier. Und das erste Capture Group hier matcht einfach alles bis hierhin von vorne der Zeile. Genau und tue mir die einzelnen in meine Variaten rein, dass ich nachher hier so ein Subject habe, das im Endeffekt die Überschrift ist, dann die Anzahl pro, contra und neutrale Stimmen. Und dann muss ich wieder ein Pandoc-Element zurückgeben und in dem Fall wäre das ein Paragraf, der halt einmal diesen Titel enthält und ein zweiter Paragraf, der halt die Information über die Abstimmung enthält und dann als drittes halt den, ja im Prinzip alle anderen bzw. den zweiten Paragraf, der hier noch als weiterer Text obendrin steht. Und wenn ich das einmal da durchschicke, dann sieht es so aus und wenn ich will, kann ich da jetzt halt noch auf dem Pandoc-Syntagstrie einfach mir das, den Text so umformen, wie ich es nachher haben will in meinem Dokument, ob ich da irgendwie in Lattich irgendwie eine Minibox reinbauen will und sie zentrieren will und einen Rahmen drum machen will, könnte man alles da reinbauen. Und das funktioniert soweit, über Reck-Exes. Ja, fragen? Wenn du ein Bild einbauen willst, es gibt mehrere Möglichkeiten. Ich glaube, ich habe hier auf meinen Folgen, ja entweder ASCII-Art, genau, oder du nimmst einfach Markdownsyntags dafür, also ein Ausrufezeichen und gefolgt von einem Link, der auf ein Bild zeigt und Formate, die das können, die können das auch einfach raus rendern. Du kannst dir einen Lure-Filter bauen, mit dem du direkt in so einem Codeblog vielleicht Sprache deiner Wahl vielleicht dort oder so einbetten kannst und das wird dann automatisch durchgerendet. Die Möglichkeiten sind vielfältig, aber alles, was so JPEG und PNG und vielleicht auch PDF beinhaltet, das kannst du einfach mit dieser Linksyntags machen oder Imagesyntags in Markdown. Ja, Anmerkung dazu. Ich habe meine komplette Master thesis mit Pannock Markdown geschrieben und Bilder über SVG-Bob gerendert, alles mit Make orchestriert, gibt es auf GitHub als Template, falls da jemand Interesse und so was hat. Ja, hier noch ein paar Links, falls ihr Fragen habt, die durch diese beiden Links erklärt sind. Ansonsten, ja, also ich wäre jetzt die letzte Slide, also noch so eine Zusammenfassung, wir haben ja gesehen, was die Vorteile sind und wie man das passen kann, einmal durch REC-Axis und einmal durch Pannock-Filter und dass die Struktur dabei hilft, Informationen aus diesen Dokumenten rauszuziehen. Ja, und das wäre von meiner Seite. Ist das schön sprecher, die im Überpünktlich fertig werden? Wir haben 15 Minuten für Fragen und 20 Minuten fast für Fragen und Antworten, das heißt, wenn ihr noch da bleibt, dürft ihr noch mit Mikro fragen. Wir haben hier oben schon eine. Ja, eine Frage, hast du das mal mit Sphinx verglichen, also diese Pannock-Toolchain mit Sphinx? Ich habe mit Pannock angefangen zu arbeiten und wurde dann durch meine Arbeit halt auch auch Sphinx hingewiesen. Sphinx ist meiner Meinung nach sehr viel besser für HTML geeignet, also das PDF, was da bei Rausfeld ist, so ein bisschen seltsam und ich habe so ein bisschen, ich stehe ein bisschen auf Kriegsfuß mit Restructure Text, deswegen. Also ich muss immer überlegen, welche von den vielen Link-Syntaxen ich jetzt verwenden muss, ob ich Doppelpunkt greff oder Doppelpunkt sonst sowas. Das ist bestimmt alles historisch gewachsen, das sehe ich ein, weil Sphinx ja auch auf Docutils aufbaut, aber ich bin da nie so richtig warm mit geworden, deswegen bin ich bei hauptsächlich für private Sachen zumindest bei Pannock und Markdown geblieben. Ich sehe ein, dass Restructure Text sehr viel bessere Syntax hat, um sich so seine eigenen Elemente sozusagen zu definieren über diese Roles, glaube ich heißen sie, die mit Punkt-Punkt anfangen. Das finde ich sehr schön, ja. Ich habe leider noch nichts Ähnliches irgendwie in Markdown gefunden oder in anderen Sprachen, außer wenn man jetzt vielleicht direkt Lattich darauf werfen würde, das geht natürlich direkt, dass man sich seine Kommands so definiert, wie man sie haben will. Da muss ich sagen, das finde ich sehr schön in Restructure Text, aber ja, die Nachteile überwiegen finde ich gerade. Hast du schon mal irgendwas im plaintext gemacht und dann so nach Stunden langen Kämpfen so gesagt, hätte ich doch nur ein strukturäteres Format genommen? Ich glaube nicht, ich glaube, dass es mir noch nicht passiert. Nichts, was ich mit deinem Set nicht hätte lösen können. Anmerkung zu der Sache eben bei ASCII Doc, bis man das ASCII Doc heute gibt es auch so Rollen, das heißt, da kann man jeden Trickstil mit Restructure Text machen. Danke. Für Leute, die gern ihre Ausgaben checken, gibt es plaintextaccounting.org. Ja, das wollte ich eigentlich erwähnen, genau. Hammergeil, gibt auch dann einen Frontendest praktisch das ganze in der Webseite gießt und man da schöne Grafen bekommt und so, aber generell erst mal alles entgeht und so, Hammergeil benutze ich seit Jahren und ist super und es gibt auch eine ganze Community, um andere Tools zu Sachen wie Bookmarks verwalten oder ja, was auch immer man sich ausdenken mag und es gibt sogar ein Browser, falls da jemand freaky genug ist, praktisch in plaintext zu Browsen. Wir sind ja im Web nur wegen der Inhalte. Bitte was? Ich kann das nochmal hier drauf werfen. Plaintextaccounting, hier unten gibt es glaube ich ein bisschen Übersicht. Cheat, Cheat ist gut. Also die größten Dinge, die es für Plaintextaccounting gibt, ist einmal Ledger, CLI, damit hat es glaube ich alles angefangen, es sind zwischen auch zehn Jahre alte, sind CLI geschrieben und die Entwicklung ist gerade so ein bisschen eingeschlafen, glaube ich. Edge Ledger ist auch wieder ein Haskelprojekt und Beancount ist das Passenpondent dazu. Die haben alle so ein bisschen ihre eigene Syntax, aber grundsätzlich arbeiten sie halt beide alle drei mit diesem Gedanken. Also das wäre hier so eine Buchung, wie sie in, glaube ich, Ledger jetzt aussehen würde mit einem Datum und einem Account. Ich habe gerade schon überlegt, ob das groß genug ist. Im Endeffekt nimmt man sich so Konten sozusagen als, was nicht, Verwendungen von Geld, Buchungsklassen oder so wie man sie nennen würde in Deutsch und so eine Buchung in Ledger muss halt immer balancieren. Das heißt, auf der einen Seite muss ich 20 Euro irgendwo hinbuchen oder 20 Dollar in dem Fall, auf der anderen Seite muss ich 20 Euro irgendwie wegbuchen. Deswegen werden hier 20 Euro auf das eine Konto gebucht und von dem anderen Konto 20 Euro abgezogen und darauf aufbauend gibt es halt Auswertungs-Commands, die Ledger macht, Balances und einmal so eine Übersicht, was man ausgegeben hat. Wenn wir gerade schon bei Empfehlungen sind, ich fand dein Beifühl mit dem Kalender schon ganz beeindruckend, aber es gibt auch einen Plaintext-Kalender-Tool, das nennt sich Remind. Das ist ganz furchtbar zu googeln bei dem Namen. Es gibt aber ein Debian Package und sonst hast das, glaube ich, genauso heißt. Und da kannst du halt auch quasi Implaintext-Kalendereinträge machen, auch mit solchen Sachen wie Wiederholung, weil niemand von uns möchte gerne EICAL-Kalender-Files selber schreiben. Ja, genau, das ist das. Und du kannst da ziemlich wilde Dinge machen, also irgendwie sowas wie dieser Termin wiederholt an jedem 5. Samstag im Monat, außer wenn Ostern länger als drei Tage her ist oder so irgendwas. Ja, du kannst es in EICAL konvertieren und was auch machen. Das muss ich sagen, unser Kalender im Hackerspace in Stratum Null ist auch einfach eine Media-Viki-Tabelle. Ich merke auch schon, sorry, ich will zu Remind kurz anfügen. Ich habe das eine Zeit lang verwendet. Ich will eine Warnung aussprechen für Leute, die eventuell mit anderen Leuten auch noch interagieren auf den Daten. Das Tool ist so mächtig. Also wenn ihr euch 100% sicher seid, dass nur ihr die Daten seht, alles gut. Aber in dem Moment, in dem ihr irgendwie EICAL-Files vielleicht mit Freunden teilen wollt oder das Ganze irgendwie synchronisieren für eure Andrieth, EICAL ist einfach nicht mächtig genug, um das abzubilden, was Remind abbilden kann. Und man läuft da in lustige Dinge rein und fängt sich da eventuell Pane ein. Deswegen sehr genau überlegen, ob man so ein mächtiges Tool einsetzen will. EICAL ist es sowieso eine Katastrophe, aber eine kurze Nachfrage zu Remind. Wie schwer ist es denn, dass mit Synchronisierung für Kaldaf, also wenn man das versuchen würde? Ich habe noch eine Frage zu der Pandoc nach PDF-Konvertierung. Hast du schon mal probiert, damit ein ausfüllbares, ankreuzbares PDF zu generieren? Geht es? Ich denke, im Endeffekt würde dieses Problem reduziert werden auf ich suche mir ein Latech-Paket, was sowas kann. Aber nee, habe ich noch nicht ausprobiert. Er macht Formulare im Text-File, das ist ... Haben wir sonst noch Fragen? Ich sehe zwei Kandidaten für Talks nächstes Jahr. Also vielleicht noch mal zu der Remind-Nachfrage von eben ... Wollte ich nicht mehr machen, das hätte ich gesagt. Wenn du einmal diesen Weg eingeschlagen hast, dann kommst du da so schnell nicht mehr raus und Synchronisierung mit anderen Leuten ist immer ... ist schwierig. Du kannst deinen Kalender publishen, aber in die andere Richtung wird es harig. Genau, die andere Frage, die ich hätte, wäre, gerade was diese Tasks- und Kalender und sowas angeht. Habt ihr jetzt quasi eure eigenen Formate erfunden? Wie sind so gewachsen? Ja, genau. Wie wäre es, wäre es eine Alternative oder warum macht ihr nicht sowas, dass man sagt, ich schreibe das jetzt in Jammel, meine Dwegen, macht dann Task-Doppelpunkt und packt dann in Jammel-Syntax-Dinge drunter, weil dann habt ihr halt fertige Pausa für sowas. Gibt es da eine Gründe, warum ihr das nicht nehmt, weil das so gewachsen ist? Das ist eine gute Frage. Ich glaube, Jammel ist einfach jünger als dieses Format. Ansonsten habe ich da keine Antwort darauf. Es wäre natürlich sinnvoll, weil Jammel auch sehr einfach zu schreiben ist. Das stimmt. Ich würde vielleicht auch sagen, so diese Task-Listen, die wir da haben, sind sehr viel besser lesbar, weil sie halt diese schönen Krötzchen und Leereboxen, sozusagen, gleich sichtbar haben. Das ist vielleicht noch so ein Vorteil gegen bei Jammel, wobei man das bestimmt auch in Jammel so machen kann, dass man halt seinen Jammel entsprechend, also die Key-Value-Paare, sozusagen, entsprechend nochmal durch einen Python-Parsen lässt. Oder du nimmst einfach ein Eikarl für die To-Do-Listen und schreibst den Python, dass dir das dann als Text-Fall genauso in dem Format rausgibt und die Sache ist erledigt. Oder du verwendest Task Warrior oder also ich glaube, wir sollten in nächstes Jahr so einen Text-Tool-Track so für Kalender, To-Do's, erreicht was ein. Du hast jetzt wahnsinnig viele tolle Tools präsentiert und eigene Formate, was man sich alles neu erfinden kann. Vielleicht so einen Hinweis, wenn man noch einen wichtigen Editor hat. Da gibt es so ein Org-Mode. Auf diesen Hinweis habe ich gewartet, da habe ich nämlich keine Ahnung von. Ich selber verwende nur den Editor im Text-Modus und kein Org-Mode, aber das ist sehr beeindruckend, was da alles geht. Mit Kalendern, mit To-Do-Listen, ein Freund von mir hat über zehn Jahre lang seinen Labor und Tracking-Sheet damit geführt, macht automatisch Kundenabrechnung für Kundenprojekte, mit Kalender, mit Spreadsheets mit Berechnung. Man kann alles in Latik reinschmeißen, geht vielleicht nicht alles, super toll, aber es ist alles in einem Ding und man kann den IMEX auch buden, mit init gleich, user bin IMEX. Ja, ich kenne auch Leute, die sich mit Org-Mode, Org-Mode heißt es nicht Org, wie das eiche Org-Mode in IMEX sehr viel das Leben leichter gemacht haben, aber es ist halt auf IMEX zugeschnitten leider. Vielleicht auch als Anekdote für ein Newscaster, ich hatte für plaintext, ich habe eine Inventur-Datenbank gemacht für meine Wohnung, weil ich irgendwann festgestellt habe, dass ich irgendwie gerade das fünfte HDMI-Kabel gekauft habe und ich die Dinge immer nicht finden konnte und habe dann halt angefangen meine ganzen Schubladen durchzugehen und als ich das irgendwann auch so mal erzählt habe, irgendwo im Internet in so einem Forum hinterher, oh geil, was hast du da gemacht? Ist es irgendwie SQL oder was? Nee, ein Textfall. Also ich schreibe dann halt auf einer Zeile, es ist ein Item und da schreibe ich das dann halt in ganz vielen Varianten, damit ich dann irgendwann später in GREP nur einen Begriff reinwerfen muss, also es steht dann halt dann wie mit dem Mie-Kabel, HDMI-Anschlusskabel, Mail-to-Mail und vielleicht noch ein paar andere Wörter, die mir mit mir eingefallen sind, als ich das in wie inventarisiert habe und vorne steht dann eine Beschreibung so als kurzer Code, wo das ist, also das HDMI-Kabel zum Beispiel wäre jetzt in FM3.1, wenn ich es mich richtig erinnere, also im Flur, in der Malmkommode, in der Schubladen 3, im Fach 1 und das ist halt so runter strukturiert, das heißt ich kann auch gleich gucken, was ist, was ist alles im Flur gelagert, suche ich halt nach hier Hütchen F, also halt Wegex mit am Anfang der Zeile suchen und ich habe dann noch sowas gemacht, dass ich während ich durchinventarisiere so denke so ach guck mal, das ist ja eigentlich Müll, den könnte ich mal wegschmeißen, dann mache ich mir auch gleich so ein Markierer ran, das gehört in Garbage, also halt so hier Pfeil G und dann kann ich dann irgendwann danach suchen und dann mal die 20 Items zusammensuchen, die ich eigentlich schon lange mal wie zum Wertstoffhof schaffen wollte, weil dann immer sonst die Hälfte fehlt oder die ich mal wie auf ebay kleinen Zeilen reinstellen will. Genau und so für kleine Datenmengen ist es halt total ausreichend, da muss man keine SQL Datenbank aufsetzen und ich hatte auch schon überlegt, ob ich die Buchführung bei uns im Space mal auch so eine Format umstelle, aber das lasst mich noch kurz erwähnen, Ledger kann auch beliebige Items tracken, das heißt du kannst sagen, ich habe 5 HDMI Kabel von, weiß nicht, Eingang nach Flur mein Kommode gebucht. Was, was mich jetzt nicht so für Aktien gedacht, was mich mehr interessiert wird, wie oft hast du jetzt diese Garbage Collection schon gemacht, weil das klingt eher so nach einem Prokrastinationsprojekt. Ich kenne es ja von mir, also haben wir noch Fragen, aber ich sehe schon, wir haben ganz, ganz viele Themen fürs nächste Jahr, ihr werdet da ganz viele Tocks einreichen, dann brauche ich ja mal nix über Commander-Zellen machen, ich finde das super. Ja, wenn es sonst keine Fragen mehr gibt, würde ich sagen noch einmal einen ganz, ganz großen Applaus und vielen herzlichen Dank.