Learning Python with pain…

… nein, der Titel dieses Posts soll Python nicht schlecht machen, im Gegenteil, es ist ein nettes Wortspiel in diesem Zusammenhang ;).

Um mal ein wenig in die Programmiersprache Python, die bei Mausbrand verwendet wird, reinzukommen, habe ich mir glaube ich das trockendste Thema überhaupt ausgesucht :-D… ich muss aber zu meiner Verteidigung sagen, dass ich der Meinung bin, man kann eine Programmiersprache nur erfolgreich lernen und einsetzen, wenn man damit auch Programme schreibt, die einen konkreten Nutzen haben und mit denen man auch etwas bewirken kann.

Nun, für mein erstes Python-Programm habe ich mir ausgesucht, dass ich für den Verein eine Schnittstelle benötige, um SEPA-Lastschriften automatisiert per Datei bei der Bank einzureichen. Dies wurde in der Vergangenheit immer händisch gemacht und ist ein langweiliger, undankbarer Job.

Das kleine Skript sepa_pain.py implementiert das Nachrichtenformat SEPA-PAIN Version 008-002 des EBICS (Electronic Banking Internet Communication Standard). Ich muss dazu sagen, dass ich einen Großteil der Logik aus einer kleinen PHP-Library geklaut habe, nur ich wollte mich ja erst mal ein wenig mit Python vertraut machen.

Nun hier ist das Programm! Für Augenkrebs und sonstiges übernehme ich keine Haftung. Ich denke auch, dass ich einiges hätte eleganter machen können, das Problem ist nur, das ich mich dazu noch zu wenig mit Python auskenne um solche Tricks zu kennen.

Daher: Quick&Dirty!

Das schöne: Die Dateien, die dieses Skript ausgibt, werden sogar im Online-Banking eingelesen und akzeptiert. Es scheint also weitestgehend valide zu sein.

Allerdings muss man ja schon anmerken, dass sich die Finanzbehörde mit dem namen PAIN mal wieder alle Mühe gegeben hat… es ist wirklich schmerzhaft, diese komischen XML-Tags zu entziffern wie z.B. DtOfSgntr oder DrctDbtTxInf… wunderbar! 🙁

Querruder-Endscheiben

Unter der Woche mal wieder nen F-Schlepp und 5 Windenstarts mit der Libelle gemacht… das hat mal wieder gut getan! 🙂 Leider kein Thermikflug dabei. Die neuen Querruder-Entscheiben machen sich aber gut!

JpegJpeg Jpeg Jpeg Jpeg Jpeg

Haus der Lüge

Erstes Geschoss:
Hier leben die Blinden
die glauben was sie sehen
und die Tauben
die glauben was sie hören
festgebunden auf einem Küchenhocker
sitzt ein Irrer, der glaubt
alles was er anfassen kann
(seine Hände liegen im Schoss)

Zweites Geschoss:
Rolle für Rolle
Bahn für Bahn
Rauhfaser tapeziert
in den Gängen stehen Mieter herum
Betrachten die Wände aufmerksam
suchen darauf Bahn um Bahn
nach Druck- und Rechtschreibfehlern
könten nicht mal ihren Namen entziffern

Auf ins nächste Geschoss:
Welches, oh Wunder! nie fertiggestellt
nur über die Treppe erreicht werden kann.

Hier lagern Irrtümer, die gehören der Firma
damit kacheln sie die Böden
an die darf keiner ran

Viertes Geschoss:
Hier wohnt der Architekt
er geht auf in seinem Plan
dieses Gebäude steckt voller Ideen
es reicht von Funda- bis Firmament
und vom Fundament bis zur Firma

Im Erdgeschoss:
Befinden sich vier Türen
die führen
direkt ins Freie
oder besser gesagt. in den Grundstein
da kann warten wer will
um zwölf kommt Beton
Grundsteinlegung!
Gedankengänge sind gestrichen
in Kopfhöhe braun
infam oder katholisch violett
zur besseren Orientierung

Dachgeschoss:
Es hat einen Schaden
im Dachstuhl sitzt ein alter Mann
auf dem Boden tote Engel verstreut
(deren Gesichter sehen ihm ähnlich)
zwischen den Knien hält er ein Gewehr
er zielt auf seinen Mund
und in den Schädel
durch den Schädel
und aus dem Schädel heraus
in den Dachfirst
dringt das Geschoss

Gott hat sich erschossen
ein Dachgeschoss wird ausgebaut
Gott hat sich erschossen
Ein Dachgeschoss wird ausgebaut
Ein Dachgeschoss wird ausgebaut


EPILOG

Untergeschoss:
Dies ist ein Keller
hier lebe ich
dies hier ist dunkel
feucht und angenehm
dies hier ist ein Schoss

(C) 1989 Einstürzende Neubauten

Der Drang nach Perfektion

Momentan bin ich, auch aufgrund meiner beruflichen Situation, mal wieder ziemlich damit beschäftigt, meine alten Ideen von damals mal wieder nach vorne zu bringen.

Es geht vor allem um mein Sorgenkind, was man schon fast als Vaporware bezeichnen könnten… RapidBATCH 6. RapidBATCH ist ein Projekt, welches ich 2001 mit 15 Jahren begonnen habe und was Aufgrund durch eine immense Medienpopularität wahrlich äusserst bekannt geworden ist: Eine einfache Batchsprache mit EXE-Compiler. Programmiert, damals, in QuickBasic. Der Compiler war natürlich eher Fake, es war eher ein Obfuscator, der Code an einen Interpreter, der diesen Code aus sich selbst ließt und dann ausführt, hängt. Aber es hatte den anschein, man hätte einen EXE-Compiler. Selbiges Konzept ging bis zur Version 5.1, die letzte veröffentlichte RapidBATCH-Version einher.

Nach dem Release der (leider immer noch aktuellen) Version 5.1 und meiner damaligen privaten Situation (die nicht sehr rosig war) habe ich mich sehr viel mit dem Thema Compilerbau beschäftigt. Das hat aber dann immer mehr dazu geführt, dass die Ideen von damals immer mehr in Frage gestellt wurden… es musste immer besser werden… was auch der Grund ist warum es kein RapidBATCH 5.2 gab, welches sogar in seiner damaligen Beta-Version einen echten Rekursiv-Descent Parser mit sich brachte. Aber es war mir zu heikel, dass damals weiter zu machen… RapidBATCH 6 wurde prototypsiert… und immer weiterentwickelt.  Bis hin zu einer wahrlich soliden Basis. Aber sie war mir nicht *perfekt* genug. Ich könnte mir eigentlich sowas von in den Arsch treten damals diese Entscheidung getroffen zu haben. Die Sourcen davon habe ich alle noch, aber sie sind sowas von inkompatibel mit der aktuellen libphorward, welche schon damals in Teilen existierte… man kann sie nicht einfach mal umbiegen und alles läuft so wie vorher.

So ein Scheiß… RapidBATCH 6 war vollends prototypisiert… es hatte einen sogar opimierenden Compiler, basierte vollständig auf einer stack-basierten Virtual Machine namens Phosphor, implementierte bereits eine Basis-Version (konsolenbasiert) der urspünglichen Version 5.1 mit zusätzlichen Features der Version 6

  • Ein ECHTER Compiler!
  • Verschachtelte Funktionsaufrufe
  • Neue Schleifen WHILE…WEND und EACH…IN…NEXT
  • Assioziative Arrays

Ich hatte Klaus F. und Andi H. im Boot… die wären mitgegangen… ich hab es vergeigt.

Bitte…hier… seht euch diese geilen Screenshots an… es ist unglaublich, was das Ding damals konnte… ein geniales Stück Software, doch geschrieben für die Katz.

snapshot4 snapshot5 snapshot6 snapshot7arrays Und nur eine Auswahl der damaligen Demo-Programme, die bereits FUNKTIONIERTEN….

und

…verdammt, ich könnte kotzen, wenn ich dran denke, das alles in die Tonne gepfeffert zu haben. Scheiss Drang zur Perfektion. Scheiss Entscheidung. Alles für’n ARSCH. SCHEISSE!!!

Was hab ich davon heute? UniCC… ein Parser Generator den kein Schwein braucht und der völlig überladen ist. Aber es musste sein. Sowas wie ein Ziel, das erreicht werden muss und keinen Sinn macht. Jetzt bastel ich mir wieder einen zurecht und baue die libphorward zum Multi-Paradigma Parser Generator mit verdammten Features die keine Sau jemals nutzen wird… und dann diese leeren Versprechungen… RapidbATCH 6, die Vaporware, die Niemals kommt… NEIN. Ich will das verdammt nochmal nicht mehr.

Ich wünschte, ich könnte die Zeit zurückdrehen, nach 2008, und mir selbst in den Arsch treten, diesen Weg beschritten zu haben. RapidBATCH hatte seine Chance und ich habe sie vollends in den Sand gesetzt. Alles mir zu verdanken, einem Volldeppen, der mit seiner Perfektion nicht zurecht kam.

Tja, was haben wir heute. Einen haufen Sourcecode, der nicht übersetzbar ist. Nicht ohne massive Anpassung.

  • phosphor, die Virtual Machine
  • rb6core, der RapidBATCH 6 Sprachkern mit Compiler
  • rb6, die RapidBATCH 6 Sprachlibrary mit den Funktionen

Alles nicht mehr übersetzbar. Zu viel zu ändern. Zu viele Ansätze, es besser zu machen.

Ich muss eigentlich nochmal von vorn anfangen, und dann das beste in einem ganzheitlichen Projekt zusammenfassen.. aber selbst das rede ich schon seit Jahren. Immer wieder diese Versuche.

Nur wenn, dann alles als freie Software. Ich glaube, dass RapidBATCH nur so eine Chance hat, weiter zu leben, und vielleicht doch noch mal Anklang in der seit Jahren treuen Community zu bekommen. Die es trägt und was draus macht. Einen anderen Weg gibt es nicht. Und einen anderen Weg will ich auch nicht.

Seit einigen Jahren dümpelt in meinem Sourceverzeichnis auch noch das Verzeichnis rapidbatch rum. Ein Ansatz, das alles unter ein neues Dach, basierend auf libphorward und UniCC, zu bringen. Bisher nicht sehr viel Inhalt. Nur lose Module, ohne wirklichen Zweck und Zusammenhang. Hier mal eine Graphik, da mal ein fetzen Code.

Es muss weiter gehen. Es MUSS.

Ab morgen hab ich den Rest der Woche Urlaub. Möchte das gute Wetter nutzen und fliegen gehen. Und wer weiß… vielleicht schraubt sich diese Tage doch mal ein Entschluss zusammen, der RapidBATCH doch noch dahin bringt, wo es einst in einem Prototypen auf einem sehr gutem Wege war… es wird Zeit… es muss Zeit werden. Es MUSS.

Eine linksrekursive Grammatik im rekursiven Abstieg parsen

Zur Zeit zerbreche ich mir den Kopf darüber, wie man eine linksrekursive Grammatik mit einem rekursiv-absteigenden Parser parsen kann.

Darauf gekommen bin ich durch das Open-Source-Projekt RpaTk von Martin Stoilov – ein im übrigen sehr geniales Projekt. Es enthält einen grundlegend anderen Ansatz als meine bisherigen Entwicklungen, nämlich einen rekursiv-absteigenden Parser, der Backtracking verwendet und noch einige Geschwindigkeitsoptimierungen durch Caching. Das alles läuft dann auch noch auf Basis einer virtuellen Maschine, die ziemlich rasantes Parsing ermöglicht. Ein sehr durchdachtes Konzept, auch wenn es in direkter Konkurrenz zu den letzten Entwicklungen in der libphorward steht, und dieser auch meilenweit voraus ist – Hut ab. Habe mit dem Autor auch Kontakt aufgenommen, weil ich es einfach verstehen will, wie man mit einem rekursiv-absteigenden Parser eine linksrekursive Grammatik parst.

Nehmen wir mal als Beispiel die Grammatik

und würden diese als plumpen rekursiven Abstieg umsetzen, so wird er noch vor dem lesen des ersten Zeichens in eine Endlosschleife verfallen, weil sich e rekursiv aufruft.

Continue reading

Status Update

Moin Zusammen.

Jo es ist viel passiert die letzte Zeit, und mir gings auch nicht so wirklich gut, daher hab ich das hier mal ne Zeit lang ruhen lassen. Ich hatte zwischendurch schon überlegt den Blog hier vielleicht einfach zu löschen. Hab ich dann aber wohl scheinbar doch nicht gemacht.

Nun, wo soll ich anfangen? Ich habe meinen Job bei MEGA gekündigt und fange wohl zum 14. Juli bei einer neuen Firma an, wo ich über Vitamin B drangekommen bin.

logo-mausbrandDie Firma wo es mich hinzieht heißt Mausbrand Informationssysteme. Ein junges, kreatives Team bestehend aus Designern und Programmierern, spezialisiert auf Cloud-Computing Lösungen im Bereich Webseiten, Content- und  Informationsmanagement. Programmiert wird größtenteils in Python auf Basis eines selbst entwickelten Open Source Frameworks namens Viur.

  • alles Open Sourceviur_logo
  • Kreativ sein und ausprobieren
  • Python, HTML 5, Ajax, Java, C++
  • Linux optimiert
  • geile, morderne Scheiße!!!

Ich glaube, es ist der ideale Job für mich, um mich auch weiter zu qualifizieren und neue Welten und Horizonte zu entdecken. Ich freu’ mich voll, mehr dazu später! 🙂 🙂 🙂

Tja, ansonsten hatten meine Eltern Geburtstag, davon mein Vater seinen 60., es war anstrengend aber schön und sie haben sich auch riesig gefreut.

Die Flugsaison hat auch angefangen mit neuen Ideen und Konzepten, die scheinbar Früchte tragen, wenn auch etwas holprig. Gestern noch an der Libelle das Seitenruder ausgebaut und Spiel entfernt, dann noch ein wenig Lackschutz einpoliert. Damit ist die Karre auch fertig um voll in eine frische, neue Flugsaison durchzustarten.

Letztes Wochenende war auch Konzert-Wochenende: Freitag gings zu den Kassierern, die sich tatsächlich auf der Bühne ausgezogen haben (ich glaubte es erst als ich es sah!) und gestern ging es zu Riverside, die einen übelst geilen Live-Auftritt hingelegt haben. IMG_20140413_205000 IMG_20140413_205137 IMG_20140413_205719Ausserdem noch neue alte Bekannte wiedergetroffen: Marc gehts gut, Helmut mag Riverside und Benny durfte ich auch mal wieder in die Arme schließen *muhahaha* 😉