mastouille.fr est l'un des nombreux serveurs Mastodon indépendants que vous pouvez utiliser pour participer au fédiverse.
Mastouille est une instance Mastodon durable, ouverte, et hébergée en France.

Administré par :

Statistiques du serveur :

596
comptes actifs

#thingumbrella

0 message0 participant0 message aujourd’hui
Karsten Schmidt<p>There's a whole bunch of recent <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> updates which I still have to write about, but one of the things is the reworked, improved and more customizable optical flow (aka <a href="https://thi.ng/pixel-flow" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/pixel-flow</span><span class="invisible"></span></a> package). The visualization in this test video is showing it in action via color-coded overlaid flow field vectors (once again worst-case scenario for video compression, let's see how it comes out [or not...])</p><p><a href="https://mastodon.thi.ng/tags/OpticalFlow" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OpticalFlow</span></a> <a href="https://mastodon.thi.ng/tags/DataViz" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DataViz</span></a> <a href="https://mastodon.thi.ng/tags/Visualization" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Visualization</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.thi.ng/tags/Video" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Video</span></a></p>
Karsten Schmidt<p>Various thi.ng updates, bug fixes, additions and new version of <a href="https://github.com/thi-ng/zig-thing/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">github.com/thi-ng/zig-thing/</span><span class="invisible"></span></a> — now fully compatible with current Zig v0.14.1</p><p>On a more diary/devlog note: I also updated several of my Zig based work-in-progress art pieces to the latest version (some of them not touched in 2+ years) and it's so good to see how the <a href="https://thi.ng/wasm-api" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/wasm-api</span><span class="invisible"></span></a> toolchain has been holding up with various breaking Zig changes and also how this setup simplifies creating hybrid Zig/TypeScript projects (e.g. for using DOM/WebGL from Zig). Related, I also want to mention once more the <a href="https://mastodon.thi.ng/tags/GenArtAPI" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenArtAPI</span></a> Zig WebAssembly bindings[1] (updated a few weeks ago), which add another layer of flexibility &amp; boilerplate reduction for generative/procedural/algorithmic art projects...</p><p>I will be attempting yet another few takes creating a video overview &amp; mini-workshop/tutorial about <a href="https://thi.ng/genart-api" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/genart-api</span><span class="invisible"></span></a>, hopefully also touching on these aspects...</p><p>[1] <a href="https://github.com/thi-ng/genart-api/tree/main/packages/wasm" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/thi-ng/genart-api/t</span><span class="invisible">ree/main/packages/wasm</span></a></p><p><a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/Zig" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Zig</span></a> <a href="https://mastodon.thi.ng/tags/Ziglang" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Ziglang</span></a> <a href="https://mastodon.thi.ng/tags/WebAssembly" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebAssembly</span></a> <a href="https://mastodon.thi.ng/tags/WASM" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WASM</span></a> <a href="https://mastodon.thi.ng/tags/GenArtAPI" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenArtAPI</span></a> <a href="https://mastodon.thi.ng/tags/Art" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Art</span></a> <a href="https://mastodon.thi.ng/tags/GenerativeArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenerativeArt</span></a> <a href="https://mastodon.thi.ng/tags/AlgorithmicArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>AlgorithmicArt</span></a></p>
Karsten Schmidt<p>Recently I've combined various functions which I've been using in other projects (e.g. my personal PKM toolchain) and published them as new library <a href="https://thi.ng/text-analysis" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/text-analysis</span><span class="invisible"></span></a> for better re-use:</p><p>- customizable, composable &amp; extensible tokenization (transducer based)<br>- ngram generation<br>- Porter-stemming &amp; stopword removal<br>- vocabulary (bi-directional index) creation<br>- dense &amp; sparse multi-hot vector encoding/decoding<br>- histograms (incl. sorted versions)<br>- tf-idf (term frequency &amp; inverse document frequency), multiple strategies<br>- k-means clustering (with k-means++ initialization &amp; customizable distance metrics)<br>- similarity/distance functions (dense &amp; sparse versions)<br>- central terms extraction</p><p>The attached code example (also in the project readme) uses this package to creeate a clustering of all ~210 <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> packages, based on their assigned tags/keywords...</p><p>The library is not intended to be a full-blown NLP solution, but I keep on finding myself running into these functions/concepts quite often, and maybe you'll find them useful too...</p><p><a href="https://mastodon.thi.ng/tags/Text" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Text</span></a> <a href="https://mastodon.thi.ng/tags/Analysis" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Analysis</span></a> <a href="https://mastodon.thi.ng/tags/Cluster" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Cluster</span></a> <a href="https://mastodon.thi.ng/tags/KMeans" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>KMeans</span></a> <a href="https://mastodon.thi.ng/tags/TFIDF" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TFIDF</span></a> <a href="https://mastodon.thi.ng/tags/Ngram" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Ngram</span></a> <a href="https://mastodon.thi.ng/tags/Vector" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Vector</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.thi.ng/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a></p>
Karsten Schmidt<p><a href="https://mastodon.thi.ng/tags/ReleaseTuesday" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ReleaseTuesday</span></a> — New version of <a href="https://thi.ng/tsne" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/tsne</span><span class="invisible"></span></a> with ~15-20% better performance[1] due to avoiding repeated internal allocations and skipping gradient updates where unnecessary...</p><p>[1] Benchmarked with multiple datasets of ~750 items, each with 192 dimensions (now ~165ms @ MBA M1, 2020)...</p><p><a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/TSNE" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TSNE</span></a> <a href="https://mastodon.thi.ng/tags/DataViz" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DataViz</span></a> <a href="https://mastodon.thi.ng/tags/Visualization" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Visualization</span></a> <a href="https://mastodon.thi.ng/tags/ML" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ML</span></a> <a href="https://mastodon.thi.ng/tags/Cluster" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Cluster</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.thi.ng/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a></p>
Karsten Schmidt<p><a href="https://mastodon.thi.ng/tags/ReleaseWednesday" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ReleaseWednesday</span></a> — Extracted &amp; extended the LISP-like DSL from an existing <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> example[1] as new small package for better/direct re-use in other projects:</p><p><a href="https://thi.ng/lispy" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/lispy</span><span class="invisible"></span></a></p><p>The core language is kept intentionally minimal, aimed at simple sandboxed data transformations/derivations, small code snippets/expressions in GUIs or config settings. However, the language is very easy to extend/customize with new functions or control flow constructs etc. Currently, the language is interpreted and has the following builtins (see screenshots). There's no macro support so far (and not sure if that's even desired here)...</p><p>[1] The original <a href="https://mastodon.thi.ng/tags/HowToThing" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HowToThing</span></a> example browser REPL this was extracted from (and which has now been updated to use the new package):</p><p><a href="https://demo.thi.ng/umbrella/lispy-repl/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/lispy-rep</span><span class="invisible">l/</span></a><br> <br><a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/Lisp" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Lisp</span></a> <a href="https://mastodon.thi.ng/tags/DSL" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DSL</span></a> <a href="https://mastodon.thi.ng/tags/FunctionalProgramming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FunctionalProgramming</span></a> <a href="https://mastodon.thi.ng/tags/REPL" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>REPL</span></a></p>
Karsten Schmidt<p>Accidental atmospheric Rayleigh scattering (<a href="https://en.wikipedia.org/wiki/Rayleigh_scattering" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">en.wikipedia.org/wiki/Rayleigh</span><span class="invisible">_scattering</span></a>) — feels like sunrise from ~50secs...</p><p><a href="https://mastodon.thi.ng/tags/Umbra" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Umbra</span></a> <a href="https://mastodon.thi.ng/tags/Art" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Art</span></a> <a href="https://mastodon.thi.ng/tags/GenerativeArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenerativeArt</span></a> <a href="https://mastodon.thi.ng/tags/Gradients" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Gradients</span></a> <a href="https://mastodon.thi.ng/tags/Color" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Color</span></a> <a href="https://mastodon.thi.ng/tags/Rec2020" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Rec2020</span></a> <a href="https://mastodon.thi.ng/tags/Video" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Video</span></a> <a href="https://mastodon.thi.ng/tags/Animation" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Animation</span></a> <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/ShaderAST" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ShaderAST</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a></p>
Karsten Schmidt<p><a href="https://mastodon.thi.ng/tags/Umbra" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Umbra</span></a></p><p>(Revisiting an unoptimized old code sketch, semi-fluid screen recording only... Love the contrast between soft gradients and hard edges and the unexpected emergence of shapes [and their disappearance]...)</p><p>(Made with <a href="https://thi.ng/shader-ast" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/shader-ast</span><span class="invisible"></span></a>)</p><p><a href="https://mastodon.thi.ng/tags/Art" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Art</span></a> <a href="https://mastodon.thi.ng/tags/GenerativeArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenerativeArt</span></a> <a href="https://mastodon.thi.ng/tags/Gradients" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Gradients</span></a> <a href="https://mastodon.thi.ng/tags/Color" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Color</span></a> <a href="https://mastodon.thi.ng/tags/Rec2020" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Rec2020</span></a> <a href="https://mastodon.thi.ng/tags/Video" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Video</span></a> <a href="https://mastodon.thi.ng/tags/Animation" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Animation</span></a> <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/ShaderAST" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ShaderAST</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a></p>
Karsten Schmidt<p>More <a href="https://mastodon.thi.ng/tags/Actiniaria" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Actiniaria</span></a> progress: Added a soft global constraint to create more of a (macro)organism feel w/ a sense of belonging and fuzzy boundary. Also slowly updating the behavior/relationship matrix between the six different types now, to create varying temporary alliances...</p><p>(Note: Sadly Firefox doesn't respect the Rec2020 color profile in the video, please download or use Chrome or Safari for viewing...)</p><p><a href="https://mastodon.thi.ng/tags/GenerativeArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenerativeArt</span></a> <a href="https://mastodon.thi.ng/tags/AlgorithmicArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>AlgorithmicArt</span></a> <a href="https://mastodon.thi.ng/tags/NoAI" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>NoAI</span></a> <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/Boids" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Boids</span></a> <a href="https://mastodon.thi.ng/tags/Color" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Color</span></a> <a href="https://mastodon.thi.ng/tags/Video" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Video</span></a> <a href="https://mastodon.thi.ng/tags/Animation" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Animation</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.thi.ng/tags/WebGL" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebGL</span></a></p>
Karsten Schmidt<p><a href="https://mastodon.thi.ng/tags/ReleaseSaturday" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ReleaseSaturday</span></a> — Just added 35 new color palettes (255 in total now) to <a href="https://thi.ng/color-palettes" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/color-palettes</span><span class="invisible"></span></a>. All of these are based on images and dominant colors have been extracted via this tool below and then partially hand edited. The SVG swatches were generated via a custom tool (included in the project repo). </p><p>The package provides accessors for obtaining themes as CSS hex colors, RGB or LCH tuples. Themes can also be programmatically selected/filtered by a number of composable criteria (examples in the readme)... </p><p><a href="https://demo.thi.ng/umbrella/dominant-colors/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/dominant-</span><span class="invisible">colors/</span></a></p><p><a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/Color" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Color</span></a> <a href="https://mastodon.thi.ng/tags/OpenSource" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OpenSource</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.thi.ng/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.thi.ng/tags/SVG" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SVG</span></a></p>
Karsten Schmidt<p>Found some time last night to implement multi-behaviors and I'm very excited about where this is going... 😍 The video shows 6 different types interacting with (and avoiding) each other. Next step is to vary the behavior matrix over time, causing changing alliances and breakup behaviors...</p><p>See <a href="https://mastodon.thi.ng/tags/Actiniaria" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Actiniaria</span></a> for more context...</p><p>(Note: Sadly Firefox doesn't respect the Rec2020 color profile in the video, please download or use Chrome or Safari for viewing...)</p><p><a href="https://mastodon.thi.ng/tags/GenerativeArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenerativeArt</span></a> <a href="https://mastodon.thi.ng/tags/AlgorithmicArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>AlgorithmicArt</span></a> <a href="https://mastodon.thi.ng/tags/NoAI" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>NoAI</span></a> <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/Boids" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Boids</span></a> <a href="https://mastodon.thi.ng/tags/Color" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Color</span></a> <a href="https://mastodon.thi.ng/tags/Video" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Video</span></a> <a href="https://mastodon.thi.ng/tags/Animation" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Animation</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.thi.ng/tags/WebGL" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebGL</span></a></p>
Karsten Schmidt<p><a href="https://mastodon.thi.ng/tags/ReleaseWednesday" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ReleaseWednesday</span></a> 🚀 — I wonder how many other FLOSS devs are sitting on code for ~8 years prior to first release... In one of these cases (many others readily available in my stash 🙃), triggered by recent major updates to the thi.ng/vectors library, I've refactored (almost 100% rewritten) and applied the same approach to the new/old package:</p><p><a href="https://thi.ng/tensors" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/tensors</span><span class="invisible"></span></a></p><p>This package provides 1D/2D/3D/4D tensors, supporting different storage implementations (currently still all CPU side only) and an extensible set of polymorphic tensor operations (currently ~45 math ops, incl. matrix-matrix/matrix-vector products, reductions, argmin/max, activation functions etc.). The tensor classes themselves also provide several zero-copy slicing, re-ordering, clipping, extraction functions, most of them type-safe.</p><p>The original (private) version was heavily reliant on dynamic code generation, which has now been replaced with higher-order functions to provide various dimension-optimized versions of all operations.</p><p>This package is NOT specifically aimed at machine learning, even though it could probably used for some tasks in that realm (likely with extra hand holding). There are many other use cases for this kind of data structure...</p><p>Also new in other packages in this release cycle (incl. some code examples):</p><p>- <a href="https://docs.thi.ng/umbrella/arrays/functions/permutation.html" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">docs.thi.ng/umbrella/arrays/fu</span><span class="invisible">nctions/permutation.html</span></a><br>- <a href="https://docs.thi.ng/umbrella/bidir-index/functions/decodeObjectIterator.html" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">docs.thi.ng/umbrella/bidir-ind</span><span class="invisible">ex/functions/decodeObjectIterator.html</span></a><br>- <a href="https://docs.thi.ng/umbrella/transducers/functions/binned.html" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">docs.thi.ng/umbrella/transduce</span><span class="invisible">rs/functions/binned.html</span></a></p><p><a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.thi.ng/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.thi.ng/tags/Tensor" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Tensor</span></a> <a href="https://mastodon.thi.ng/tags/OpenSource" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OpenSource</span></a></p>
Karsten Schmidt<p>Today it's already 3 weeks since the opening of "The Story Never Ends" exhibition at ZKM Karlsruhe, showcasing around 100 works by 75 artists from the museum's collection of 12,000 artworks, one of the largest and most important media art collections in the world (since the 1950s).</p><p>Due to the stress of the recent weeks, I've completely missed posting more pictures of my piece on display there (De/Frag, 2021). It's a custom site-specific version which will keep changing/evolving non-stop for the next 5 months (until the end of the show in late September). The pictures attached are by Clara Runge, the curator of the show. Thank you! 🙏🤩</p><p><a href="https://zkm.de/en/2025/04/the-story-that-never-ends" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">zkm.de/en/2025/04/the-story-th</span><span class="invisible">at-never-ends</span></a></p><p>A plea: If you happen to go to ZKM and get to see the piece, please do take &amp; post some pictures — I'm very keen to see snapshots over time (so far I've only had it running for a few weeks, but never for months on end...)</p><p>More info about the piece and images also here in this thread:<br><a href="https://mastodon.thi.ng/@toxi/114245042903764105" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11424504</span><span class="invisible">2903764105</span></a></p><p><a href="https://mastodon.thi.ng/tags/Art" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Art</span></a> <a href="https://mastodon.thi.ng/tags/GenerativeArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenerativeArt</span></a> <a href="https://mastodon.thi.ng/tags/AlgorithmicArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>AlgorithmicArt</span></a> <a href="https://mastodon.thi.ng/tags/ZKM" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ZKM</span></a> <a href="https://mastodon.thi.ng/tags/Exhibition" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Exhibition</span></a> <a href="https://mastodon.thi.ng/tags/Karlsruhe" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Karlsruhe</span></a> <a href="https://mastodon.thi.ng/tags/DeFrag" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DeFrag</span></a> <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a></p>
Karsten Schmidt<p>Added a new convenience transducer for clipping and binning values, e.g. as preparation step for histogram generation whilst working in the REPL. New release forthcoming. A small code example attached (actually taken from the doc string of the new `binned()` transducer).</p><p><a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/Transducers" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Transducers</span></a> <a href="https://mastodon.thi.ng/tags/FunctionalProgramming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FunctionalProgramming</span></a> <a href="https://mastodon.thi.ng/tags/ASCIIArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ASCIIArt</span></a> <a href="https://mastodon.thi.ng/tags/DataViz" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DataViz</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.thi.ng/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a></p>
Karsten Schmidt<p>Similar to my <a href="https://mastodon.thi.ng/tags/LinearMemory" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>LinearMemory</span></a> piece from last year (check the hashtag for references), these current <a href="https://mastodon.thi.ng/tags/Actiniaria" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Actiniaria</span></a> explorations make me fully appreciate all the research, efforts and supporting hardware behind the DCI-P3 &amp; Rec.2020 color spaces. The intensity (and subtlety) of some colors &amp; combinations are just stunning (to me), and I don't mean this in any ableist way (just enjoying whilst I still can!)...</p><p>Also still amazed that something like this runs at a smooth 60fps @ 2160x2160 UHD resolution on a mobile device with a just Snapdragon 2 chipset... As part of my advisory role @ day job, over the past few months I've been tasked with optimizing artworks for almost a dozen generative/algorithmic artists, often achieving 2-4x framerate improvements... Very much feeling a longer blog post re: code craft vs code art coming up, hoping to connect them more...</p><p>"To understand a program you must become both the machine and the program." — Alan Perlis</p><p>(Note: Sadly Firefox does not seem to respect the Rec2020 color profile in the video, please download or use Chrome or Safari for viewing...)</p><p><a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/GenerativeArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenerativeArt</span></a> <a href="https://mastodon.thi.ng/tags/AlgorithmicArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>AlgorithmicArt</span></a> <a href="https://mastodon.thi.ng/tags/NoAI" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>NoAI</span></a> <a href="https://mastodon.thi.ng/tags/Boids" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Boids</span></a> <a href="https://mastodon.thi.ng/tags/Color" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Color</span></a> <a href="https://mastodon.thi.ng/tags/Video" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Video</span></a> <a href="https://mastodon.thi.ng/tags/Animation" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Animation</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.thi.ng/tags/WebGL" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebGL</span></a></p>
Karsten Schmidt<p>Been working on various shader &amp; behavior update and options for <a href="https://mastodon.thi.ng/tags/Actiniaria" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Actiniaria</span></a>... it's all starting to come together! 🤩</p><p>(Note: Sadly Firefox does not seem to respect the Rec2020 color profile in the video, please use Chrome or Safari for viewing...)</p><p><a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/GenerativeArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenerativeArt</span></a> <a href="https://mastodon.thi.ng/tags/AlgorithmicArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>AlgorithmicArt</span></a> <a href="https://mastodon.thi.ng/tags/NoAI" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>NoAI</span></a> <a href="https://mastodon.thi.ng/tags/Boids" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Boids</span></a> <a href="https://mastodon.thi.ng/tags/Color" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Color</span></a> <a href="https://mastodon.thi.ng/tags/Video" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Video</span></a> <a href="https://mastodon.thi.ng/tags/Animation" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Animation</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.thi.ng/tags/WebGL" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebGL</span></a></p>
Karsten Schmidt<p>Tomodashi's (<span class="h-card" translate="no"><a href="https://dialup.cafe/@vga256" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>vga256</span></a></span>) design philosophy so much resonates with my own, even if my reality/interests and having roots in different social &amp; technological environments/communities sometimes still causes friction/confusion/dilution of principles — it's all a process, an ongoing dismantling &amp; rebuilding, and the path has become more clear over the past 5-10 years... thi.ng plays a major part (and stepping stones) for me in that context and very much shares the same principles laid out further below.</p><p><a href="https://tomodashi.com/philosophy" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">tomodashi.com/philosophy</span><span class="invisible"></span></a></p><p>"The sub-Arctic regions of the Canadian Northwest Territories have many communities of fishers, hunters and trappers who live off the land with simple and effective tools. When technology breaks down in the north, there isn't a tech support number to call, or dealership or mechanic to take it to. You're on your own.</p><p>This encourages you to care for your tools, and make repairs using whatever knowledge and resources you have on hand. People who live on the land only take with them what they can maintain, upgrade and repair themselves. Big, complex, fragile, expensive, high-performance, high-maintenance stuff is left at drydock.</p><p>The elders of the far north teach us that these human-sized and human-shaped tools are extensions of who we are. To care for one's tools is to care for one's community, and oneself. These are not separate things.</p><p>That is the key to the Tomodashi design philosophy.</p><p>Principles</p><p>All Tomodashi software is crafted with these four related ideas in mind:</p><p>1. Human-sized things are friendlier, more economical, and easier to learn.<br>2. The user is both a creator of things and a playful being.<br>3. Let people personalize, modify, and repair their toys and tools.<br>4. Imperfect creations feel more human, serene and beautiful.</p><p>When human qualities and self-expression become the focus of software engineering - whether it's a game or a programming tool or an IDE - all other arguments about programming and software design become moot"</p><p>❤️❤️❤️</p><p><a href="https://mastodon.thi.ng/tags/Technology" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Technology</span></a> <a href="https://mastodon.thi.ng/tags/SoftwareCraft" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SoftwareCraft</span></a> <a href="https://mastodon.thi.ng/tags/HumanCentredDesign" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HumanCentredDesign</span></a> <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a></p>
Karsten Schmidt<p>Slowly narrowing down color choices... Here's a contact sheet of some more theme candidates. Still going through a few hundred more I've pre-selected so far, and these ones here are all using the same background color...</p><p><a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/GenerativeArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenerativeArt</span></a> <a href="https://mastodon.thi.ng/tags/AlgorithmicArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>AlgorithmicArt</span></a> <a href="https://mastodon.thi.ng/tags/NoAI" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>NoAI</span></a> <a href="https://mastodon.thi.ng/tags/Boids" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Boids</span></a> <a href="https://mastodon.thi.ng/tags/Color" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Color</span></a></p>
Karsten Schmidt<p>Btw. Here're some more collected links to earlier experiments/stages of development (from the last 1.5 years) — If anything, this all is yet another example of my personal slow-cook art-making/revisiting approach... 😅</p><p>SDF obstacles (static &amp; animated):<br><a href="https://mastodon.thi.ng/@toxi/111698367393819716" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11169836</span><span class="invisible">7393819716</span></a><br><a href="https://mastodon.thi.ng/@toxi/111698918722774094" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11169891</span><span class="invisible">8722774094</span></a></p><p>Path attraction/following:<br><a href="https://mastodon.thi.ng/@toxi/111704122960594951" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11170412</span><span class="invisible">2960594951</span></a><br><a href="https://mastodon.thi.ng/@toxi/111704168442616187" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11170416</span><span class="invisible">8442616187</span></a></p><p>Boids vs. Voronoi:<br><a href="https://mastodon.thi.ng/@toxi/111720368699392895" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11172036</span><span class="invisible">8699392895</span></a></p><p>Visualizing motion/direction vectors:<br><a href="https://mastodon.thi.ng/@toxi/111688835639715011" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11168883</span><span class="invisible">5639715011</span></a></p><p><a href="https://mastodon.thi.ng/tags/HowToThing" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HowToThing</span></a> mini tutorial:<br><a href="https://mastodon.thi.ng/@toxi/111308439597090930" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11130843</span><span class="invisible">9597090930</span></a></p><p><a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/GenerativeArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenerativeArt</span></a> <a href="https://mastodon.thi.ng/tags/AlgorithmicArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>AlgorithmicArt</span></a> <a href="https://mastodon.thi.ng/tags/NoAI" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>NoAI</span></a> <a href="https://mastodon.thi.ng/tags/Boids" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Boids</span></a> <a href="https://mastodon.thi.ng/tags/Color" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Color</span></a> <a href="https://mastodon.thi.ng/tags/Video" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Video</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a></p>
Karsten Schmidt<p>Work in progress...</p><p>Finally finding some time to continue working on my earlier <a href="https://thi.ng/boids" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/boids</span><span class="invisible"></span></a> experiments, now also using WebGL instancing and floating point render textures for super-smooth blending/trails to create aesthetics reminiscent of sea anemones...</p><p>(Update: I've decided on the beautiful-sounding and fitting <a href="https://mastodon.thi.ng/tags/Actiniaria" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Actiniaria</span></a> as project title...)</p><p>(Note: Sadly Firefox does not seem to respect the Rec2020 color profile in the video, please use Chrome or Safari for viewing...)</p><p><a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/GenerativeArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenerativeArt</span></a> <a href="https://mastodon.thi.ng/tags/AlgorithmicArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>AlgorithmicArt</span></a> <a href="https://mastodon.thi.ng/tags/NoAI" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>NoAI</span></a> <a href="https://mastodon.thi.ng/tags/Boids" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Boids</span></a> <a href="https://mastodon.thi.ng/tags/Color" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Color</span></a> <a href="https://mastodon.thi.ng/tags/Video" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Video</span></a> <a href="https://mastodon.thi.ng/tags/Animation" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Animation</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.thi.ng/tags/WebGL" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebGL</span></a></p>
Karsten Schmidt<p><a href="https://mastodon.thi.ng/tags/ReleaseWednesday" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ReleaseWednesday</span></a> — I just released a new version (v8.0.0) of <a href="https://thi.ng/vectors" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/vectors</span><span class="invisible"></span></a>, an almost complete rewrite of the package with all of its ~900 vector operations. I've updated the Readme with a section of _potentially_ minor breaking changes, however I expect this to be a seamless upgrade for the vast majority of users...</p><p>I've recently written more about the reasons and implications of this update and I'll refer you to those posts instead of repeating them once more (see links below).</p><p>Just the top-level changes:</p><p>- Replaced dynamic code generation with higher-order templating to be usable with strict content security policies (when deployed online)<br>- New structure allows for vast majority of functions to have doc strings (and they do now)<br>- More consistent/less confusing naming for some operations<br>- Potentially improved tree-shaking and smaller project bundle sizes</p><p>Related to this update I've also refactored and fixed some bugs in other packages (e.g. color, geom, matrices). As a result both the color &amp; matrix packages are now also free from dynamic codegen and therefore won't cause any problems with strict CSPs</p><p>Should you run into any issues regarding this update, please get in touch (also grateful for any other experience/impact reports... 🙏)</p><p>More info in these recent posts/threads:</p><p>- <a href="https://mastodon.thi.ng/@toxi/114296442006935718" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11429644</span><span class="invisible">2006935718</span></a><br>- <a href="https://mastodon.thi.ng/@toxi/114319651778770391" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11431965</span><span class="invisible">1778770391</span></a><br>- <a href="https://mastodon.thi.ng/@toxi/114336012068839250" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11433601</span><span class="invisible">2068839250</span></a></p><p>Happy coding!</p><p><a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/Vectors" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Vectors</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.thi.ng/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.thi.ng/tags/OpenSource" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OpenSource</span></a></p>