www.AlgorithMan.de
Where theory comes alive
Das hier sind einige Dinge, an denen ich immer mal wieder arbeite, die aber nicht wirklich einsatzbereit sind. Eher proof-of-concepts oder Dinge, die im Alpha- bzw. Beta-Stadium sind.
2 KiB
Eine Klasse, die von std::ostream und std::istream abgeleitet ist und mit einem externen Programm kommuniziert - dadurch soll man mit externen Programmen wie mit normalen Streams kommunizieren können.

Wenn man das über die Methoden macht, funktioniert es auch - aber nicht, wenn man es über die (überladenen) Operatoren << bzw. >> tut... Ich habe keine Ahnung, warum.
2 KiB
Eine Art "VNC-Server", der über einen HTTP-Server kommuniziert. Der Server macht screenshots, die er per HTTP-POSTs an ein http-upload script schickt, von wo der Client es im Browser sehen kann.

Der Server ist in Java geschrieben - die Idee ist, dass man ihn starten kann ohne irgend etwas zu installieren - man geht nur auf die entsprechende Seite, erlaubt die Ausführung des Java-Applets und schon geht es los.

Wenn man das Programm lokal in der JVM ausführt, funktioniert das auch. Führt man es als Applet in der besagten Seite aus, unterbinden die Sicherheits-Einstellungen der JVM diverse Dinge (u.A. die Aufnahme von Screenshots), sodass es nicht funktioniert. Anscheinend müsste ich das Applet in eine JAR verpacken und diese signieren, damit die JVM diese Dinge zulässt. Wie das geht, habe ich mir aber bisher nicht angeeignet.
12 KiB
Klassen für Automaten und Reguläre Ausdrücke.

An sich können die Klassen so ziemlich alles, was man sich vorstellen kann (Automaten und Reguläre Ausdrücke in einander überführen, Determinisieren, Minimieren, Komplementbildung, Differenz, Vereinigung, Produkt, etc. etc. etc.

Aufgrund eines umfassenden Re-Writes (ich habe die zugrundeliegende Datenstruktur komplett geändert) sind aber zur Zeit fast alle Methoden auskommentiert. Zur Zeit funktionieren nur (wenn man da "nur" zu sagen will...) das Parsen der regulären Ausdrücke, übersetzung in Automaten, Akzeptanz-Test, Test auf Determiniertheit und bestimmung der ε-Hülle.
13 KiB
Eine Art OR-Mapper, der aus (einfachen) Klassen-Definitionen PHP-Skripte erzeugt, die entsprechende Objekte
  • in XML-Dateien speichern
  • aus XML-Dateien laden
  • nach HTML exportieren
  • HTML-Formulare erzeugen
  • aus HTTP-Post Daten laden
kann.
Dadurch wird es ein Kinderspiel, Webseiten zu schreiben, die mit entsprechenden Objekten arbeiten. Das kann PHP zwar auch selber, aber die o.g. Klassen sind typisiert und das Programm fügt einiges an Type-Checks hinzu, was man in PHP sonst alles manuell machen müsste.

Was noch fehlt sind
  • Referenzierung von Objekten in verschiedenen Dateien
  • Hinzufügen von neuen Objekten in Listen
  • Sicheres Löschen von Objekten
  • Export nach SQL
  • Import von SQL
1957 KiB
Ein Programm, das 3D-Modelle anzeigt und nach Blender exportieren kann. Die 3D-Modelle kann es aus einem einfachen Häuser-Grundriss erzeugen oder aus Duke Nukem 3D Levels importieren. Beispiel: e1l1.
7 KiB
Eine Klasse für Kontextfreie Grammatiken. Sie kann die Chomsky Normalform (CNF) berechnen, beherrscht die ε-Elimination, Kettenregel und bald kommt auch der Cocke-Younger-Kasami (CYK) Algorithmus. Darüber hinaus hat sie einen (einfachen) Parser für Kontextfreie Grammatiken.

Inzwischen ist auch ein Parsergenerator enthalten, der für LL(1)-Grammatiken einen Recursive-Descent-Parser wie diesen erzeugt.

Zur Zeit arbeite ich auch einem Parsergenerator (Hier), der für LR(1)-Grammatiken einen LR-Parser generiert. SLR(1) Parser funktionieren schon.

Außerdem arbeite ich an Laufzeit-Umgebungen, die die generierten Parser zur Laufzeit ausführen können (also so, dass man die Grammatik einlesen kann, ein Parser-Objekt generieren kann und dieses dann direkt auf einem Token-Stream arbeiten lassen kann, ohne ihn in einen C++ Quellcode exportieren und kompilieren zu müssen. Damit könnte man dann u.A. einen Parser schreiben, der zur Laufzeit seine eigene Syntax ändern kann. OMG.
150 KiB
Ein Textsatz-System, dessen Syntax an LaTeX angelehnt ist, das aber im Gegensatz zu LaTeX keine funktionale, sondern eine imperative Sprache ist. Es beherrscht Variablen, Verzweigungen, Schleifen und Prozeduren. Es arbeitet nativ mit UTF-8 kodierten Dateien und erzeugt wahlweise PDF oder PostScript Dateien und ist dabei (für LaTeX-Geplagte) unglaublich schnell.

Langfristig soll es Objekt-Orientiert werden, damit uns die Macht der Objekt-Orientierung auch beim Textsatz zur Verfügung steht. Zwei sehr nützliche Referenzen zum PDF-Standard sind Adobe PDF Reference, Sixth Edition, version 1.7 ( pdf ) und PDF Explained von John Whitington.