Tag Archives: Tool - Page 2

Publication Lists with BibTeX

Fancy Example

I have been charged lately with setting up a new homepage for my group at university. An integral part of any scientist’s professional homepage is his list of publications which basically represents his success. Despite its importance and therewith the wish that it better be up to date and look nice, most researchers I have met do not want to spend their time on maintaining lists or any part of any homepage. Therefore, a manually maintained HTML list or anything like that was out of question immediately. Other solutions like pulling from DBLP or embedding publicationslist.org have their own problems.

In the end, I decided on using BibTeX directly since most people in computer science use LaTeX and BibTeX anyway (or really should). I intended to provide a solution that would integrate well with any website, could use naked BibTeX as input and offered flexibility for individual adaptions as well as creating multiple, disjoint lists from one file. Given that I chose to build the website with a wiki, it should also be possible to store both BibTeX and template in the wiki, allowing for dynamic and easy adaptions.

Sadly, I could not find any software that met my needs. Consequently, dutiful computer nerd that I am, I set out to build my own solution. I am really bad at making up names, so I went with bib2tpl. Since Google does return exactly zero results I should not step on any toes. It is written in PHP, of course, and can transform BibTeX to anything you build a template for. I did find a BibTeX parser in PEAR so I was spared that part. The simple template language it uses I built myself in order to have a minimal yet sufficient amount of power in the given scenario. We will see wether or not this was a good decision.

You can find bib2tpl on its own pages. Please try it out and tell me what you think!

Doppelkopf ohne Papier spielen

This post is written in German since it concerns a German web application written by me. It helps managing games of Doppelkopf, a great card game that is as far as I know only known in Germany.

Vor etwa zwei Jahren haben wir in der Fachschaft regelmäßig Doppelkopf in wechselnden Besetzungen gespielt. Ich dachte mir damals, dass man doch etwas Buch über die Ergebnisse führen könnte, etwa um Fragen wie danach, ob Carsten nun wirklich schlechter spielte als andere oder ob alles nur Glückssache ist, auf den Grund zu gehen oder sich einfach nur an der Tabelle zu ergötzen. Zu meinem Erstaunen musste ich feststellen, dass es kein derartiges, webbasiertes Tool gab. Also machte ich mich daran, ein solches zu bauen; ich hatte die folgenden Ziele:

  • Einfache Benutzerverwaltung mit Einladungsfunktion
  • Abbildung der Turnierregeln
  • Eingeschränktes Zulassen von Sonderregeln
  • Interaktive Eingabemaske
  • Liste mit einzelnen Sitzungen
  • Rangliste nach verschiedenen Kriterien sortiert
  • Bestätigung von eingetragenen Ergebnissen durch Mitspieler
  • Einblick in detaillierte Spielergebnisse

Read more »

Online Arbeiten

Setup aus mehr als sechs Rechnern

Rechner, auf denen ich regelmäßig arbeite

In den vergangenen Jahren ist es mit wachsender Verfügbarkeit und Kapazität des Internets zu stets sinkenden Kosten attraktiver geworden, seine Arbeitsmittel ins Web zu legen. Das macht überhaupt Sinn, da eine Person heute oft mehrere Rechner frequentiert: PC zuhause, Laptop für den Außeneinsatz, Handy für unterwegs, PC an der Arbeitsstätte und so weiter. Gibt es nun Tätigkeiten, die man gerne an mehr als einem Rechner oder mit Anderen kollaborierend durchführen möchte, führt die Nutzung von lokalen Lösungen dazu, dass man entweder zig verschiedene Zustände hat oder — mehr oder weniger umständlich — seine Daten synchronisieren muss.

Eine populäre und oft sinnvolle Möglichkeit, dem zu entgehen, ist die Nutzung von Services im Internet. Da gibt es natürlich YouTube für Videos, Wikipedia für Wissen, GoogleDocs für Dokumentbearbeitung und Facebook für Kommunikation, aber auch kleinere Dienste wie Tungle.me für Terminkalender oder Doodle für Abstimmungen sowie unzählige hochspezialisierte Anbieter. Ein und insbesondere mein Problem mit all diesen: ich gebe meine Daten in die Hand von Firmen. Das heißt, Privates oder gar Berufliches kann ich dort nicht oder nur mit großer Vorsicht abwickeln. Read more »

[PLR] Spezialanwendungen

conky in Aktion

Außer den üblichen Stücken Software habe ich noch etwas speziellere Dinge installiert. Zum einen conky, um stets gewisse Systemparameter im Auge halten zu können, und unison sowie synergy, um der besonderen Mehrrechnersituation am Schreibtisch gerecht zu werden.

conky

conky ist ein Programm, das dem Anwender Output von zahlreichen Sensoren und Prozessen visuell aufbereitet anbietet. Es ist hochgradig an die jeweiligen Bedürfnisse anpassbar und wird über eine Textdatei eingestellt. conky sucht zuerst nach ~/.conkyrc. Positionierung, Auswahl der anzuzeigenden Daten und Darstellung mit Fonts und Farben lassen sich mit einer mehr oder weniger eingängigen Syntax konfigurieren. Eine komplette Übersicht über die möglichen Parameter und Variablen gibt es hier, eine Reihe von Beispielen inklusive der zugehörigen Konfigurationsdateien hier. Mein eigenes Setup basiert auf einem der dort angegebenen Beispiele. Erwähnenswert finde ich, dass man Teile optional einbinden kann: nur, wenn eine Partition eingebunden ist, zeige ihren freien Platz an, und nur, wenn mpd auch läuft, frage den aktuellen laufenden Titel ab. Dies ist einerseits nützlich, andererseits auch angebracht, da sonst unter Umständen Fehler erzeugt werden. conky ist unter diesen Namen in den Repositories von Ubuntu verfügbar und läuft bei Bedarf als Daemon.

synergy

Für leistungshungrige Anwendungen und Spiele unter Windows habe ich weiterhin meinen alten Desktoprechner unterm Schreibtisch stehen. Da er nur selten läuft und Schreibtischplatz obligatorisch knapp ist, wollte ich möglichst wenig Peripherie doppeln. Über einen Freund hatte ich schon vor Jahren von synergy gehört, das in Software Eingabegeräte in einer Sterntopologie multiplext. Man erklärt einen Rechner zum Server; an diesen ist die Hardware angeschlossen, in meinem Fall Tastatur, Maus und Fernbedienung. Sound- und Videogeräte kann synergy noch nicht verteilen. Der Server muss das komplette Setup kennen. So legt man fest, welcher Client auf welcher Seite des Servers liegt. Clients identifizieren sich über einen Namen, der folgerichtig eindeutig für einen Stern sein muss. Ist ein Client verbunden, schiebt man die Maus über die entsprechende Bildschirmkante und landet auf dem Schirm des Clients. Zurück gelangt man natürlich genauso. Übrigens wird die Zwischenablage der verbundenen Rechner gekoppelt. Es ist also möglich, auf Rechner A etwas zu kopieren und auf Rechner B einzufügen. Ich fand das schon öfter sehr praktisch. In meinem Fall benutzen natürlich beide Rechner den gleichen Monitor, den ich also stets umschalten muss, wenn ich zwischen den Rechnern wechsle. Erwähnenswert ist noch, dass synergy für Linux, Mac OS und Windows zur Verfügung steht und gemischte Setups explizit unterstützt. Die in den Repositories von Ubuntu verfügbare Version wird anscheinend nicht länger vom Originalautor weiterentwickelt; ich habe mit ihr bisher keinerlei Probleme gehabt. Für Leute, bei denen sich Bugs manifestieren oder die neugieriger als ich sind, gibt es einen Ableger, der aktiv verbessert wird.

Auf dem Server habe ich folgende Konfigurationsdatei erstellt:

# ~/.synergyconf
section: screens
  Bob:
  Charly:
end

section: links
  Bob:
        up      =       Charly
  Charly:
        down    =       Bob
end

section: options
  switchDelay = 500
end

Charly ist also oberhalb von Bob zu finden. Die einsame Option in Zeile 14 sorgt dafür, dass mir etwas Zeit am Bildschirmrand bleibt, bevor der Rechner gewechselt wird. Es gibt eine ganze Fülle an weiteren Optionen, die ich allesamt nicht vermisse. Nun meldet sich der Serverrechner selbst auch als Client an, sodass auf ich folgende zwei Befehle nach dem Login ausführe:

synergys --daemon -c ~/.synergyconf
synergyc --daemon -n Charly localhost

Zu beachten ist, dass der Server einen Moment zum Starten braucht, der Client also nicht sofort gestartet werden sollte, da sein Anmeldeversuch sonst ins Leere läuft. Ich habe das Problem umgangen, in dem ich zwischen den beiden Aufrufen weitere Programme starte.

Da der Desktoprechner Ubuntu und Windows booten kann, habe ich unter beiden Systemen synergy installieren müssen. Unter Windows war das sehr unkompliziert; in der übersichtlichen Konfigurationsoberfläche kann man direkt einstellen, dass das Programm als Dienst laufen und beim Boot gestartet werden soll, also insbesondere in der Loginmaske. Unter Ubuntu war das wesentlich komplizierter, zumindest wenn man wie ich unsauber arbeitet und kein Skript in init.d anlegt. Erschwerend kommt hinzu, dass der Loginschirm von root ausgeführt wird, die Session selbst natürlich vom User. Ich habe eine Lösung gefunden, die ich nicht als schön empfinde, aber die funktioniert. Hierfür folgende Zeilen in die genannten Dateien einfügen:

# /etc/gdm/Init/Default
killall synergyc
sleep 1
synergyc --daemon -n Bob 192.0.0.1
# /etc/gdm/PostLogin/Default
killall synergyc

Nun muss natürlich nach dem Login der Client neu gestartet werden, etwa über den entsprechenden Konfigurationsdialog von Ubuntu. Zu beachten ist noch, dass die Instanz von synergyc, die im Loginschirm läuft, root gehört. Ich hatte hier Probleme mit dem Tastaturlayout, da root bei mir amerikanisches Layout hatte, sonst alle Rechner und Nutzer natürlich deutsches. Auch kann man im Loginschirm von gdm das Layout setzen. Nachdem ich überall deutsches Tastaturlayout eingestellt hatte, lief alles rund.

unison

unison dient zur Synchonisation von Daten zwischen zwei Verzeichnissen auf einem oder verschiedenen Rechnern. Es arbeitet dabei symmetrisch, Änderungen beider Seiten werden also gleichberechtigt übertragen, wobei Konflikte bearbeitet werden. Ein ausführliches Handbuch gibt es beim Schöpfer, das man durchaus einmal querlesen sollte. Dadurch, dass kein Rechner als ausgezeichneter Server dient, kann man unison sehr flexibel einsetzen; ich habe mich trotzdem für eine Sterntopologie entschieden, um weniger Potential für Konflikte und veraltete Kopien zu haben. Das Tool legt eine Datenbank der zu synchronisierenden Daten an, um die einzelnen Abgleiche schnell ausführen zu können. Das erstmalige Erstellen dieser Datenbank kann für große Datenmengen schon mal einige Stunden dauern, dafür liegen die Abgleichzeiten später deutlich unter einer Minute, Übertragungszeiten nicht mitgerechnet. Ich übertrage mit SSH, was vergleichsweise langsam, dafür aber sicher ist. Im lokalen Netzwerk kann man direkt Sockets ansprechen, was die Übertragungsgeschwindkeit deutlich erhöhen sollte. Dafür kann dann stets nur ein Clientprozess bedient werden. Eine Konfigurationsdatei sieht etwa so aus:

# ~/.unison/daten
mountpoint = .
batch = true

root = /media/data/Daten
root = ssh://raphael@192.0.0.1//media/data/Daten

Besonders wichtig ist die Option mountpoint; durch sie wird geprüft, ob die angegebenen Verzeichnisse überhaupt existieren. Dies verhindert, dass eine nicht eingebundene Partition als Löschung interpretiert und die verfügbare Kopie komplett gelöscht wird.  Die Option batch unterbindet Zwischenfragen bei Änderungen und synchronisiert, ohne nachzufragen. Auch hier gibt es viel mehr Optionen, die komplizierte Szenarien abbildbar machen. Ausgeführt wird eine Synchronisierung dann durch Eingabe von

unison daten

Update: Habe das Layout von conky etwas gefälliger und ordentlicher gestaltet.

Beispiele für ANTLR

Einer der meistbesuchten Einträge in meinem Blog ist jener über den Compilergenerator ANTLR. Einige suchen scheinbar nach (einfachen) Beispielen – das suggerieren zumindest die Suchbegriffe, mit denen Leute hier landen. Da kommt es doch gelegen, dass ich jüngst für eine Demo einige Beispiele gebastelt habe, und diese nun online stellen kann. Hier kann der geneigte Leser ein Archiv herunterladen, das einige Grammatikdateien, Anwendungsstubs und Skripte sowie die verwendete ANTLR-Bibliothek enthält.

Im ersten Ordner finden sich sehr einfach Grammatiken, die im Wesentlichen verschiedene Features von ANTLRWorks zeigen sollen, da sie fröhlich Fehlermeldungen erzeugen. Die im zweiten Ordner enthaltenen Grammatiken lassen sich interpretieren und debuggen, eine sogar mit Ausgabe. Im letzten Ordner ist schließlich die komplette Folge von Tools, die ANTLR bietet, ausgereizt worden. Auf die Anwendung von Prädikaten habe ich dabei verzichtet, das hätte die Demo gesprengt.

Viel Vergnügen!