Disjoint Sets, Graph analysis & Signed Distance Fields

This is part 4 of an ongoing series introducing & discussing projects of the thi.ng/umbrella monorepo, whilst building a minigame on the side. Other parts available:

  • Part 1 — Project & series overview
  • Part 2 — HOFs, Transducers, Reducers
  • Part 3 —Convolution, 1D/2D Cellular Automata

We finished the last part with expanding our 1D cellular automata generator to two dimensions, and in this part, we will slightly refactor this and perform several post-processing steps to extract an actually usable and playable terrain from the raw CA generated pattern/grid.

A rough guide to Shroomania

The diagram below provides…


1D & 2D convolutions, functional, branchless, cellular automata

This is part 3 of an ongoing series introducing & discussing projects of the thi.ng/umbrella monorepo. Other parts:

  • Part 1 — Project & series overview
  • Part 2 — HOFs, Transducers, Reducers, ES6 iterables
  • Part 4 — Disjoint Sets, Graph analysis, Signed Distance Fields

Having covered some transducer basics and related functional programming concepts in the previous post, we are now ready to apply some of that knowledge to start creating the world for our game.

A convoluted approach to Cellular Automata

Convolutions are an interesting group of mathematical operations with many applications in audio & image processing (DSP…


A 5k-word deep look under the bonnet of Transducer Model S

This is part 2 of an ongoing series introducing & discussing projects of the thi.ng/umbrella monorepo. Other parts:

  • Part 1 — Project & series overview
  • Part 3 — Convolution, 1D/2D Cellular Automata
  • Part 4 — Disjoint Sets, Graph analysis, Signed Distance Fields

As promised last time, in this installment we shall lay the technical foundations used throughout the rest of this tutorial series, to prepare for some terraforming of Shroomania, the mini-game going to be built up here. However, the game itself is just used to contextualize these more…


In which we start delving deeper into the land of thi.ng/umbrella

This is the first chapter of an ongoing blog series, other parts available:

  • Part 2 — HOFs, Transducers, Reducers, ES6 iterables
  • Part 3 — Convolution, 1D/2D Cellular Automata
  • Part 4 — Disjoint Sets, Graph analysis, Signed Distance Fields

Once upon a time, in the cold February of the year 2018, this narrator sat by his fireplace and told of a small software device to conjure so-called user interfaces within the glowing rectangles of people’s networked screens, with nothing but the native data structures provided by any of the recent…


A purely functional approach to UI composition with ES6/TypeScript

Update 2019: Take a deeper look at this and related projects in this ongoing blog series: Of umbrellas, transducers, reactive streams & mushrooms

The ease of turning nouns into verbs is an almost unmatched feature of the English language and it’s a central tenet of what follows: The idea of turning the composition and continuous (re)creation of a user interface into a verb, an action, a process, a function.

Among UI & UX enthusiasts there never seems to be a short supply of “next generation frameworks”, promising more efficiency, simplicity and…


ClojureScript users have had the great fortune of gaining access to CSP-type concurrency ever since the announcement of the core.async library a few years ago. And whereas core.async with its channel based philosophy gives us many powerful and deeply transformative abstractions to better structure our code, in many cases it’s often essentially just been used to provide the illusion of concurrent processes in the inherently single threaded environment of the JavaScript VM. This illusion is Good Enough™ and incredibly believable for a large number of lightweight use cases (though overzealous use can have quite an impact on file size!), …


2-day introduction to fundamental generative design techniques

Without wanting to sound generalizing, my impression sometimes is that for some coders, generative design is often still relegated as only lightweight application (and skills) of programming to create fancy imagery. In the traditional designer’s camp, generative design is often still looked upon either as a weird & wonderful magic tool to quickly spew out endless variations of specific aesthetics (e.g. the ever popular randomized, “organic”/biological routes many clients so often like to ask for) or is simply used as an automation tool without ever fully wanting to embrace or deeply engage with…


The majority of Clojurescript application development and community discussions seems to be focused on improving standard UI implementation patterns and the general workflow of how we can build web applications better, easier and faster. In this respect it’s been truly amazing to observe how much has been achieved in so short time (especially over the past 2 years) and I think by now Clojurescript and the tooling enabled by it, really does offer an outstanding, simple and largely joyful web development experience. Since the language is mainly targeting the browser environment, it’s maybe also about time to become an ever…


A journey into Genetic Programming techniques with Clojure and thi.ng

Over the years, generative techniques like Cellular Automata, Diffusion-limited Aggregation, Self-organization, Reaction-Diffusion, Genetic Algorithms etc. have been playing a key role in my work and I more or less successfully managed to use them for creating form & music. For an equally long time Genetic Programming (GP short, a specialization of Genetic Algorithms) too has been on my to-do list of techniques to use for a project, yet it never seemed sufficiently suitable until about a year ago, when I received a chance email from my friends at HOLO to…


Anecdotes and questions about climbing up and down the ladder of abstraction: Atari, ARM, demoscene, education, creative coding, community, seeking lightness, enlightenment & strange languages

27 years ago I had my first encounter with a computer. Signed up by our parents to an afternoon course after school, five other 13 year olds and I had the honour to be the first children in our East-german town to touch these, to us mystical, machines & learn to program them. The hardware available to us was the glorious Robotron KC85/3, the company’s top-of-the-range model of modular (and unaffordable) home computers, and some…

thi.ng

Computational design, data, TypeScript, Clojure/script, C

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store