Title: Nützliche Texttools: tpp und mutt-ng Author: Andreas Krennmair Date: 23. May 2005 Zur Person ******************************************** Andreas Krennmair Developer und Open Source Architect bei WebDynamite und lizenzfrei Tätig im Bereich: - Mobile Applications (WAP, Symbian OS Systemprogrammierung) - Unix Systemprogrammierung - System Management & Monitoring Privat aktiver Open-Source-Entwickler Zweigeteiler Vortrag ******************************************** * TPP - Text Presentation Program * mutt-ng - ein Mailclient für die Textkonsole Agenda TPP ******************************************** * Was ist TPP? * Features * Anwendungsgebiete * Vor- und Nachteile * Design Was ist TPP? ******************************************** * "Sie sehen es" * Eine Konsolenapplikation für Präsentationen * "Powerpoint für die Textkonsole" Warum TPP? ******************************************** Für die Textkonsole gibt es jede Menge Anwendungen: * Editoren (emacs, vim, jed, joe, pico, nano, ed, ...) * Mailclients (emacs, mutt, mutt-ng, pine, etpan, ...) * Newsreader (emacs, slrn, mutt-ng, tin, ...) * Web-Browser (emacs, lynx, links, elinks, w3m, ...) * IRC-Clients (emacs, ircII, irssi, BitchX, ...) * RSS-Reader (emacs, snownews, raggle, ...) * Aber keine Präsentations-Tools! --> TPP - "Text Presentation Program" Entstehung von TPP ******************************************** * Sven Guckes erzählt mir davon, dass es noch keine ordentlichen Präsentations-Software für die Textkonsole gibt * Ich mache mich an die Arbeit, einen Prototypen für so ein Tool zu entwickeln (Juli 2004) * Erster Prototyp ist innerhalb weniger Stunden Arbeit fertig * Sven Guckes stellt mir Nico Golde vor, der schon ähnliche Software angefangen hat zu entwickeln (weniger Features, Crashes en masse) * Nico hilft mir fortan, TPP weiterzuentwickeln * Ende August 2004: Release 1.0 * Mittlerweile Release 1.2 Wichtigste Features von TPP ******************************************** * Darstellung von Text - "normaler" Text - Text mit Attributen wie fett, unterstrichen, invers, ... - Links- und rechtsbündige Darstellung sowie Zentrierung * Verwendung von Farben - Vorder- und Hintergrundfarbe ist beliebig setzbar * "Coole Effekte": nicht nur Powerpoint kann Text spektakulär herumsliden ;-) * Beschränkung auf ein einfaches Dateiformat: reiner Text * Unterstützung von FIGlet zur Darstellung großer Schrift * Ausführen von Kommandos * usw. usf. Feature-Demonstration (1) ******************************************** Darstellung von normalem Text: Linksbündig Zentriert Rechtsbündig Sehr lange Zeilen, wie etwas in diesem Beispiel hier, werden natürlich am rechten Terminalrand umgebrochen, um eine schön ausgerichtete Darstellung bei quasi allen Terminaltypen und -größen zu erreichen. Man kann auch Text herumsliden lassen. Von rechts: Dieser Text kommt von rechts Eine Zeile nach der anderen... Von links: Dieser Text kommt jetzt von links Und ganz anders geht es auch: Jetzt von oben und gleich von unten Ja, diese Zeile kommt von unten Feature-Demonstration (2) ******************************************** Das ist normaler Text Das ist fetter Text Das ist fett und unterstrichen Das ist fett, unterstrichen und invers Das ist unterstrichen und invers Das ist invers Das ist wieder normaler Text Dieser Text erscheint jetzt in grün Dieser Text erscheint jetzt in rot Und wieder normal... (wie langweilig) Noch mehr Farben!! ******************************************** Hallo das ist ein Test mit Farben Feature-Demonstration (3) ******************************************** Man kann auch z.B. Sourcecode speziell hervorheben: .--------------------------- | def huffmanize(a) | heap = [] | a.each do |n| | heap << HuffmanNode.new(n,nil) | end | while heap.size > 1 do | heap.sort! | x = heap.shift | y = heap.shift | z = HuffmanNode.new(x,y) | $logger.debug "huffmanize: #{x.weight} + #{y.weight} = #{z.weight}" | heap.push(z) | end | set_values(a,heap[0]) | end `--------------------------- Feature-Demonstration (4) ******************************************** Oder interaktives Arbeiten an der Konsole simulieren: .--------------------------- | $ ls ~/*.pdf | /Users/ak/ccccamp2003-simd.pdf /Users/ak/icrc.pdf | $ uptime | 14:20 up 15 days, 16:47, 7 users, load averages: 0.36 0.49 0.52 | $ uname -srm | Darwin 7.8.0 Power Macintosh | $ su - | Password: | # whoami | root | # `--------------------------- Und natürlich kann man auch externe Kommandos ausführen. Und wieder zurück. Feature-Demonstration (5) ******************************************** ___ ____ _____ ____ ____ _____ ___ _ __ / _ | / __// ___// _// _/____ / ___/____ ___ _ / _/(_)/ /__ / __ | _\ \ / /__ _/ / _/ / /___// (_ // __// _ `// _// // '_/ /_/ |_|/___/ \___//___//___/ \___//_/ \_,_//_/ /_//_/\_\ _ __ ____ ____ _____ __ __ __ _ (_)/ /_ / __// _// ___// /___ / /_ / ' \ / // __/ / _/ _/ / / (_ // // -_)/ __/ /_/_/_//_/ \__/ /_/ /___/ \___//_/ \__/ \__/ _ _ |_ o ._ _. ._ _| _ ._ _ ._ |_ _ ._ _|_ o __ \ |_ | | | (_| | | (_| (/_ | (/_ | | (_) | | |_ o | / Aufbau einer TPP-Präsentation ******************************************** .--------------------------- | --author Andreas Krennmair | --title Eine einfache Präsentation | --date today "%Y %m %d" | --newpage seite1 | --heading Eine Überschrift | | Text, Text, Text. | * auch als Aufzählung | * usw. usf. | --center rechtsbündiger Text `--------------------------- * Alle Kommandos beginnen mit "--" * Genaue Aufstellung aller Kommandos im README von TPP Wie bedient man TPP? ******************************************** * Start durch die Kommandozeile .--------------------------- | $ tpp slides.tpp `--------------------------- * Bedienung nur über die Tastatur * Hilfe immer über '?' oder 'h' erreichbar Anwendungsgebiete ******************************************** * Kurzvorträge (lightning talks): Vorträge sind sehr schnell geschrieben, definitiv schneller als mit LaTeX, oder mit OOo oder PowerPoint zusammen- geklickt. * Einführung in textbasierte Programme und Live-Demos * Remote nutzbar Wofür eignet es sich nicht? ******************************************** * grafisch aufwändige Präsentation in Chefetagen o.ä. * Powerpoint-Benutzer Design von TPP ******************************************** Basisdaten: * Entwickelt in Ruby * Verwendung von ruby-ncurses * ca. 1700 Zeilen Code * Objektorientiertes Design * Wurde einmal faktisch neugeschrieben (zwischen Version 1.1 und 1.2) Klassendiagramm ******************************************** .--------------------------- | +------------+ +--------+ | | FileParser | ------> | Page | | +------------+ __ +--------+ | /|\ /| | | / | | / | +---------------+ / +---------------+ | | TppController | ----> | TppVisualizer | | +---------------+ +---------------+ `--------------------------- * FileParser parst das TPP-File in Pages, bestehend aus Zeilen * TppController holt sich vom FileParser eine Menge an Pages * TppController übergibt Zeilena aus Pages an TppVisualizer * TppVisualizer kümmert sich um Darstellung Controller und Visualizer ******************************************** * Derzeit existieren folgende Controller und Visualizer: - Ncurses (das, was sie jetzt sehen) - Text (zum Konvertieren in praktische Handouts) - LaTeX (zum Generieren von schönen Slides; derzeit noch alpha) * Controller und Visualizer für andere Zwecke auch nutzbar, z.B. grafische Darstellung mittels FXRuby (nicht implementiert) * TPP ist damit auch ein Framework für einfache Präsentationsprogramme Mehr Infos und Danksagungen ******************************************** Mehr Infos: * Homepage: http://synflood.at/tpp.html * Mirror: http://www.ngolde.de/tpp.html * Mailingliste: http://lists.synflood.at/mailman/listinfo/tpp Danksagungen: * Nico Golde (Mitautor und Debian-Maintainer von TPP) * Gerfried "Alfie" Fuchs (vim Syntaxfile) * Christian Dietrich (emacs Syntaxfile) * Tilman "arved" Linneweh (FreeBSD Port) * Patricia Jung (Artikel zu TPP in LinuxUser und Linux Magasinet) * Michael Prokop (jede Menge Feedback, Bugreports und Feature-Requests) * S*** (weil die mir unbewusst Zeit für die Entwicklung "geschenkt" haben :-) Agenda mutt-ng ******************************************** * Was ist mutt-ng? * Warum? * Features * Status & Ziele Was ist mutt-ng? ******************************************** * Mailclient für die Textkonsole * Fork von Mutt (mutt-ng = "Mutt Next Generation") * Benutzbar lokal, über SSH, ... * Mächtige Funktionalität * Für Power-User Warum ein Fork? ******************************************** * Mutt wird faktisch nicht mehr weiterentwickelt * Es wird nur noch herumgepatcht * Der Maintainer hat seine "Lieblinge", von denen er Patches akzeptiert, und von niemandem sonst * Neue, sinnvolle Features für Mutt gibt es zuhauf, in Form von Patches, nur werden sie nicht in Mutt integriert * Fork war dringend notwendig, um - dringend benötigte Features einzubauen - ein dringend notwendiges Refactoring durchzuführen Features: was mutt-ng mehr (oder besser) kann ******************************************** * Eingebauter Support für NNTP und SMTP (via libesmtp) * Header-Caching für IMAP * Sidebar mit Folder-Overview, wie in anderen Mailclients * Bedingte Interpretation von Konfigurationsbefehlen * Funktionierender Support von Format=Flowed-Messages * "sign-off string" ähnlich slrn * frei konfigurierbare Message-IDs * Neue, besser strukturierte Dokumentation * ... Was sich unter der Haube geändert hat ******************************************** * Ein einheitlicher Coding-Style wird enforced * Umfangreiches Refactoring (derzeit Mailbox-Handling-Code) * Ziel: "mutt-ng-Library" und darauf aufsetzendes, austauschbares User-Interface Was sich im Community-Prozess geändert hat ******************************************** * Projekt auf berlios.de gehostet * Brauchbares Bugtracking * Brauchbares SCM: Subversion * Entwicklungs-Aktivitäten werden in Weblog dokumentiert * Patches werden von so ziemlich jedem akzeptiert, wenn sie brauchbar sind Wichtige Links zu mutt-ng ******************************************** * Homepage: http://www.muttng.org/ * berlios.de-Seite: http://developer.berlios.de/projects/mutt-ng/ * Weblog: http://mutt-ng.supersized.org/ * Vielen Dank an: - Rocco Rutte - Nico Golde Fragen? ******************************************** _|_|_|_| _|_| _| _| _|_| _|_|_| _|_|_| _|_| _|_|_| _| _|_|_| _|_| _| _| _| _| _|_|_|_| _| _| _|_| _| _| _| _| _| _| _| _| _| _| _| _|_|_| _|_|_| _|_|_| _| _| _| _| _|_|