knuspermagier.de
Hallo. Ich bins! Philipp!
philipps.photos logo

Was machen eigentlich (1)

Ab und zu, meist spät in der Nacht, fällt mir ein, dass ich ab und zu ein paar obskure Schrei-Bands höre und ich frage mich, was die eigentlich in der letzten Zeit so gemacht haben. Ich sollte mir da mal eine Liste anlegen, oder sie einfach bei Spotify verfolgen.

Marathonmann

Fangen wir an mit Marathonmann. Zuerst fällt mir eine neue Single mit Sperling und Kind Kaputt ins Auge. Catcht mich nicht so richtig, dafür lerne ich aber Kind Kaputt kennen.

Abgesehen davon haben sie anscheinend ein Akustikalbum veröffentlicht, was mit ja eigentlich gefallen sollte, denn ich liebe Akustik-Versionen von Rocksongs. Leider wird hier, soweit ich das bisher mitbekam, nicht mehr geschrieen und damit geht der USP der Band komplett verloren. Schade.

Die Band mit dem wilden Gitarristen von Adam Angst

Wie hießen die gleich noch? Ich brauche etwas um das zu ermitteln und finde auf dem Weg dieses tolle Cover von Junge von Adam Angst. Nach wenigen weiteren Videos komm ich drauf: FJØRT. Leider haben sie nichts groß neues vorzuweisen. Nur eine kleine Corona-Session.

8kids

Ich fand einen relativ neuen Live-Auftritt und musste feststellen, dass ihre Drummerin gegen einen Mann ausgetauscht wurde. Außerdem gibt es keinen Bassisten, was ist denn hier los. Nach dem Samsas Traum-Konzert von letztens schon wieder eine Band ohne Bassisten!

Objects in the Rear View Mirror

Folgende Spannende Geschichte:

Ganz davon abgesehen finde ich es ganz grandios einen Song mit einem so langen Titel und einer Länge von mehr als zehn Minuten zu veröffentlichen.

Kartoffeln in Stäbe schnibbeln, knapp 10 Minuten mit einem Löffel Essig im Wasser kochen; mehlen, salzen, ölen und dann 30 Minuten in den Ofen. Ich finde das Video von Pro Home Cooks dazu nicht mehr, es hat meine Selfmade-Pommes revolutioniert. Sehr lecker!

Der Bann ist gebrochen

Dereinst, als ich mal studierte im verwunschenen Winter-Wonderland Furtwangen im Schwarzwald, spielte ich ab und zu mit meinen Kommilitonen Daniel und Fabian, viele Grüße an dieser Stelle, ein uraltes Spiel: Tank Wars. Laut Wikipedia ein genreprägender Klassiker!

2008-05-29_171253.jpg
Vier Studenten und ein CRT, 29. Mai 2008.

Wie auf dieser altertümlichen Low-Megapixel-Fotografie zu erkennen, haben wir uns manchmal einen Jux draus gemacht, es standesgemäß auf einem der CRTs im Labor der Hochschule zu spielen. Es war zwar erst 2006, aber es gab auch dort schon Flachbildschirme, keine Sorge. Es gab sogar einen iMac, bei dem ich Stunden zubrachte, etwas auszudrucken, weil das “Datei”-Menü “Ablage” hieß und ich natürlich nicht auf die Idee kam, dort nach dem Drucken-Dialog zu suchen. Aber es war der einzige Rechner von dem aus der Drucker funktionierte. Glaube ich. Vielleicht ging der Drucker auch einfach auf meinem Linux-Notebook nicht und ich war mir zu fein ein Windows-Gerät anzufassen. Es ist sehr lange her.

Jedenfalls verbindet mich mit diesem Spiel ein gewisser Fluch, denn ich, der damals schon Lust auf Spielentwicklung hatte, wollte natürlich dieses grandiose und wegweisende Spiel nachbauen. So schwer kann das ja nicht sein, dachte ich mir, und produzierte sicherlich ungefähr vierhundert Java-Projekte, bei denen ich immer wieder verzweifelte. Doch warum?

Für alle, die die Wikipedia-Seite nicht gelesen haben, nochmal kurz die Grundlagen vom Spiel: Es gibt für jeden Spieler einen Panzer, der Dinge abschießen kann, die entweder die anderen Spieler kaputt machen, oder, wenn sie aufs Gelände treffen, eben dieses zerstören. Man kann nicht fahren, sondern nur den Rüssel bewegen und die Schusskraft verändern. Ich wollte diese Spielelemente nun also möglichst originalgetreu nachbauen, also auch das zerstörbare Terrain. Abgesehen davon, dass es 2006 noch nicht tausend super dokumentierte Game-Frameworks gab, wollte ich auch einfach verstehen, was da passiert, ich beschloss also, alles in Java, der einzigen Sprache, neben PHP, die ich damals konnte, umzusetzen. Mit Swing, oder wie das hieß. Ich malte also fleißig ein BufferedImage nach dem anderen und zeigte es in einem JFrame an.

Die meisten Sachen bekam ich auch hin. Diese ganze Mathe-Kacke. Eine Linie zeichnen von A nach B, Kreise malen, Winkel, Sinus und Kosinus. Damals konnte ich auch schon googeln. Ich schaffte es auch, dass das Terrain kaputt ging, wenn man daneben schoss, und baute auch so ein paar Extras ein, dass Dinge am Bildschirmrand abprallen und so Spielereien.


Was ich allerdings nie schaffte, und was mir irgendwann den letzten Nerv raubte: Es performant laufen zu lassen. Auf meinem Notebook, der 2006 quasi neu war, lief es halbwegs okay, aber auf dem etwas kleineren Rechner meines Kommilitonen ruckelte es wie verrückt. Unspielbar! Ich kam nie so richtig darüber hinweg, warum es auf Hardware mit mehreren Gigahertz nicht möglich ist ein paar tausend Pixel sechzig mal in der Sekunde neu zu malen. Mir war schon bewusst, dass das natürlich nicht auf der Grafikkarte läuft, wenn man nur einzeln ein paar Pixel in einem Bild im RAM ändert, aber es beschäftigte mich wirklich lange. Ich begann immer wieder von vorne, fand aber keine Lösung, auch meine Ansätze, herauszufinden, welche Pixel sich änderten und nur diese neu zu malen brachten irgendwie nichts.

Nach dem Studium legte ich das Projekt erstmal wieder zur Seite, ich hatte anders zu tun, als immer wieder das gleiche zu machen, ohne irgendeinen Fortschritt bei der Sache zu machen. Nun, zwölf bis vierzehn Jahre später, kam es aber zu einer unvorhergesehenen Folge von Ereignissen. Zum einen scrollte ich durch Photos.app und fand das oben abgebildete Foto und zum anderen fand ich auf Hacker News einen Blogpost von jemandem, der so eine realistische Sand-Simulation in JavaScript programmierte. Da blühte etwas in meinem Kopf auf, ich musste erneut versuchen dieses Spiel zu programmieren.

Nun wurde ich leider Krank, zwar nur eine handelsübliche Erkältung, trotzdem ganz schön foggy im Kopf, vor allem Abends, wenn ich nochmal fünf Minuten Lust habe, was zu programmieren, daher ist der Code ganz schön schlimm und enthält einige // hä Kommentare vor komischen if-Blöcken mit kopiertem und leicht angepassten Code, die man sicher hätte eleganter lösen können, aber es funktioniert halbwegs. Also das Terrain geht kaputt und man kann sich sogar bewegen, was völlig entgegen der eigentlichen Spielidee ist, aber gut. Das Schönste ist, wie das Terrain kaputt geht und herunterrieselt.

Das beste an JavaScript ist ja auch, dass ich es hier jetzt einfach embedden kann, bitte schön: Wichtig sind WASD und die Leertaste. (Natürlich nur am Desktop, außer ihr habt ein Nokia mit Tastatur)

Ja ich weiß, es fehlen weitere Mitspieler und es gibt auch keine Schwerkraft für die Panzer. Ich habe es auch Elephant THROW! genannt, und die fünfzehn Quadratpixel großen Rechtecke sind natürlich Elefanten, die Steine werfen oder sowas, denn ich finde es in dieser Zeit auch irgendwie blöd ein Spiel mit Panzern zu bauen, aber man kann auch nichts machen, wenn einen nunmal die für ein Jahrzehnt versteckte Motivation packt.

Eigentlich wäre das Projekt auch fast schon am ersten Tag wieder vorbei gewesen, denn die Auswahl des Frameworks hätte mich fast schon wieder völlig verrückt gemacht. Der Herr Jason vom Sandspiel hat das nämlich mit p5.js umgesetzt, was irgendwie so eine JavaScript-Version von Processing ist, oder so. Ich hab mir da fünf Minuten die Doku angeguckt und ich habe nicht verstanden, wie ich das schnell benutzen kann. Bei so Kram wie PixiJS fand ich keine Möglichkeit, einzelne Pixel zu setzen, was wahrscheinlich Sinn ergibt, da man das sicher nicht möchte, wenn man ein performantes Spiel bauen will. In meinem Kopf war festgesetzt, dass das Terrain aus einzelnen Pixeln besteht, die verschwinden und rieseln sollen, also brauchte ich etwas, mit dem ich die Pixel modifizieren kann. Ich landete letztendlich also beim ganz klassischen HTML Canvas-Element.

Also, da kann man natürlich auch erstmal keine Pixel setzen, sondern im Grunde ist es ein bisschen wie damals in Java, man erzeugt mit context.createImageData(width, height); einen sehr sehr langen Array, der für jeden Pixel vier Werte (R, G, B, Alpha) enthält. Was für ein riesiger Array! Am Ende spuckt man das komplette Array in den Canvas und die bunten Pixel werden angezeigt. Es gäbe zwar noch die Möglichkeit mit context.fillRect() direkt ein Rechteck malen, und immer 1x1 Pixel große Rechtecke malen, aber Stack Overflow meinte, die Methode mit .createImageData wäre schneller, was mir auch logisch erscheint, da man halt direkt ganz viele Pixel auf einmal setzen kann.

Einen weiteren Trick, den ich angewandt habe ist, einfach viel weniger Pixel zu rendern, als am Ende anzuzeigen. Intern gibt es nur 320x240 Pixel, angezeigt wird es auf 640x480. Werden diese Standard-Displaygrößen jemals aus meinem Kopf entweichen? Das gibt der ganzen Sache jedenfalls einen gewissen unscharfen Retro-Look. Jedenfalls rendert der bei mir ziemlich viele Frames, ohne größere CPU-Last zu erzeugen. Entweder liegt es nun daran, dass ich eine schnelle M1-CPU habe und seit meinem ersten Umsetzungsversuch einfach fast zwanzig Jahre vergangen sind, oder diese Canvas-Implementierung im Browser ist performanter im Pixel-Malen, als es diese JFrame-Java Geschichte damals war.


Nach dem Schreiben des letzten Absatzes wollte ich es natürlich doch genauer wissen und baute mal einen FPS-Zähler ein. 116 Frames schafft er! Im Chrome Taskmanager braucht der Tab dann etwa 30% CPU. Keine Ahnung, warum es nicht noch mehr sind, wenn er die CPU nur so gering belastet, gleichzeitig gefühlt aber auch ganz schön viel für ein paar Pixel.

Turns out, es ist immer noch super anstrengend im CPU Modus ein paar Pixel zu setzen. Ich habe also damals nicht komplett versagt. Irgendwie reicht mir das jetzt auch schon als Outcome von diesem kleinen Projekt. Mein Interesse, da jetzt alle Features des Ursprungsspiels einzubauen, oder sogar noch mehr, ist doch irgendwie ziemlich gering. Vielleicht versuche ich es in Zehn Jahren nochmal mit einer echten Game Engine und Sprites statt Pixeln.

philipps.photos logo

Bereits am 10. März, also vor zwei Monaten, droppten zwei neue Songs von Schandmaul. Der Erste, Köningsgarde, klingt auch direkt nach dem ersten Takt wie ein Schandmaul-Song, da freut sich doch der Teil meines Herzens, der sich gegen Veränderungen wehrt. Knüppel aus dem Sack klingt mal ein bisschen anders. Ist auch ein guter Alben-Name. Bin gespannt, nächsten Monat ist es schon so weit!

Von Allmen und Ulmen

Vor ein paar Wochen las ich die gesamte Allmen-Reihe von Martin Suter. Also, naja, ich habe sie angehört. Jedenfalls hatte ich viel Spaß dabei. Dabei geht es um einen ehemals relativ wohlhabenden Typen, dessen Haupt-Trait es ist, weiterhin einen entsprechenden Lebensstil zu führen und entsprechend viel Geld auszugeben, obwohl er schon länger nicht mehr über die Mittel verfügt.

Über ein paar Umwege kommt er dadurch in etwas weniger legale Fahrwasser und gründet irgendwann die Allmen International Inquiries, eine Firma um verlorengegangene Kunstgegenstände wieder zu finden. Die sechs Bücher handeln nun also davon, wie Allmen, zusammen mit mit Carlos, seinem ehemaligen Diener und zwangsläufig Geschäftspartner, diverse Verbrechen begeht und aufklärt. Wie schon gesagt war das alles ganz unterhaltsam.

Nachdem ich durch war, dachte ich mir, dass sich das doch wunderbar für eine Verfilmung eignet, so vom öffentlich rechtlichen oder so, mit irgendeinem lustigen deutschen Schauspieler. Heiner Lauterbach, Jan Josef Liefers, oder so. Tatsächlich wurde ich fündig, ein paar Bücher wurden schon verfilmt, tatsächlich irgendwie für Das Erste / ORF. Da hatte ich den richtigen Riecher! Nur beim Schauspieler lag ich daneben, Heino Ferch hatte ich nicht unbedingt auf meiner Shortlist.

Natürlich musste ich schleunigst mal reingucken. Leider war das erstmal gar nicht so einfach, denn alle Mediathek-Links gingen nicht mehr, aber bei mediatheksuche.de gibt es Direktlinks zu den Video-Files und die funktionieren wohl auch später noch. Nach den ersten Minuten kam es aber schon zur großen Ernüchterung, es ist ziemlich schlecht umgesetzt. Also, ich will keinem zu Nahe treten, vielleicht findet es auch jemand gut, aber es ist auf jeden Fall überhaupt nicht so umgesetzt, wie ich mir die Figuren vorgestellt habe, von diversen Abweichungen bei der Handlung mal abgesehen.

Hier eine kurze Liste von Sachen, die ich wirklich schlecht getroffen fand (enthält natürlich irgendwie Spoiler für die Bücher):

  • Allmen raucht dauerhaft. Ich weiß nicht mehr genau, wie es im Buch war, ist jetzt auch schon wieder ein paar Wochen her, aber es wäre mir aufgefallen, wäre jeder zweite Satz “Allmen steckt sich eine Zigarette an” gewesen, das fällt mir nämlich meistens sofort auf.
  • Das ganze Geld verprassen, was im Buch ewig durchgekaut ist, fehlt im Film. Vielleicht ist das so eine Sache, die von den Adapteuren irgendwie mehr auf die ganze Film-Reihe gestreckt wurde, oder so, kann ich nicht beurteilen, da ich mir nicht mehr als den Ersten anschauen werde.
  • Carlos, sein Diener, ist aus Kolumbien und spricht im Buch öfter spanisch, etc, im Film ist von der Atmosphäre nichts übrig.

Keine Ahnung, ob es jetzt vielleicht gute Filme sind, aber ich war beim Schauen einfach nur total sauer, dass kaum etwas so umgesetzt war, wie in meiner Fantasie. Ich hatte das ja zuletzt bei Becks letzter Sommer, dazu schrieb ich hier anscheinend noch gar nichts! Da gefiel mir das Buch auch sehr gut, und als ich mit bekam, dass es einen Film mit Christian Ulmen dazu gab, war ich zuerst sehr entzückt. Da es keine andere Möglichkeit gab, lieh ich mir den Film dann für 4,99€ oder so aus, schaute die ersten 40 Minuten und entschied mich dafür, ihn nicht weiter zu gucken, eine Seltenheit bei etwas, wofür ich Geld ausgegeben habe.

Ulmen hatte das Buch zwar perfekt als Hörbuch vorgelesen im Film fehlte aber gefühlt alles, was Ulmen sonst gut kann, und was ich mir beim Hörbuch auch gut vorstellen konnte. Insgesamt sprintete der Film gefühlt durch den ganzen ersten Teil des Buches um schnell zum Roadtrip-Teil zu kommen — den Abschnitt, den ich persönlich am langweiligsten fand. Den schaute ich auch gar nicht mehr, keine Lust darauf.


Ich werde in Zukunft bei Buchverfilmungen wohl etwas skeptischer werden und nicht direkt in Jubelsprünge verfallen, sobald ich was von einer Filmumsetzung lese. Kann nicht alles so toll sein wie So was von da.

BetterJournal (4)

Tatsächlich hat sich die Zeitinvestition bisher gelohnt, ich schreibe wesentlich öfter ins Tagebuch als vorher. Trotzdem war ich noch nicht komplett zufrieden. Irgendwie habe ich es nämlich geschafft, ein paar der Sachen, die ich an Day One nicht mochte, einfach nachzubauen. Zum Beispiel störte mich ja, dass man so viele Taps braucht, bis man endlich einen neuen Eintrag anlegen kann. Erst auf’s Plus, den Typ auswählen, und es gab so viele davon. Exakt genau so war es bei mir jetzt auch.

Außerdem war mir die ganze UI zu voll mit unwichtigen Informationen. Auch hier habe ich es ziemlich gut geschafft, die Startseite erstmal mit Infos voll zu knallen, die ich gar nicht brauche. Suchleiste, Streak-Anzeige, und so weiter. Eigentlich will man ja hauptsächlich die Einträge sehen. Die Uhrzeit ist auch ein bisschen quatschig gewesen.

frame-1-2.png
Transformation!

So legte ich heute also einen kleinen Refinement-Sprint ein, in dem ich die Hauptseite etwas umgestaltete und so gut wie alles rauswarf. Die aktuelle Streak ist nur noch ein kleiner Badge beim Logo, die Suchleiste klappt einfach aus, wenn man auf die Lupe klickt und auf die “Einträge an diesem Tag in den letzten Jahren” kommt man auch einfach über einen kleinen Knopf im Header. Im Grunde sind im Viewport nur noch die Einträge.

Unten am Rand ist nun die ganz neue Art was zu schreiben, direkt ein Input-Feld, das auch direkt den Fokus bekommt. Bringt auf iOS leider nicht viel, da man den Safari nicht dazu überreden kann von sich aus die Tastatur zu öffnen, aber trotzdem besser als drei Taps wie bisher. Mit /mood 8 mir gehts super! kann ich auch direkt z.B. einen Mood-Eintrag machen. Mit dem bisher noch dumm “add” benannten Button komme ich, wenn ich muss, auch noch zur alten Auswahl der verschiedenen Post-Typen.

Wer jetzt an eine Chat-App denken muss, liegt richtig. Es fühlt sich für mich immer schon am Produktivsten an, alles mögliche in Chatfenster zu schreiben, einfach kurz eine Notiz absetzen. Ursprünglich wollte ich ja auch mal einen Telegram-Bot bauen, der das Tagebuch für mich führt, in dem ich dem alles schreibe, aber das ist ja leider ein Datenschutz-Fiasko, schätze ich.

Bin gespannt, wie ich damit zurecht komme! Bin gerade wieder etwas unzufrieden mit dem Teil zwischen Header und Footer, irgendwie sind die Abstände doof und vielleicht Wechsel ich doch auf eine andere Schriftart als die Systemfont, oder so, irgendwas gefällt mir da noch nicht.

philipps.photos logo