#HowToThing #Epilogue #LongRead: After 66 days of addressing 30 wildly varied use cases and building ~20 new example projects of varying complexity to illustrate how #ThingUmbrella libraries can be used & combined, I'm taking a break to concentrate on other important thi.ngs...
With this overall selection I tried shining a light on common architectural patterns, but also some underexposed, yet interesting niche topics. Since there were many different techniques involved, it's natural not everything resonated with everyone. That's fine! Though, my hope always is that readers take an interest in a wide range of topics, and so many of these new examples were purposefully multi-faceted and hopefully provided insights for at least some parts, plus (in)directly communicated a core essence of the larger project:
Only individual packages (or small clusters) are designed & optimized for a set of particular use cases. At large, though, thi.ng explicitly does NOT offer any such guidance or even opinion. All I can offer are possibilities, nudges and cross-references, how these constructs & techniques can be (and have been) useful and/or the theory underpinning them. For some topics, thi.ng libs provide multiple approaches to achieve certain goals. This again is by design (not lack of it!) and stems from hard-learned experience, showing that many (esp. larger) projects highly benefit from more nuanced (sometimes conflicting approaches) compared to popular defacto "catch-all" framework solutions. To avid users (incl. myself) this approach has become a somewhat unique offering and advantage, yet in itself seems to be the hardest and most confusing aspect of the entire project to communicate to newcomers.
So seeing this list of new projects together, to me really is a celebration (and confirmation/testament) of the overall #BottomUpDesign #ThingUmbrella approach (which I've been building on since ~2006): From the wide spectrum/flexibility of use cases, the expressiveness, concision, the data-first approach, the undogmatic mix of complementary paradigms, the separation of concerns, no hidden magic state, only minimal build tooling requirements (a bundler is optional, but recommended for tree shaking, no more) — these are all aspects I think are key to building better (incl. more maintainable & reason-able) software. IMO they are worth embracing & exposing more people to and this is what I've partially attempted to do with this series of posts...
ICYMI here's a summary of the 10 most recent posts (full list in the https://thi.ng/umbrella readme). Many of those examples have more comments than code...
021: Iterative animated polygon subdivision & heat map viz
https://mastodon.thi.ng/@toxi/111221943333023306
022: Quasi-random voronoi lattice generator
https://mastodon.thi.ng/@toxi/111244412425832657
023: Tag-based Jaccard similarity ranking using bitfields
https://mastodon.thi.ng/@toxi/111256960928934577
024: 2.5D hidden line visualization of DEM files
https://mastodon.thi.ng/@toxi/111269505611983570
025: Transforming & plotting 10k data points using SIMD
https://mastodon.thi.ng/@toxi/111283262419126958
026: Shader meta-programming to generate 16 animated function plots
https://mastodon.thi.ng/@toxi/111295842650216136
027: Flocking sim w/ neighborhood queries to visualize proximity
https://mastodon.thi.ng/@toxi/111308439597090930
028: Randomized, space-filling, nested 2D grid layout generator
https://mastodon.thi.ng/@toxi/111324566926701431
029: Forth-like DSL & livecoding playground for 2D geometry
https://mastodon.thi.ng/@toxi/111335025037332972
030: Procedural text generation via custom DSL & parse grammar
https://mastodon.thi.ng/@toxi/111347074558293056