This post is in English this time, because the target audience of what I've got to say this time is not limited to those that are able to understand German.

Hello, friends,

Over the last two (2) years, I've been working on a private side-project I've always referred to as "Jeremy's Art Generator". My recent achievement within that project was a full re-write of the former CoffeeScript code into ECMA-262 6th Edition syntax. While I had to dig through every single line in the whole project manually to not just stupidly transpile the sources, I more and more figured it would be a good idea not to just have a Help that later came with the project, but to also write a post about my motivation behind the project, since I had the feeling most visitors would just confusedly discard what they see and close the window when they first encounter the web application.

Back in 2014, I noticed folks I followed on Twitter had quite a lot of fun posting screenshots of a project made for Ludum Dare 27 in mid-2013, "BECOME A GREAT ARTIST IN JUST 10 SECONDS". One of these folks I also had the pleasure of meeting in person was Jeremy, posting several a day on their Tumblr. Presuming the game jam entry wasn't exactly fitting the definition of "art", I made a promise. Little did I know what I would go through.

And still, I am not exactly satisfied with the toolset and the variety of processors to chose from to generate "art". But first things first.

Without knowing how "BECOME A GREAT ARTIST IN JUST 10 SECONDS" worked exactly, my approach was to think of the "ideal" art generator as of something that had different more-or-less random processors with several settings to adjust the behavior of each step art was being generated. So I started with a little tech demo to verify whether my modular concept was in fact practical. As soon as that foundation was in good shape, all I had to do was to write more processors and the core application took care of the rest.

The problem was: I wanted and needed as much feedback as possible as early as possible, but the early prototype and what followed looked like... well, you tell me what it looked like.

I'm now pretty sure that one of the reasons people didn't reach out to me as I wished they would was that the application wasn't inviting enough to spend the time necessary to gather adequate impressions.

What you could see is that it was clearly targeted at Jeremy, yet up to the date of writing, I haven't heard much about it from them. I did get valuable feedback, suggestions and bug reports from other close ones, though, and without their help, I may not be writing this post now. (Hello, Thomas, nice you've read this far. I cannot thank you enough for what you did for the project. I hope everybody here appreciates that. <3) By now, calling the art generator "Jeremy's Art Generator" has become some sort of trademark to the whole project.

So what's the deal? Why keep on working on this project? Well, every once in a while, I still had a new idea, some inspiration, or some thing I had to experiment with, and while the last months mostly consisted of cleaning up the code and removing processors that didn't work or were not as "crafty" as they should be (rest in peace, "R-G-B"), Jeremy's Art Generator was the perfect place for that, even if it were about how to optimize the code once more. So I did.

I suppose before I can get people to help me improve or extend or even just correct my typos on the Help, I need users to understand how the project works. My plan was to let the project speak for itself, but I guess that's one of the things I failed at (more room for improvement, I guess). Once again, everything you'll now read here should've been understood just by having a look in the Help, there's just no pictures in there.

Anyway, let me guide you through some of the features.

Let's start with the most simple things here. As of now, there are four types of processors: Displays, controls, generators and manipulators. In the above picture, there is the Color generator and the only display to date, the Buffer snapshot. What this setup does is simple: The Color generator generates pixels according to its settings, accessible through sliders and other form elements on its card, while the Buffer snapshot takes those generated pixels and displays them. You can add as many displays to your setup as you like if you're interested in what's going on in between your steps.

Because generating the same color for every pixel is less artsy-fartsy as one would need for an "art generator", the Color processor uses special value sliders that yield two values to pick random colors between those two values. Of course, as it is their default setting, dragging both slider knobs to the same value will produce the same value for the channel.

To learn how these settings work, you could either open the built-in Help, which should give you all the information you need to understand what a processor does:

... or play with the sliders, what you should have done anyway a few minutes ago. Create art! For example, a random, bright red noise between #800000 and #ff0000.

Different from generators, which just smear more color onto your canvas, are manipulators. Manipulators cannot create colors from nothing (there are rare exceptions, though). They take pixels away, replace them, and modify them, and their result won't be drawn above the last buffer, they replace it.

A good example for that kind of manipulation is the Mirror:

As you may have noticed by now, your results with the same settings may differ from what you see here and even drastically vary every time you change a value. This is because, like I said earlier, processors would be more-or-less random. Your settings and wiggle-waggles on the sliders may control generators and manipulators, but never fully so that you would be able to predict their outcome.

Yet there is a solution for control-freaks among us: Seeded pseudo-random number generators. The idea is that the random number generator has certain values it uses to generate the next requested value, so the same "seed" (starting value) yields the same sequence of random numbers each time the processing is executed.

To control these kind of internal values, the control type of processor is there to serve. This control in particular resets the randomizer start value:

The result of this setup should look exactly the same on every device.

The random numbers generator has been replaced twice since I started working on the project, and every time I have to break existing setups, it hurts, but trust me, when I change existing pieces of the code, it's because I think it's better, more powerful and yields results that look more like art than before. So if you had setups stashed in your session and they don't look like they haven't before, you have my sincere apology. Try restoring your old stashed setups with the old revisions of the application, which you can open through the commit history. Oh, yeah, that's right: Every commit ever made and able to compile is available to you, so you can dig deep and try out the early versions if you're up to a development horror show.

If you've been reading and following my overview really carefully, you might have spotted a thing by now. To be frank (not Frank, but I'm sure he's a nice guy), I've been lying to you. There is, in fact, a fifth type of processor: patterns. Patterns are selected for masks for most processors that either manipulate or generate. And as the name suggests, masks control which parts of the picture are affected by the processors.

Masks can even be masked, if you're that kind of a maniac.

Hopefully, I made some sense and you've got a vague idea of what this is all about. So, what can you do with this kind of toy? Here are some randomly picked examples from the public gallery, if you haven't checked it out yet:

That brings me to what my goal with this project is: Jeremy's Art Generator is a tool for the people (and you are one of them, too), and it's here to stay.

Over the past months, I realized it's a wonderful project and I'd be better off keeping it alive. But for doing so, I more than ever need your help. So play with it, you've only got ten years left.

Tell me what's wrong. Tell me what you miss. Tell me what you are thinking.

I'm here to help. And I'm glad pushing this project forward and to the limits. This is a public web application for a reason.

Oh, and Jeremy: No hard feelings. <3

Mit sofortiger Wirkung wird der nachfolgende Dienst permanent abgeschaltet:


Ich trenne mich normalerweise nur ungern von Dingen, die ich mühsam aufgesetzt habe, seien sie noch so klein oder so wenig verwendet. Ruby-Anwendungen auf dem neusten Stand zu halten gehört allerdings seit ich die Anleitung für ein Update von GitLab gesehen habe, nicht mehr zu den Dingen, die ich jemals wieder tun möchte. Ich habe meine Projekte größtenteils von SASS befreit, für GitLab habe ich auch bereits Ersatz gefunden, und da jetzt heute oder gestern das SSL-Zertifikat für diaspora* abgelaufen ist, sehe ich es nicht mehr ein, noch für ein weiteres Jahr überhaupt noch irgendwelche Zertifikate zu erneuern, zumal der Traffic in meinem Pod die letzten zwei Jahre wirklich konstant bei Null gewesen ist.

Mein Problem ist: diaspora* ist eine Lösung für alle Eure Probleme, und trotzdem jammert Ihr nur laut auf Facebook rum, ohne einfach zu wechseln.

Ihr wollt nicht mit jeder Nase aus der Vergangenheit synchron befreundet sein? Gut! diaspora ist die Lösung.* Ihr möchtet Leuten einfach nur folgen, weil Euch nur interessiert, was sie tun, aber Freunde seid Ihr keine? Gut! diaspora ist die Lösung.* Twitter ist Euch zu scheiße geworden, weil die Einträge nicht mehr der Reihe nach angezeigt werden? Gut! diaspora ist die Lösung.* Werbung nervt und dezentrale Netzwerke sind sowieso viel besser? Gut! diaspora ist die Lösung.*

Aber wenn Ihr trotzdem noch wechseln wollt, es gibt genug aktive Pods von Leuten, die mehr Ahnung und Nerven mit Ruby-Gems haben als ich.

Ich für meinen Teil habe die längste Zeit auf meiner Seite für das dezentrale Netz geworben. Es hat sich ausgefuckfacebookt.

Hallo, Freunde! Ich bin heute noch einen weiteren Tag außerplanmäßig alleine zu Hause, bin gar nicht müde, einigermaßen gut gelaunt und habe die Erlaubnis bekommen, mir ein Spiel alleine angucken zu dürfen, auf das ich schon einige Zeit ganz wild bin.

Seit ich bei der Kickstarter-Kampagne mitgemacht habe, gab es schon eine oder zwei Vorab-Versionen, aber nicht für den Pledge, den ich zugesichert hatte, also hat es bis jetzt gedauert, dass ich auch endlich eine Version zwischen die Pfoten kriegen konnte und mich nicht nur mit den regelmäßigen Streams und GIF-Screenshots auf Tumblr zufriedengeben musste.

Also nichts wie ran an die Windows-8.1-Maschine (ja, ich weiß, is' ja schon voll alt!, aber meine Meinung zu Windows 10 interessiert an dieser Stelle einfach niemanden) und los geht's!

Eine Maus im Labyrinth

Ich weiß schon gar nicht mehr, wie ich auf das Spiel gekommen war. Direkt auf Kickstarter? Ne. Muss davor gewesen sein. Bei Twitter? Tumblr? Ich bin einfach irgendwann drüber gestolpert.

Worum geht's? Parkitect! Fuck yeah!

Nun, unterm Strich ist es Roller Coaster Tycoon. Roller Coaster Tycoon 3, so, wie es hätte werden müssen.

Um mir einen Eindruck von dem zu machen, was ich da mit meinem hart! verdienten! Cash! unterstützt habe (nicht, dass ich Zweifel hätte, dass das Projekt in die richtige Richtung geht - die Entwickler sind unglaublich offen und teilen alles, was abgeht - und Bugs sind die schönsten Dinge bei diesem Prozess), hab ich mich hingesetzt und ein ganzes (Im-Spiel-)Jahr gespielt. Es gibt eine vollständige Aufzeichnung davon (uncut! collector's edition!), und eigentlich ist es auch schon der zweite Versuch, weil beim ersten Mal Aufzeichnen mir der Akku meiner Maus leergelaufen ist und ich gedacht habe, das Spiel hätte einen verdammten Bug!! Argh!!.

Ignoriert einfach mal, dass ich den Park total scheiße gewirtschaftet habe, aber irgendwie war es auch sehr entspannend, mal nicht konstant aufs Geld gucken zu müssen. So ein bisschen Semi-Sandbox. Voll entspannt.

Wenn sich jemand dieses Video von vorne bis hinten komplett ansieht, hat der echt nichts Besseres zu tun.

52 unkommentiertes, rohes Gameplay.

* Minuten

holy fuck

warum unkommentiert

Vielleicht hätte ich nicht meinen Rechner sondern den von Tik nehmen sollen -.-

lets play mit dem fuchs



Das Problem ist eigentlich, dass beide Rechner extrem laut sind und tierisch rauschen.

Das versaut einem die Sprachaufnahme schon ein bisschen.

Okay, ich sag Dir was. Wenn ich irgendwas zu dem Video zu hören kriege, dann entscheide ich mich das nächste Mal dazu, Mikrophon noch mit aufzuzeichnen.

Und mir vielleicht mehr Mühe zu geben.


Okay, hätten wir das auch geklärt.

Überall durstige Menschen

Es gibt super-viele nützliche Werkzeuge, die ich so aus keinem anderen Spiel kenne, zum Beispiel die Übersicht, wie die Stimmung so im Park ist, die ganzen Statistiken über Achterbahnen und natürlich die Aktivitätsspur von Besuchern. Wahnsinn.

Das Spiel hat natürlich noch Mängel und Probleme - es ist ganz offensichtlich, dass ich nicht damit klarkam, Dekoration vom Raster losgelöst platzieren, aber nur in 90°-Schritten drehen, zu können -, aber das ist eine der ersten "weit" verfügbaren Versionen, also darf das - vor allem auf meinem Rechner - noch etwas unsauber laufen. Aber was soll ich sagen - es macht Spaß. Ich bereue nichts! Harr harr!

Schon jetzt mit dem eher eingeschränkten Inhalt gibt es unglaublich viele Augenblicke, bei denen ich lachen oder zumindest schmunzeln musste (48:05). So viele kleine, pfiffige Details (wie zum Beispiel die ganzen durstigen und hungrigen Zombies, weil ich offenbar nicht verstanden habe, wie man Imbissstände strategisch platziert).

Ich hab hier mal ein paar Screenshots von ganz am Ende des Videos eingefügt, schön sauber JPG-kaputtkomprimiert, weil mich Google sonst hasst. Leider ist mir beim Spielen komplett entfallen, dass ich während des Spielens Bilder machen wollte, so gefesselt hat es mich doch.

Ich will auch was von der Zuckerwatte!

Viel gibt es jetzt an dieser Stelle auch nicht zu sagen. Es ist wirklich ganz klassisches Gameplay. Ich hab bisweilen Probleme gehabt, alles richtig erkennen zu können (gerade beim Bau von Achterbahnen kritisch) und hätte mir eine frei rotierbare Kamera gewünscht. Vielleicht gibt's die auch schon und ich bin einfach zu blöd, in die Hilfe zu gucken.

Und naja, das Spiel könnte insgesamt noch runder laufen. Optisch macht es wegen fehlendem Inhalt noch nicht viel her, aber das gibt sich. Aber wenn Parks größer werden und mehr Besucher rumlaufen, werd' ich an meiner Kiste bald ein Problem bekommen. Und eigentlich will ich nicht die Qualität noch niedriger stellen. Meine schönen Pixels! Die Shaders!

Ich sag Euch was - ich komme wieder. Also, ich werde mir das Spiel später noch mal für das Blog ansehen, wenn es mehr Inhalt, Sounds (das Video ist sehr still), Musik und so weiter gibt.

4/5, auf dem besten Weg zum voll fiesen Zeitfresser.

Hallo, Freunde! Ich liege zwar schon im Bett, bin müde, vollgefressen und matsche im Kopf, weil es immer noch so unfassbar warm ist, sogar noch um die Uhrzeit, aber ich möchte es mir nicht nehmen lassen, gerade noch das eine oder andere Wort über meine ganz jüngste Aktivität zu verlieren, selbst, wenn ich den Artikel erst morgen oder so veröffentliche, weil ich zunächst noch wie sonst auch meinen grob runtergeschriebenen Artikel mit Links und Verweisen und cleveren Gags spicken muss.

Um mir die Zeit ein wenig zu vertreiben, nachdem ich erst neulich einen Pull request in einem Projekt, das ich mal durch eine Stöberei nach gut gebauten XMPP-Clients entdeckt und sofort unterstützt habe, durchgeboxt bekommen habe, und etwas Anderes zu machen als die letzte Woche, war ich im Play Store unterwegs, und offenbar ploppen gerade wieder diese witzigen Kombiniere-zwei-Dingse-miteinander-um-neue-Dingse-zu-entdecken-Spiele hoch, von denen es ja nun wirklich eigentlich schon genug geben sollte (Achtung, Links führen alle zum Google Play Store, weil ich kein iGerät habe), sah mir eines der am wenigsten abstoßenden an und deinstallierte sie nach fünf Minuten sofort wieder. Was war passiert?

Also, erst mal mag ich es nicht, wenn diese Spiele so aussehen, als hätte jemand zu jedem Begriff das erste Ergebnis bei der Google Bilder-Suche genommen, grob mit einem weichen Radiergummi freigestellt und gnadenlos unbearbeitet in das Spiel gedonnert, als wären Urheberrechte das kleinste Problem dabei. Dann könnte man sich ja ruhig ein bisschen mehr Mühe geben als die gesamte App einfach automatisiert von der Bing-Übersetzung in Deutsch, Portugiesisch und Esperanto umschreiben zu lassen. Und bitte, wenn Ihr eine App baut, dann baut sie doch so, dass ich nicht das Gefühl habe, dass ich mir gerade das erste Projekt eines Mediengestalter-Azubis angucke, der gerade so aus der Twitter-Bootstrap-Doku rauskopieren konnte, wie man einen hippen Jumbotron baut. Wenn ich's schon mit HTML und Javascript mache, dann doch bitte direkt als Internetseite. Wirklich. Echt jetzt mal. Was ist los mit Euch?

Darauf jetzt meine Antwort: Chemiker! Ja, wirklich. Ich hab's selbst noch mal implementiert. Für Desktop und Telefone mit Berührungsängsten. Die Technik ist soweit schon fertig. Das letzte wirklich wichtige Thema für mich ist eigentlich nur noch der Spielstand. Und vielleicht eine Liste mit allen entdeckten Elementen, damit man sich selber total groß und mächtig fühlen und einen Gottkomplex entwickeln kann. Und, naja, optisch geht da noch einiges. Aber alles Andere funktioniert schon. Und diese unaufgeräumte Tech-Demo ist jetzt schon besser als viele Apps im App Store. Also. Bis auf einen einzigen, winzigen Punkt.

Ein dezentes Bildschirmphoto von Chemiker auf meinem hippen Smartphone

Und da kommt jetzt der Punkt, in dem ich von jedem von Euch Hilfe brauche. Chemiker braucht Inhalt. Wir haben einfach nicht mal eben 600 Elemente am Start. Und das sieht folgendermaßen aus: Chemiker hat eine Liste mit Elementen. Elemente können einen Namen in verschiedenen Sprachen haben. Aktuell pflege ich Deutsch und Englisch direkt ein, wegen der Nachhaltigkeit mit dem erfrischenden Style. Elemente können entstehen, wenn bestimmte Fusionen angefragt werden. Eine Fusion kann in diesem Fall (also im Fall Chemiker) nicht nur aus zwei, sondern aus mehreren Elementen bestehen, also auch drei oder vier Elementen gleichzeitig. Mehr als vier gingen auch, aber davon rate ich dann doch eher ab. Und das ist auch schon alles. Wenn eine Fusion erfragt wird, bei der eines oder mehrere Elemente entstehen, werden diese entdeckt. Der Clue: Ich kann schon Elemente einpflegen, die bei einer Fusion von Elementen, die noch gar nicht im Chemiker existieren, entstehen. So gibt es zur Zeit schon das Element Bier, das bei der Fusion von Wasser, Hopfen und Hefe entstünde, aber weder Hopfen noch Hefe wurden bisher definiert.

Womit Ihr mir also helfen könnt: Ihr schlagt mir Elemente vor. Mitsamt Ihrer Fusion(en), natürlich. Asche zum Beispiel könnte nicht nur bei der Verbrennung von Kohle oder Menschen entstehen. Auf jedem Kanal. E-Mail, Twitter, Chat. Alles geht. Vielleicht mach ich sogar ein Forum dafür auf, weil ich total durch bin. Ich nehme alles. Ich nehme auch andere Vorschläge, Fragen zum Projekt und Fehlerreporte entgegen. Gebt mir alles, was Ihr habt! Wenn Ihr außerdem noch halbwegs gut mit SVG Bilder machen könnt oder jemanden kennt, der jemanden gekannt hat, dann meldet Euch bitte auch bei mir. Jedes neue Element braucht ein hübsches Bild und je mehr Leute mitmachen, desto besser wird es.

Das könnte geil werden. Ich hoffe es zumindest. Oder wünsche es mir. Zu Weihnachten und Ostern zusammen.

Ich kann Euch nur versprechen, mit Eurem Input zu arbeiten, das Spiel bestmöglich umzusetzen und werbefrei zu halten. Vor Mikrotransaktionen müsst Ihr auch keine Angst haben.

Übrigens, wo wir vorhin von Spielständen sprachen. Ihr wisst vielleicht, dass meine beste Option dafür der localStorage ist, und dass dieser Speicherplatz nicht nur begrenzt, sondern auch non-permanent (wie Euer Deo) ist. Die beste Möglichkeit wäre jetzt natürlich, einen Login für Euren Spielstand zu basteln. Dann liegen Eure Entdeckungen in der Cloud. Ich bin mir aber nicht sicher, wie viele Besucher das wirklich cool finden, aber vielleicht cooler als ein Zombie-Cookie, mit dem ich Besucher halbwegs eindeutig, wenn auch nicht vollständig zuverlässig, zuordnen könnte. Das ist halt der Nachteil gegenüber Apps. Versteh' schon. Was meint Ihr?