Uni Stuff #2: mensa.php

Um Jans Prokrastinationsperiode zu überbrücken habe ich hier eine kurze Geschichte für euch, die von dem hoffentlich einzigen PHP-„Projekt“ meines Lebens erzählt. Allein die Idee zeigt eindrucksvoll, dass man von zu viel Studium blöd im Kopf wird. Dass ich den Mut aufbringe hierüber öffentlich im Internet zu berichten möge man mir hoch anrechnen.

Ein Bewertungssystem für das Essen unserer Mensa zu schreiben war nicht mal eine Aufgabe im Studium, sondern ganz allein eine Idee die mir aus purer Langeweile gekommen ist. Auf meinem Server war PHP sowieso installiert aufgrund irgendwelcher Administrationstools, sodass ich mich dummerweise dazu entschloss, einen kleinen Prototypen in dieser Sprache zusammenzufriemeln.

Man konnte Gerichte eintragen und auf einer Skala von 1 bis 5 bewerten. In einem Cookie wurde eine ID gespeichert die ich serverseitig einem Client zuordnen konnte (ich konnte also sehen wer für was gestimmt hat und tägliche Bewertungen limitieren). Dann gab es noch eine kleine Benutzerverwaltung mit, lasst mich kurz nachsehen…

$passhash = base64_encode(hash("sha256", $salt . $newpass, true));

Puh, kein MD5. Hätte also schlimmer laufen können.

Ich bin mir relativ sicher dass dieses Monstrum den schlechtesten Source Code enthält, den ich jemals geschrieben habe und ich habe immer noch das Gefühl, dass ich mich dafür entschuldigen muss.

Aber Code beiseite (denn den werde ich bestimmt nicht zeigen), hier ist der Dump der Essens-Tabelle, der deutlich macht wie sehr die Ernsthaftigkeit im Laufe des Studiums abnimmt.

Der Schokomuffin war ohne Scheiß trocken wie Sand. Man hätte den wirklich irgendwo in nen See schmeißen können und der hätte den leergesaugt.

Am Anfang des letzten Semesters kam das Update auf PHP 7 raus und hat alle meine installierten PHP-Anwendungen, inklusive des Mensa-Bewertungssystems, komplett lahmgelegt. In Rage hab ich alle Anwendungen durch Nicht-PHP Äquivalente ersetzt und mensa.php ging offline. Seit diesem Tag hatte ich keinen Kontakt mehr zu PHP und dabei bleibt es bitte auch.

Advertisements

Uni Stuff #1: MIDI zu Minecraft Sound-Blocks

Dies ist der erste Teil einer kleinen Reihe namens Uni Stuff. Mein Informatik-Studium ist jetzt seit über einem Jahr vorbei; in dieser Zeit sind eine Menge Projekte entstanden und Erinnerungen zusammengekommen, von denen so manche besser niemals das Licht der Öffentlichkeit erblicken. Alles andere ist teilweise ganz cool, und mit diesen Posts würde ich das gerne festhalten, denn Erinnerungen halten leider auch nicht ewig.

Dies ist gleichzeitig auch ein Collab mit meinem ehemals Kommilitonen, jetzt Kollegen, Jan. Der Plan ist, dass die Posts abwechselnd auf beiden Blogs erscheinen (werden dann unten verlinkt).

Im ersten Semester wurden wir in eine Art Intro-Projekt gesteckt – die Prämisse des Ganzen war, dass Projektarbeit einen größeren Teil des Studiums ausmacht und wir deshalb so früh wie möglich Übung darin bekommen sollten. Man stelle sich vor, Erstsemester ohne jegliche Informatikkenntnisse müssen in Gruppen irgendetwas Informatik-würdiges produzieren… es standen zur Auswahl Dinge wie Core War, Vier Gewinnt Simulationen und Schaltungen in Minecraft. Die Zuteilung zum jeweiligen Thema war vorbestimmt und wo ich gelandet bin liegt wohl nahe.

Was tut man also mit Minecraft, einem Spiel das mich nie großartig interessiert hat und welches man aus unzähligen Let’s Plays der jüngeren Generation kennt? Man konnte sich sicher sein: Alles was man in diesem Spiel mittels Logikschaltungen bauen kann wurde entweder bereits gebaut oder würde den zeitlichen Rahmen sprengen.

Der Name unseres Projektes war das selbst gewählte Javaception, vermutlich weil irgendjemand die Idee hatte, eine JVM in Minecraft aufzusetzen. Der eigentliche Plan war aber letztendlich ein anderer: Statt einer Ingame-Schaltung sollte es ein Mod werden, welcher die ebenfalls auf YouTube in Massen anzutreffenden Musik-Schaltungen (die mittels logischen Bausteinen und Tönen erzeugenden Blöcken Melodien wiedergeben können) automatisiert aus MIDI-Dateien herstellt.

Wir waren zu viert, zwei davon mit Erfahrung im Programmieren, so nahmen wir den Minecraft-Quelltext auseinander, experimentierten mit MIDI und versuchten irgendwie einen MIDI-Parser und Block-Generator gewaltsam mit dem riesigen Haufen dekompilierten und unkommentierten Code in Einklang zu bringen. Jeder der morgens um Acht programmieren musste weiß welch psychische Folter man dadurch erlebt, vor allem wenn man dann auch noch Java und Eclipse anfassen muss.

Wir benutzen die Stromschiene und das zugehörige Cart als Taktgeber und fahren hiermit an den braunen „Sound-Blocks“ vorbei, diese werden dadurch automatisch aktiviert.

Die MIDI-Events durchlaufen eine Pipeline: Zuerst werden diese repariert, da sie in einem absurden Durcheinander vom Java-internen MIDI-Framework ausgespuckt werden. Hierbei können wir gleich das Event für die BPM abfangen, denn darüber steuern wir die Geschwindigkeit des Carts.

Anschließend folgt der interessante Teil, denn wir müssen jetzt herausfinden, wie wir die zeitlich sehr präzisen Events auf das doch eher unpräzise Minecraft-„Grid“ abbilden. Hierfür nutzen wir Coding und Algorithmen (letztendlich doch eher ein Bruteforce-Ansatz…), am Ende haben wir ein relativ gutes Ergebnis, können noch einige leicht verrutschte Anschläge quantisieren und schmeißen alles andere weg. In einem letzten Schritt schieben wir die 127 in MIDI verfügbaren Noten in den unfassbar großen, 24 Noten umfassenden Minecraft-Bereich indem wir um Oktaven transponieren, platzieren die Blöcke und voilà: Der Ghettoblaster war geboren.

Die Noten sind übrigens nur wirklich „In-Sync“ wenn Java gerade Lust darauf hat. Man sieht es vor allem gegen Ende der Videos – die Demo lief teilweise auf einem MacBook Air flüssiger als in der Aufnahme. Ist es der Garbage Collector, der JIT-Compiler? Man weiß es nicht. Der Traum vom Minecraft Media Player… er ist geplatzt.

Hey Kids, wollt ihr auch auf eurem jährlichen Projektwettbewerb der Hochschule bleibenden Eindruck hinterlassen und den ersten Platz einsahnen? Baut einfach etwas lautes nervtötendes und präsentiert es penetrant während des Besucher-Rundgangs. Stellt euch frech mit Lautsprechern zwischen die anderen Teilnehmer und spielt eine Stunde lang Rhythm Is A Dancer und Blue auf 24 Minecraft-Noten.