21. Oktober 2015

Zurueck-in-die-Zukunft-II

Gestern war es dann doch soweit:  Der 21. Oktober 2015!

Das dieses Datum aufgrund seiner Präsenz im Film Zurück in die Zukunft II solch ein krasses mediales wie auch gesellschaftliches Echo erhält, hätte ich niemals gedacht.

Natürlich konnte ich es mir nicht nehmen, zusamnen mit Andi, Dennis und Noume das ganze Triple-Spektakel ausgiebig zu zelebrieren: Vom 21.10.2015, 18 Uhr bis zum 22.10.2015 1:20 Uhr verbrachten wir einen geilen Zeitsprung in die Zukunft, und konnten alle drei Teile im Original in der Schauburg Dortmund auf Leinwand sehen.

Das Kino war sogar recht voll und einige Besucher waren mit T-Shirts oder sogar einer roten Weste und dem bunten Marty McFly Junior Cap bekleidet – richtig cool, also das war’s absolut Wert. Auch wenn ich den deutschen Synchrondialog komplett mitsprechen kann und jede Szene bis ins Detail kennen, mal ganz ehrlich: Wo wird man noch in Zukunft die Chance haben, solch einen genialen Film in einem echtem Kino zu schauen? Ich denke mal wirklich sehr selten.

Ich habe mir jedenfalls geschworen, nach diesem krassen Abend mal drei Jahre lang kein Zurück in die Zukunft mehr zu schauen… mal gucken ob ich das durchhalte ;-)…

Schönere Grammatik ;)

Soo die libphorward hat jetzt auch eine schönere Grammatik für ihre BNF-Sprache. Die bereits beim self-hosting Prozess verwendete Grammatik sieht jetzt so aus:

Kann sich doch eher sehen lassen, oder? Die $-Zeichen definieren Terminaldeklarationen, es sind auch anonyme Terminaldeklarationen erlaubt, und Inline-Terminals werden jetzt über einen Pattern-Matching-Mechanismus auf existenz geprüft, so dass diese nicht extra definiert werden müssen (so wie % und  ;).

Ausserdem ist die Entwicklung jetzt erstmal nach Bitbucket umgezogen, weil Sourceforge der Meinung war, meinen Benutzernamen mit dem Namen eines indischen Java-Entwicklers, mit dem ich nichts gemeinsam habe, zu verlinken, weil da irgendein blöder Bug drin ist. Ausserdem benutzen wir Bitbucket auch bei mausbrand, und bin damit bisher sehr gut gefahren :).

libphorward selfhosted!

Seit Freitag ist die libphorward nun self-hosted.

Was heißt das nun konkret? Nun es hört sich ein wenig an wie autofellatio, ist aber noch viel, viel geiler! Die libphorward wurde nun um ein weiteres Modul, das Programm ppgram2c  erweitert.

ppgram2c ist ein Code-Generator, welcher eine Backus-Naur-notierte Parser-Beschreibung aus einer Datei einliest und anschließend als C-Programm wieder ausgibt, also sozusagen die Funktionsaufrufe, die nötig sind, um die gewünschte Grammatik direkt in C mit dem libphorward Funktion des parser-Moduls zu definieren.

Aus der BNF-Notation für die eigene BNF-Sprache mit der Syntax:

Ich muss gestehen, das diese Grammatik noch recht unschön definiert ist, was aber daran liegt, das noch ein paar Bugs vorliegen (equal, percent und semicolon mussten wegen Mehrfachverwendung als eigene Symbole definiert werden, sollte später so nicht sein).

Aus dieser Grammatik erzeugt ppgram2c nun folgenden C-Code (mit ein wenig awk-Hokuspokus drumherum):

Also wer’s nachtesten will, es ist

ppgram2c –indent 1 src/parse/gram.syn

was hier im Hintergrund aufgerufen wird. Es erzeugt das meiste von dem Code above.

OK nun zum Highlight des ganzen: Der Parser parst seine eigene Grammatik und erzeugt den Code für sich selbst. Folglich konnte der Parser erfolgreich durch sein eigenes Duplikat ersetzt werden. Die nachfolgenden Parser der libphorward sind allesamt Klone von sich selbst, also werden mit sich selbst geparst und dann selbst Bestandteil der Toolchain. Diesen Mechanismus nennt man im Compilerbau bootstrapping, und wurde bisher bei all meinen Compilerprojekten erfolgreich umgesetzt, also JS/CC, UniCC (welcher min_lalr1 benutzt) und nun auch der libphorward.

Damit wurden der rekursive-absteigende Parser der libphorward sowie die handgeschriebene LALR(1)-Grammatik hinfällig, da sie durch ihren eigenen Klon ersetzt wurden. (Hoffentlich hat der Klon keinen Fehler…)

Damit ist die libphorward selfhosted (selbst-gastgebend) und kann sich selbst compilieren (zumindest den Parser ;-)). Was nun folgt ist pure geile Scheiße! 😀

Man liest sich…

Cooles Zeux && merlin

Naja, eigentlich gibts nichts wichtiges, trotzdem poste ich mal wieder was, damit der/das Blog nicht einstaubt…

.screenrc

Die .screenrc auf merlin* sieht jetzt so aus:

Das tolle dran: Man kann jetzt auch im screen mit dem Mousewheel scrollen, unten (hab ich aber schon länger so) befindet sich eine statische “Statuszeile”. Voll geil, das Teil! 🙂 GNU screen ist eh eine total geile Sache.

Was noch? Ah:

vidir

vidir, Bestandteil der moreutils bei Arch Linux ist ein geiles Tool, bei dem man mit dem vi Verzeichnissinhalte (also Dateien) umbennennen kann. Danke an Klaus für den Tipp!

*merlin

Bitte was, ihr kennt merlin noch nicht? merlin ist der Nachfolger von calypso.  merlin ist mein kleiner, treuer Begleiter. Immer da, wenn ich ihn rufe, super stabil und rennt mit Arch Linux ARM.

  • Raspberry Pi, Model B
  • Broadcom BCM2835 700MHz
  • 512 MB RAM
  • 32 GB SDcard
  • Arch Linux ARM

So sieht merlin physikalisch aus:

merlinphysUnd so virtuell:

merlin1 merlin2Ach ja, und merlin ist nicht der Zauberer, sondern der Vogel… der Merlin Falke eben!

Nicht das calypso schlecht war (ist), nur zog calypso 15 Watt, merlin zieht 1 Watt. calypso ist nun Retter in der Not. Meine Rechner hatten eigentlich schon immer seltsame Namen, aber mit Sinn dahinter… angefangen bei den Orcas (neo, skaana, kira, spirit, calypso) über die griechischen Götter (khaos, gaia, genesis) bis hin zu Glastflügel-Flugzeugen und Falkenarten (kestrel, falcon, salto, hornet, merlin) waren jetzt schon einige dabei 😉 …

Got you!

So gehts also. Hätte ich auch mal eher drauf kommen können!

bei input “X+X+X” als Rekursiv Descent Parser:

(1) Probiere alle nicht-linksrekursiven Produktionen aus (e : ‘Y’, e : ‘X’)
(2) Parse tree merken (“X”)
(3) Probiere alle links-rekursiven Produktionen aus (e : e ‘+’ ‘Y’, e : e ‘+’ ‘X’), setze für e vorherigen ParseTree ein (“X+X”)
(4) Probiere alle links-rekursiven Produktionen aus (e : e ‘+’ ‘Y’, e : e ‘+’ ‘X’), setze für vorherigen ParseTree ein (“X+X+X”)
(5) Probiere alle links-rekursiven Produktionen aus (e : e ‘+’ ‘Y’, e : e ‘+’ ‘X’), setze für vorherigen ParseTree ein (“X+X+X”), keine weitere Eingabe vorhanden
(6) Ergebnis: “X+X+X”

Es kann ja so einfach sein. Wieso denke ich so dümmlich kompliziert? Der Martin hat’s jedenfalls genauso gelöst.

Got’ya! Jetzt nur in eigenen Code gießen… 🙂

Das erklärt im übrigen auch normalizeleftrecursion()

Samsung Galaxy S4 Active / CM 11

Das war wieder eine Fummeley, aber fertig: Samsung Galaxy S4 Active GT-I9295, natürlich gerootet, Clockworkmod & CyanogenMod 11. Dank an spegelius und forum.xda-developers.com.

Hilfreiche Threads:

Verwendete Files:

  • cm-11-20140503-UNOFFICIAL-jactiveltexx.zip
  • CWM-Recovery-gt-i9295_v1-2.tar.md5.zip
  • Odin307.zip (mit Heimdall hab ich mich nicht getraut, da es dafür keine vernünftige Anleitung gab!)

Bin sehr zufrieden damit!

s4a_cyanogenFazit: Kann sich sehen lassen und ist viel geiler als Stock-Samsung-ROM… *bäh*.  s4a_front s4a_backAch ja: Mausbrand is GEIL! 🙂

 

 

normalizeleftrecursion()

…dieser geniale DrecksackTyp!

lrecEinmal mit, einmal ohne. Hier wird die Schleife sichtbar…

Nachtrag… ich kriegs irgendwie nicht hin. Naja, jedenfalls wollte ich ihn nicht beleidigen. Ich ziehe meinen Hut…

 

3:22

Aside

Gestern 3 Std 22 Min mit der Libelle geflogen… endlich mal wieder! 🙂

Diesmal Flugplatz-Hopping, um wieder reinzukommen. Hengsen – Sümmern – Altena-Hegenscheidt – Sümmern – Hegenscheid – Werdohl – Rheinermark – Hengsen.

Den Flug hab ich aber nicht als Log, müsste sonst das Flarm ausbauen. Vielleicht mal nen Logger oder das HTC mitnehmen beim nächsten mal.