GoL 🔗

    I have always found simulations exciting. While the Game of Life is a shallow simulation it is fun how fast you can stand it up. In the old days I would always standup a language and create a Rock Paper Scissors game to prove some minor competency. Now its GoL, I like having to build an animation or a statistics engine. What has gotten to me these days is the scale of GoL and then injecting new rules.

    Distributed 🔗

    So one of the things about distribution I am excited about is the noise from eventual consistency. In a traditional GoL we have what I refer to as the World nothing more than a matrix of state that is roughly binary, alive or dead.

    The world is prepopulated with a seed, some intentional or random spattering of alive to get the whole thing started.

    Skipping the rules now we extend each cell in our matrix from a binary to a stateful object. Maybe they have names now like "bert" and "harry". They can have progeny and a history.

    Time series and geneology 🔗

    My first thought was I could track this history using a timeseries db, and even attempted to build on in ERLang. But then I realized I could probably make that a little more interesting if I did it with something distributed like NATS or Kafka.

    Phase 1 🔗

    So the first phase here is to introduce only a distributed World that can be queried from a compacted topic. Creating some form of client SDK to observe the world graph

    Phase 2 🔗

    Unbound the graph, focusing only on neighborhoods and seeing if I can just query within a contiguous window of the simulation so I could have different views of the same simulation running at the same time.

    Phase 3 🔗

    Heredity, try and see if I can trace the lineage of a cell through this process of events and a graph datastore to add new rules to the game as a cells heredity expands.