Programmoberflächen internationalisieren

Dienstag, 02.02.2010 um 15:28 Uhr

Moin liebe Lesergemeinde,

jeder Programmierer wird sich irgendwann die Frage stellen, welche (G)UI-Sprachen das eigene Programm unterstützen solle. Sind das nur zwei Sprachen, kann man dies noch im Quellcode selbst unterbringen (sollte man trotzdem nicht tun). Doch schon bei drei Sprachen ist das ziemlich aussichtslos.

Irgendwann stand auch ich vor dem Problem und habe ein gutes Tutorial gesucht solch eine Internationalisierung der Benutzeroberfläche zu Bewerkstelligen. Bei Linux Magazin wurde ich in einem sehr ausführlichen Artikel über die Funktion gettext() fündig (zum Artikel geht es hier).

Nutzt auch ihr dieses System oder gibt es noch andere/bessere Alternativen?

Probleme mit upgegradetem Ubuntu

Montag, 21.09.2009 um 12:00 Uhr

Moin liebe Lesergemeinde,

ich bin ein Fan von Compiz-Effekten und auch ein Fan des Shiki-Themes (Anleitung hier). Leider kann ich auf meinem PC nicht beides gleichzeitig haben. Die beiden Bilder zeigen meine Fensterrahmen ohne und mit Desktopeffekten.

ohne Effekte:

Desktoptheme ohne Effekte

mit Effekten:

Desktoptheme mit Effekten

Wie man sieht ist das Theme total verhunzt, wenn Compiz angeschaltet wird – und das trifft auf alle Themes zu (außer das Standard-Ubuntu-Theme).

Ich habe auch herausgefunden woran das liegen könnte. Ich upgrade mein Ubuntu seit der Version 7.04. Seit dem habe ich das System nicht neu aufgesetzt. Auf meinem Laptop habe ich Ubuntu seit Version 8.10 drauf – da funktionieren Theme und Compiz einwandfrei miteinander! Also vermute ich, dass irgendwelche Einstellungen nicht mit upgegradet wurden und so verhindern, dass ich andere Themes nutzen kann. So funktionieren auch einige Funktionen von Pulseaudio auf meinem Desktopsystem nicht richtig, es kam sogar vor, dass bei mir Pulseaudio abstürzt, wenn sich ein anderer PC im Netz mit seinem Pulseaudio Server anmeldet. Das konnte ich bei den anderen Rechnern ebenfalls nicht beobachten. Das trifft auch auf verschiedene andere Funktionen zu, die ich zwar nicht benötige, die mir aber irgendwann mal aufgefallen sind.

Die Möglichkeit wäre die eigenen persönlichen Einstellungen im Homeverzeichnis zu löschen (fragt sich aber, ob das was bringt), oder das System neu aufzusetzen (was ich mit 9.10 tun werde). Das würde bedeuten, dass eine Neuinstallation alle 2 Jahre definitv sinnvoll ist, zumindest wenn größere Neuerungen eingespielt wurden. Oder hat jemand von euch ne Idee was die Ursache sein könnte, oder wie man das Problem beheben könnte?

LaTeX Serienbriefe – GUI zur Adressbuch Generierung

Freitag, 24.07.2009 um 16:32 Uhr

Moin liebe Lesergemeinde,

da ich mich ja, wie ihr wisst, ausführlich mit LaTeX beschäftige, gibt es heute eine kleine GUI Anwendung, die das Leben mit LaTeX etwas vereinfachen soll.

Aber vorher noch zur Vorgeschichte:

Ich habe vor einiger Zeit ein Projekt begonnen, was das Schreiben von Briefen in LaTeX vereinfachen soll. Das heißt es gibt eine Oberfläche in der man sämtliche Adressdaten und den Briefinhalt eingeben kann. Beim Speichern der Angaben wird mit Hilfe eines Brief Templates das ganze in einen LaTeX Brief umgewandelt.

Das Ganze soll sich allerdings mehr an Firmen richten, denn jemand (Admin) muss sich die Arbeit machen und ein LaTeX Template im Corporate Design der jeweiligen Firma anfertigen. Dieses Template könnte (read only) im Netz liegen und von den Mitarbeitern mit Hilfe meiner Oberfläche genutzt werden. Das würde den Nutzern erlauben, wirklich nur den Brief mit den jeweiligen Daten zu verfassen, das ganze Layout wird automatisch im Hintergrund durch ein Template erzeugt. Es gibt zwar auch Vorlagen, die man in Word erstellen kann, aber da kann man doch schnell das Design verhunzen, wenn man keine Ahnung hat – außerdem sieht sogar ein Latex Brief deutlich besser aus, als ein Word Brief.

Das Projekt wird in Python mit Qt als GUI Framework geschrieben. Momentan habe ich das große Projekt (was ich eben beschrieben habe) allerdings ersteinmal hinten angestellt. Da ich gerade erst Python richtig lerne, versuche ich kleine Teilaufgaben zu programmieren. Die heute vorgestellte Software kann also als Teilprojekt angesehen werden.

Die Oberfläche für die Briefe soll später auch Serienbriefe unterstützen. Da LaTeX aber ein eigenes Adressbuchformat voraussetzt, muss man gängige Adressbücher aus Evolution, Outlook, Thunderbird, etc. erst in dieses Format bringen. Das wäre händisch sehr unschön zu lösen, pflegen lässt sich so ein Adressbuch eher auch schlecht, da es bisher dazu keine sinnvolle Oberfläche gibt.

Adressbuchformat von LaTeX abgespeichert in einem *.adr-Textfile:

\adrentry{Name}{Vorname}{Adresse}{Telefon}{F1}{F2}{Kommentar}{Kürzel}

Durch ein Python Skript von Frederik Elwert bin ich auf die Idee gekommen, eine GUI zum Mapping eines Adressbuches im CSV Format in das LaTeX kompatible Format zu schreiben. Das eigentliche Mapping führt das Skript von Frederik bereits aus, ich habe dieses um eine GUI erweitert. Vollständig konsolenbedienbar bleibt das Skript allerdings trotzdem.

Nun aber genug der Rede:

onGnome

onKDE

onWindows

Wie man sieht, funktioniert das Programm mit Gnome, KDE und Windows. Mac OS kann ich nicht testen. Das Programm sollte mit jeder Standard-Installation von Python und PyQt4 laufen. Bei Kubuntu ist alles standardmäßig vorhanden, bei Ubuntu muss man schauen, ob PyQt4 bereits installiert ist und es notfalls nachinstallieren.

Bedienung:

GUI:

Das Adressbuch muss im CSV Format vorliegen. Jede mir bekannte Adressbuchverwaltung kann in ein CSV Format exportieren, was also kein Problem darstellen dürfte. Das Skript muss ausführbar sein (chmod +x LatexAddressbook.py). Wird das Skript ohne Parameter aufgerufen startet die GUI automatisch (./LatexAddressbook.py). Mit Klick auf die Schaltfläche “…” kann das CSV Adressbuch ausgewählt werden. Ist dies geschehen, sollten in der Liste am rechten Rand des Programms alle verfügbaren Spaltenüberschriften des Adressbuches erscheinen. Diese kann man nun per Drag and Drop in die Textfelder für die jeweiligen Adressbuchfelder des LaTeX Adressbuches ziehen.

Dabei können auch mehrere CSV-Felder in einem LaTeX Feld verbunden werden.

Beispiel: Die Adresse liegt im CSV Adressbuch in den einzelnen Spalten Adresse, PLZ, Ort vor. So kann man das Feld “Address” folgendermaßen gestalten: $Adresse\\$PLZ $Ort. \\ bedeutet in LaTeX einen Zeilenumbruch. Das heißt man hat nun die gesamte Adresse des Empfängers in einem Feld stehen.

In dieser Weise können auch alle anderen Adressbuchfelder ausgefüllt werden. Free 1 und Free 2 sind im LaTeX Adressbuch keiner Funktion zugeordnet und können so frei verwendet werden. Mit Klick auf OK wird man nach dem Speicherort für das LaTeX Adressbuch gefragt. Dieses wird mit der Erweiterung *.adr gespeichert.

Konsole:

Hier ist die Bedienung der vom Original Skript übernommen. Mit dem Befehl

./LatexAddressbook.py -h

wird die Hilfe angezeigt. Hier ist ein Beispielbefehl, wie er zur Umwandlung des Adressbuches genutzt werden kann.

./LatexAddressbook.py -m 'Name=$Nachname' -m 'Vorname=$Vorname' -m 'Adresse=$Strasse\\$PLZ $Ort' -m 'F1=$Geschlecht' -o 'adressen.adr' adressen.csv

So das wars auch schon zur Benutzung. Bei meinen Tests hat eigentlich alles funktioniert soweit. Bitte gebt mir Feedback, ob prinzipiell Interesse besteht eine GUI für Briefe in LaTeX zu benutzen und wenn ja, was alles an Features enthalten sein sollte. Gibt es eventuell Interessenten, die sich vorstellen könnten, sowas auch in der eigenen Firma einzusetzen? Bitte gebt mir Feedback, ob es sich überhaupt lohnt, soetwas zu programmieren.

Probleme:

Probleme gibt es, wenn es Spaltenüberschriften in der CSV Datei mit Sonderzeichen gibt. Die Überschriften werden im Skript als Schlüssel in einem Dictionary verwendet. Ich habe bisher nichts gefunden, was UTF-8 Schlüssel in Dictionaries in Python erlauben würde. Ich lasse mich aber gerne eines Besseren belehren.

Es fehlt auch noch eine Mehrsprachen-Unterstützung. Die ist allerdings schon vorgesehen. Allerdings würde ich sowas erst implementieren, wenn Interesse an Nutzung bestehen sollte.

Falls weitere Fehler auffallen oder es Verbesserungsvorschläge gibt, dann bitte ab damit in die Kommentare.

Aber nun, fast hätte ich es vergessen, hier der Download des Skripts. Sollte ich das ganze noch weiter entwickeln, würde ich das auch bei Launchpad hosten.

Download: latexAddressbook.zip

PDFTK und die Umstände eine PDF zu erzeugen

Samstag, 18.04.2009 um 18:12 Uhr

Moin liebe Lesergemeinde,

da ich viel LaTeX nutze, habe ich logischerweise auch viel mit PDFs zu tun. Da ich meine Briefe zum Beispiel alle hintereinander weg in ein Tex-Dokument schreibe und dann aber jeweils nur den aktuellen Brief brauche zum Verschicken, muss ich Seiten aus einer PDF herauskopieren und sie in eine andere PDF packen.

Es gibt da verschiedenste Möglichkeiten – vom seitenbezogenen PDF Druck aus Evince oder Okular (PDF Betrachter) heraus, über Öffnen in Gimp und exportieren als PDF oder die Bezahlvariante des Acrobat Readers von Adobe. All diese Varianten sind aber irgendwie zu umständlich und beschreiben eigentlich immer nur einen Umweg.

Nach meinem Geschmack ist daher das Tool PDFTK. Es ist ein extrem mächtiges Werkzeug was die PDF-Bearbeitung anbelangt. Man kann PDFs zusammenfügen, einzelne Seiten auslesen, die Seiten einer PDF einzeln speichern, die Metadaten auslesen und aktualisieren, PDF Sicherheits-Optionen setzen (auch wenn die meisten davon von Evince und Okular ignoriert werden ;-) ), Hintergrundbilder und Wasserzeichen setzen und noch einiges mehr.

Problem hierbei ist bei komplizierteren Vorgängen die unübersichtliche Schreibweise in der Konsole (Siehe Man-Page). Ich hatte überlegt selber mal eine GUI dafür zu entwickeln, da ich nicht immer in der Man-Page schauen wollte, wie der Befehl lautet. Bei der Recherche bin ich auf ein bestehendes Entwicklungsprojekt gestoßen, welches aber schon sehr bedienbar ist. Der Name des Projekts heißt PDFChain. Der ubuntuusers-Beitrag beinhaltet auch die entsprechenden Download-Links. Die Oberfläche ist eigentlich intuitiv bedienbar.

Jetzt aber genug der Vorstellung, viel Spaß beim PDF Bearbeiten ;-)

Leider habe ich aber noch ein Problem mit PDFTK, der mich ein Bisschen annervt. Es gibt nicht die Möglichkeit, dass input- und output-PDF-File das selbe ist.

pdftk hallo.pdf update_info info.txt output hallo.pdf

Das ist gerade sehr unschön, wenn man die Metadaten einer PDF aktualisieren möchte (siehe Code-Beispiel). So muss man quasi eine neue PDF Datei erzeugen mit den neuen Metadaten, die alte löschen und die neue wieder in die alte umbenennen. Irgendwie blöd.

Es gibt dann noch die Option dont_ask, diese überschreibt ohne Nachfrage bestehende Dateien. Leider funktioniert diese Option trotzdem nur, wenn man für input und output einen anderen Namen vergibt. Das ließe sich meiner Meinung nach nur durch ein Skript oder durch die Integration in das oben genannte Programm verhindern (zumindest für update_info, wo es ja auch irgendwie sinnvoll ist) oder hat jemand noch eine andere Idee.