Terminal-Bibliothek für Java

Für ein kleines Projekt wollte ich eine Visualisierung in der Konsole bzw. im Terminal unter Java realisieren. Das Problem ist das bei der Visualisierung, je nach verwendetem Terminal, bestimmte Operationen nicht verfügbar sind. Dies fängt schon beim Löschen des Bildschirmes an. Je nach Art des Terminals bzw. Betriebssystem kann es hier unterschiedliche Ansätze geben, um dieses Problem zu lösen. Abhilfe bei diesen Problemen schafft die Bibliothek Lanterna.

Lanterna in Aktion

Laterna liefert die Möglichkeit Text-Schnittstellen und GUIs zu bauen, unabhängig vom verwendeten Terminal. Damit ähnelt sie der C-Bibliothek ncurses. Die Bibliothek ist in der Lage festzustellen, auf welcher Art Terminal sie läuft und kann somit die Ausgabe entsprechend anpassen. So werden z.B. Unix-Steuercodes genutzt, wenn das Terminal diese unterstützt. Nach der Einbindung per Maven:

<dependency>
    <groupId>com.googlecode.lanterna</groupId>
    <artifactId>lanterna</artifactId>
    <version>3.0.1</version>
</dependency>

kann die Nutzung der Bibliothek beginnen. Im ersten Schritt sollte eine Instanz der Klasse Terminal angelegt werden:

Terminal terminal = new DefaultTerminalFactory().createTerminal();

Dies übernimmt die DefaultTerminalFactory. Sie sorgt dafür, dass das passende Terminal ausgewählt wird. Nun können Zeichen auf das Terminal geschrieben werden:

terminal.clearScreen();
terminal.putCharacter('a');

Hier wird das Terminal erst bereinigt und anschließend das Zeichen a auf das Terminal geschrieben. Neben der direkten Arbeit mit dem Terminal, liefert Lanterna eine Abstraktionsschicht namens Screen mit, mit welcher das Terminal wie ein pixelbasiertes Gerät angesprochen werden kann. Neben der Ausgabe beherrscht die Bibliothek die Eingabe. Mittels:

KeyStroke keyStroke = terminal.pollInput();

wird die aktuelle gedrückte Taste abgefragt. Diese Methode arbeitet nicht-blockierend. Für den Fall das eine blockierende Methode benötigt wird, eignet sich die Methode:

KeyStroke keyStroke = terminal.readInput();

Damit lassen sich mithilfe der Bibliothek komplexe Anwendungen auf dem Terminal umsetzen. Wenn die Anwendung beendet werden soll, muss das Terminal mittels:

terminal.close();

geschlossen werden. Der Quelltext der Bibliothek ist auf GitHub zu finden. Er ist unter der LGPL lizenziert und damit freie Software.

Tomb Raider in Open Source

Das 1996 erschienene Tomb Raider, mit Lara Croft in der Rolle der taffen Archäologin, galt und gilt als Meilenstein des Action-Aventure. Seitdem sind etliche weitere Teile entstanden. Auch die alten Teile sind bei vielen Fans immer noch sehr beliebt.

Die Projektseite von Open Tomb

So existieren einige Open Source-Projekte rund um Tomb Raider. Eines dieser Projekte ist Open Tomb, welches unter opentomb.github.io zu finden ist. Das Ziel des Projektes ist eine Reimplementation der Engine welche für Tomb Raider 1 – 5 genutzt wurde. Lizenziert ist das Projekt unter der LGPL3 und damit freie Software.  

Neben dem OpenTomb-Projekt existieren weitere Projekte, wie das OpenLara-Projekt, welches die Engine im Browser nachbaut. Eine spielbare Demo existiert auf der Projektseite; der Quelltext ist auf GitHub zu finden. Lizenziert ist OpenLara unter der BSD-Lizenz, in der Zwei-Klausel-Version.

Freie Grammatik- und Rechtschreibprüfung

Vor einigen Jahren schrieb ich einen kurzen Artikel über die Nutzung von LanguageTool in der freien Office-Lösung LibreOffice. LanguageTool ist eine freie Software zur Rechtschreib- und Grammatikprüfung, ähnlich dem wahrscheinlich im deutschen Raum bekannteren Duden Korrektor. Allerdings ist LanguageTool weit mehr als eine Erweiterung für LibreOffice. Es handelt sich um eine in Java entwickelte Software, welche mittlerweile über 30 Sprachen unterstützt. Mittlerweile gibt es neben der freien Version, einen Dienst, welcher weitere Korrekturen gegen Entgelt bereitstellt (languagetoolplus.com).

LanguageTool in der Standalone-Version

Neben der Standalone-Desktop-Version existieren unzählige Integrationen, wie z.B. für LibreOffice, Firefox und Chrome in Form von Add-ons. Neben den offiziellen Add-ons existieren weitere Add-ons, welche durch die Community bereitgestellt werden. Die offizielle Seite des Projektes ist unter languagetool.org zu finden. Die Entwicklung findet auf GitHub statt. Dort ist ebenfalls der Quelltext von LanguageTool und etwaiger Erweiterungen zu finden. Lizenziert ist LanguageTool unter der LGPL.

FuzixOS: Because Small Is Beautiful

Alan Cox ist vielen als Kernel-Hacker im Linux-Bereich bekannt. Neben seiner Arbeit am Linux-Kernel hat er vor einigen Wochen ein anderes Projekt offiziell vorgestellt. Bei dem FuzixOS genannten Projekt handelt es sich um ein unixoides Betriebssystem für Z80-CPUs (und Leuten denen systemd zu viel war ;)). Das System ist allerdings so portabel gestaltet, das es sich für andere 8-Bit CPUs verwenden lassen sollte. Es handelt sich bei dem System um keine komplette Neuentwicklung, stattdessen wurden viele Funktionen aus Forks des Z80-Betriebssystems UZI entnommen.

Die ursprüngliche Ankündigung

Die ursprüngliche Ankündigung

Einige Teile für ein aus heutiger Sicht vollwertiges Betriebssystem fehlen allerdings noch. So gibt es im Moment unter anderem keine TCP/IP Unterstützung, keine symbolischen Links und keinen Support für Dateisysteme größer 32 MiB. Die Entwicklung von Fuzix selbst, findet auf GitHub statt. Lizenziert ist der Kernel unter der GPL, die Bibliotheken unter der LGPL. Einige Teile des Systems sind allerdings freizügigerer lizenziert.

Freie Minecraft-Alternative

Microsoft kauft Mojang und damit Minecraft. Wenn man sich andere Akquisitionen von Microsoft im Spielebereich anschaut, bekommt man bei dieser Vorstellung ein mulmiges Gefühl. Entweder Sie fahren das Spiel gegen die Wand, oder es läuft demnächst nur noch auf Microsoft-Betriebssystemen. Natürlich kann auch alles funktionierten und unsere Befürchtungen erweisen sich als gegenstandslos. Allerdings zeigt der Aufkauf von Mojang eine Abhängigkeit auf. So haben viele Menschen riesige Bauwerke geschaffen, welche unter Umständen bald nicht mehr verfügbar sind. Minecraft ist nicht nur ein Spiel, es ist ein Kreativbetriebssystem. In einem solchem Fall spielt freie Software ihre Vorteile aus. Bei einer solchen Software, kann man das ganze einfach forken und in seinem Sinne weiterentwickeln. Bei proprietärer Software wird dies schwierig.

Eine von vielen Minecraft-Welten

Eine von vielen Minecraft-Welten

Mit Minetest gibt es einen durch Minecraft inspirierten Clone, welcher für Mac OS X, Linux und Windows verfügbar ist. Das Spiel ist im Gegensatz zur aktuellen Minecraft-Version etwas rudimentär, was Dinge wie verfügbare Blöcke und ähnliches angeht. Allerdings relativiert sich das ganze wenn man sich die API-Schnittstelle anschaut. Mit Hilfe der API, kann man alle möglichen Erweiterungen wie Loren, TNT, Mobs oder Pyramiden ins Spiel holen. Die maximale Weltgröße ist auf −30912 zu 30927 in allen Dimensionen (auch Z) beschränkt. Etwas seltsam erscheint mir allerdings die Speicherung der Map in einer SQLite-Datenbank – dort muss sich zeigen ob dies bei großen Welten wirklich performant ist. Auch für Server-Backups ist dieses Verfahren nicht wirklich gut geeignet. Minetest ist in C++ entwickelt, was sich positiv auf die allgemeine Performance auswirkt, so das es auch auf schwächeren Rechnern genutzt werden kann – so gibt es schon Versuche das ganze auch auf dem Raspberry Pi zum laufen zu bringen.

Minetest in Aktion

Minetest in Aktion

Die Entwicklung von Minetest sieht dabei vielversprechend aus, so das man in Zukunft viele Verbesserungen und neue Features erwarten darf. Neben dem Client ist auch ein Server für den Mehrspieler-Betrieb verfügbar. Der unter der LGPL lizenzierte Quellcode kann über GitHub bezogen werden. Die offizielle Seite von Minetest ist unter minetest.net zu finden.