dice.camp is one of the many independent Mastodon servers you can use to participate in the fediverse.
A Mastodon server for RPG folks to hang out and talk. Not owned by a billionaire.

Administered by:

Server stats:

1.8K
active users

#thingumbrella

1 post1 participant0 posts today
Karsten Schmidt<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/ReleaseTuesday" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ReleaseTuesday</span></a>... New package (initial alpha release):</p><p><a href="https://thi.ng/block-fs" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/block-fs</span><span class="invisible"></span></a> provides highly customizable &amp; extensible block-based storage with an optional hierarchical filesystem layer. This is useful everywhere you might need virtual filesystem, though the storage providers can also be used without the filesystem layer (e.g. for <a href="https://mastodon.thi.ng/tags/Forth" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Forth</span></a>-style block data/editors).</p><p>The default configuration provides:</p><p>- arbitrarily nested directories<br>- filenames (UTF-8) of max. 31 bytes per directory level<br>- max. 32 owner IDs<br>- file locking<br>- creation/modification timestamps (64 bit)<br>- efficient append writes</p><p>Currently included storage providers: TypedArray-based in-memory and host filesystem based file storage (one block per file). More are planned (e.g. IndexedDB, remote endpoint)... </p><p>The readme is currently still lacking various diagrams to illustrate the filesystem internals. I will add those ASAP...</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/FileSystem" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FileSystem</span></a> <a href="https://mastodon.thi.ng/tags/VirtualFS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>VirtualFS</span></a> <a href="https://mastodon.thi.ng/tags/BlockStorage" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>BlockStorage</span></a></p>
Karsten Schmidt<p>Just made my day: "I somehow made it to March 2025 before being aware of <a href="https://thi.ng/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/</span><span class="invisible"></span></a> - an incredible mountain of code created primarily by a prolific genius, full of ideas that are like catnip to me."</p><p>😂</p><p><a href="https://kylecordes.com/2025/typescript-html-generation-on-the-server" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">kylecordes.com/2025/typescript</span><span class="invisible">-html-generation-on-the-server</span></a></p><p>(Also, to clarify, even though thi.ng/hiccup and a small selection of other thi.ng libs started out porting concepts widely used in Clojure (the language I spent 7 years with previously), in many cases the scope, features, usability &amp; potential use cases have been far extended far beyond their "originals" and it sometimes saddens me that these are often just plainly ignored or mis-labeled/described...)</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/Clojure" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Clojure</span></a> <a href="https://mastodon.thi.ng/tags/Quote" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Quote</span></a></p>
Karsten Schmidt<p>To avoid a massive OpenCV dependency for a current project I'm involved in, I ended up porting my own homemade, naive optical flow code from 2008 and just released it as a new package. Originally this was written for a gestural UI system for Nokia retail stores (prior to the Microsoft takeover), the package readme contains another short video showing the flow field being utilized to rotate a 3D cube:</p><p><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></p><p>I've also created a small new example project for testing with either webcam or videos:</p><p><a href="https://demo.thi.ng/umbrella/optical-flow/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/optical-f</span><span class="invisible">low/</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/OpticalFlow" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OpticalFlow</span></a> <a href="https://mastodon.thi.ng/tags/ImageAnalysis" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ImageAnalysis</span></a> <a href="https://mastodon.thi.ng/tags/ComputerVision" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ComputerVision</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/ReleaseMonday" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ReleaseMonday</span></a> — One of the recent (already very useful!) new package additions to <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> is:</p><p><a href="https://thi.ng/leaky-bucket" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/leaky-bucket</span><span class="invisible"></span></a></p><p>Leaky buckets are commonly used in communication networks for rate limiting, traffic shaping and bandwidth control, but are equally useful in other domains requiring similar constraints.</p><p>A Leaky Bucket is a managed counter with an enforced maximum value (i.e. bucket capacity). The counter is incremented for each a new event to check if it can/should be processed. If the bucket capacity has already been reached, the bucket will report an overflow, which we can then handle accordingly (e.g. by dropping or queuing events). The bucket also has a configurable time interval at which the counter is decreasing (aka the "leaking" behavior) until it reaches zero again (i.e. until the bucket is empty). Altogether, this setup can be utilized to ensure both an average rate, whilst also supporting temporary bursting in a controlled fashion...</p><p>Related, I've also updated/simplified the rate limiter interceptor in <a href="https://thi.ng/server" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/server</span><span class="invisible"></span></a> to utilize this new package...</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/DataStructure" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DataStructure</span></a> <a href="https://mastodon.thi.ng/tags/RateLimiting" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RateLimiting</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></p>
Karsten Schmidt<p>Rejoice, <a href="https://mastodon.thi.ng/tags/Zig" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Zig</span></a> v0.14.0 is out and the release notes show quite a lot of nice updates... 🎉🙏 </p><p><a href="https://ziglang.org/download/0.14.0/release-notes.html" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">ziglang.org/download/0.14.0/re</span><span class="invisible">lease-notes.html</span></a></p><p>(Just hoping/bracing the build script for <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> modules isn't impacted too much, recent Zig updates caused quite a bit of rework there...)</p><p><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/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/WASM" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WASM</span></a></p>
Karsten Schmidt<p>PSA: DNS changes for thi.ng and various subdomains and aliases are currently propagating, for example:</p><p><a href="https://asm.thi.ng/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">asm.thi.ng/</span><span class="invisible"></span></a> - ARM/STM32 baremetal resources<br><a href="https://demo.thi.ng/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">demo.thi.ng/</span><span class="invisible"></span></a> - Hundreds of example projects for various thi.ng libraries<br><a href="https://dependencies.thi.ng/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">dependencies.thi.ng/</span><span class="invisible"></span></a> - Dependency graph/matrix<br><a href="https://docs.thi.ng/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">docs.thi.ng/</span><span class="invisible"></span></a> - API documentation<br><a href="https://forth.thi.ng/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">forth.thi.ng/</span><span class="invisible"></span></a> - Online Forth REPL[1] (also check out other shader examples from the <a href="https://thi.ng/charlie" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/charlie</span><span class="invisible"></span></a> readme)<br><a href="https://shadergraph.thi.ng/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">shadergraph.thi.ng/</span><span class="invisible"></span></a> - Node based shader graph[2]</p><p>So happy I completed this migration (now fully outside US) 🎉! You should hopefully not see any downtime, but if so, please try again later...</p><p>[1] Example: <a href="https://mastodon.thi.ng/@toxi/109677667622245586" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/10967766</span><span class="invisible">7622245586</span></a><br>[2] Example: <a href="https://mastodon.thi.ng/@toxi/111838559833947868" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11183855</span><span class="invisible">9833947868</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/DataMigration" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DataMigration</span></a></p>
Karsten Schmidt<p>Current status: Spending the day moving all my stuff off AWS and outside USA, setting up new buckets, servers, DNS... Other nice result: All 100% green energy powered...</p><p><a href="https://mastodon.thi.ng/tags/DataMigration" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DataMigration</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><a href="https://mastodon.thi.ng/tags/ReleaseTuesday" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ReleaseTuesday</span></a> Just released a new version of <a href="https://thi.ng/scenegraph" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/scenegraph</span><span class="invisible"></span></a> which has some minor breaking changes and also includes a new feature to zoom/scale and translate a node with a given reference point, such that this reference point remains constant in global space. This is very useful for creating zoomable UIs where we want to zoom towards a cursor position (rather than the scene's origin). I got tired to remember the maths and recreate this functionality each time I need it, so now it's just a single `node.scaleWithReferencePoint()` call...</p><p>New example:<br><a href="https://demo.thi.ng/umbrella/scenegraph-pan-zoom/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/scenegrap</span><span class="invisible">h-pan-zoom/</span></a></p><p>Source code:<br><a href="https://github.com/thi-ng/umbrella/blob/develop/examples/scenegraph-pan-zoom/src/index.ts" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/thi-ng/umbrella/blo</span><span class="invisible">b/develop/examples/scenegraph-pan-zoom/src/index.ts</span></a></p><p>Click &amp; drag to pan, touchpad/mousewheel to zoom towards the cursor pos...</p><p>As for the breaking changes: Since the scene node constructors had quite a few (optional) arguments, I refactored them as options objects (aka named params), also improving readability. All other related/bundled examples have already been updated too, see a list in the package readme...</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/SceneGraph" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SceneGraph</span></a> <a href="https://mastodon.thi.ng/tags/Geometry" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Geometry</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> New (old actually, been dormant since 2021) <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> package addition: <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> - see [1] and [2] for further info/context...</p><p>A little bare bones example showing the solver in action to visualize 1000 random 4D data points:</p><p><a href="https://demo.thi.ng/umbrella/tsne-colors/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/tsne-colo</span><span class="invisible">rs/</span></a></p><p>Example source code:<br><a href="https://github.com/thi-ng/umbrella/blob/develop/examples/tsne-colors/src/index.ts" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/thi-ng/umbrella/blo</span><span class="invisible">b/develop/examples/tsne-colors/src/index.ts</span></a></p><p>cc/ <span class="h-card" translate="no"><a href="https://sigmoid.social/@anandphilipc" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>anandphilipc</span></a></span></p><p>[1] <a href="https://mastodon.thi.ng/@toxi/114030865988513140" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11403086</span><span class="invisible">5988513140</span></a><br>[2] <a href="https://mastodon.thi.ng/@toxi/114030992180858620" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11403099</span><span class="invisible">2180858620</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/HowToThing" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HowToThing</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/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/Color" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Color</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>Even with all the well known shortcomings and notoriously fiddly configuration of t-SNE visualizations, I'm still often reaching for it to just get quick overview of some datasets I'm exploring/working with. It's fascinating to observe the process and the structures unfolding, even with simple dummy data...</p><p>The attached example animations show different variations of projecting 500 random data points with different dimensionalities &amp; configurations into a fixed 2D space:</p><p>1) [r, g, b] only<br>2) [r, g, b, radius]<br>3) [r, g, b, radius, outline]</p><p><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/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</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><span class="h-card" translate="no"><a href="https://genart.social/@loosenut" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>loosenut</span></a></span> Love this! Some years ago, I designed an outsole for a series of tennis shoes, using a very similar "plasma" formula (I assume), actually directly based on this <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> example (which I then ported to Houdini):</p><p><a href="https://demo.thi.ng/umbrella/iso-plasma/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/iso-plasm</span><span class="invisible">a/</span></a></p><p><a href="https://mastodon.thi.ng/tags/Contours" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Contours</span></a> <a href="https://mastodon.thi.ng/tags/Plasma" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Plasma</span></a> <a href="https://mastodon.thi.ng/tags/DemoScene" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>DemoScene</span></a> <a href="https://mastodon.thi.ng/tags/Shoes" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Shoes</span></a> <a href="https://mastodon.thi.ng/tags/Outsole" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Outsole</span></a> <a href="https://mastodon.thi.ng/tags/Tennis" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Tennis</span></a></p>
Karsten Schmidt<p>Needless to say that this tool itself is made using quite a few <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> packages. The 4.3MB HTML file is generated in &lt;0.7 seconds and includes parsing, transforming &amp; serializing 980KB of Markdown content from ~9500 functions, classes, interfaces, types, constants and metadata from 200 packages... I'm guessing the final amount of doc content will grow to at least 2-3x the current size, but I'm super chuffed by these early results!</p><p><a href="https://thi.ng/hiccup" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/hiccup</span><span class="invisible"></span></a> &amp; Co. FTW! 💪</p>
Karsten Schmidt<p>Latest attempt at building better documentation for <a href="https://thi.ng/umbrella" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/umbrella</span><span class="invisible"></span></a> (also to make it available offline!): Having noticed that recent versions of TypeDoc support extracting &amp; merging of doc strings from monorepos, over the past few weeks I've been updating/cleaning docstrings in hundreds of source files across all 200+ packages and started building a small tool to assemble a single/mega-page documentation (currently ~4.3MB of just HTML). The tool translates existing docstrings and references contained therein (and still used for the existing API docs) to support proper cross-package references.</p><p>I've uploaded an early preview here:<br><a href="https://docs.thi.ng/umbrella/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">docs.thi.ng/umbrella/</span><span class="invisible"></span></a></p><p>Please be aware that so far this is only an early stage prototype and only contains very limited docs. I.e. there are no generics/typeparams, no details about classes/interfaces... But at least I know now HOW to add this all, as well as all the additional metadata I've already got (currently still only available via other custom tools/examples).</p><p>For example, there're links to the tag-based browser[1] and I'm also planning to add the fuzzy doc search engine/index[2] to this new documentation... The tag browser integration still needs more work in terms of correctly matching package names to tags. The underlying system is there already, just needs more work in terms of actually doing/assigning the concept mapping. Since most package names in thi.ng/umbrella are very plain/boring (for a reason), for many (most?) packages this already works pretty well:</p><p>Example: Visiting the WebGL package docs: <a href="https://docs.thi.ng/umbrella/#webgl" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">docs.thi.ng/umbrella/#webgl</span><span class="invisible"></span></a> and then clicking on "examples" for this package, then opens the tag browser for WebGL: <a href="https://demo.thi.ng/umbrella/thing-browser/#webgl" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/thing-bro</span><span class="invisible">wser/#webgl</span></a> where you can then see all other packages and examples related to this topic...</p><p>More updates on this all soon! Excited! 🤩</p><p>(EDIT: added screenshots...)</p><p>[1] <a href="https://demo.thi.ng/umbrella/thing-browser/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/thing-bro</span><span class="invisible">wser/</span></a><br>[2] <a href="https://demo.thi.ng/umbrella/rdom-search-docs/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/rdom-sear</span><span class="invisible">ch-docs/</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/Documentation" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Documentation</span></a> <a href="https://mastodon.thi.ng/tags/Metadata" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Metadata</span></a> <a href="https://mastodon.thi.ng/tags/Tagging" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Tagging</span></a> <a href="https://mastodon.thi.ng/tags/Search" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Search</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></p>
Karsten Schmidt<p>Another workshop done and glad I got a chance to introduce colleagues to the I Ching hexagrams as an example for <a href="https://mastodon.thi.ng/tags/BottomUpDesign" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>BottomUpDesign</span></a> and as system for constructing/composing higher level concepts/meanings from just a small set of fundamental archetypes (in the I Ching there're only 8 fundamental trigrams)... It's been hugely influential and a guiding principle for my own work &amp; design philosophy (incl. for most of my <a href="https://mastodon.thi.ng/tags/OpenSource" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OpenSource</span></a> projects) and I keep finding ever new uses for applying this approach, here to devise a composable classification system, eventually allowing us to define more complex concepts... In world defined by <a href="https://mastodon.thi.ng/tags/TopDownThinking" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TopDownThinking</span></a>, going the opposite way and showing people the benefits/flexibility is sometimes/oftentimes _very_ hard, but to me unquestionably more powerful...</p><p>Ps. Also reminded again of the whole Seed technology and essence/function (aka "ti-yong") contrast/discussion/subplots in Stephenson's Diamond Age... Yong is the outer manifestation of something. Ti is the underlying essence...</p><p><a href="https://en.wikipedia.org/wiki/Hexagram_(I_Ching)" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">en.wikipedia.org/wiki/Hexagram</span><span class="invisible">_(I_Ching)</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/Composition" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Composition</span></a> <a href="https://mastodon.thi.ng/tags/Language" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Language</span></a> <a href="https://mastodon.thi.ng/tags/IChing" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>IChing</span></a> <a href="https://mastodon.thi.ng/tags/Hexagram" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Hexagram</span></a></p>
Karsten Schmidt<p>PSA: I just updated <a href="https://thi.ng/monopub" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/monopub</span><span class="invisible"></span></a> (a tool for synchronized publishing of packages in a monorepo) to add a new option to truncate generated changelogs with a configurable cut-off date (i.e. to exclude older versions). I've set the default cut off to 1st of January 3 years ago. As a result this saves around 1MB of just changelog files per full <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> release (for 200 packages). Older version history can of course still be obtained via Git...</p><p><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/Monorepo" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Monorepo</span></a> <a href="https://mastodon.thi.ng/tags/ConventionalCommits" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ConventionalCommits</span></a></p>
Karsten Schmidt<p>Up since 5AM... already did a bunch of <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> stuff (incl. new release(s) and repo-wide maintenance), then morning walk in the still crispy air to marvel at the beautiful hoar frost (but forgetting to put the SD card in the camera, so phone pics only... 🤦)...</p><p><a href="https://mastodon.thi.ng/tags/MorningWalk" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>MorningWalk</span></a> <a href="https://mastodon.thi.ng/tags/HoarFrost" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HoarFrost</span></a> <a href="https://mastodon.thi.ng/tags/LandscapePhotography" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>LandscapePhotography</span></a> <a href="https://mastodon.thi.ng/tags/WinterWonderland" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WinterWonderland</span></a> <a href="https://mastodon.thi.ng/tags/Bavaria" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Bavaria</span></a></p>
robertoranon<p><span class="h-card" translate="no"><a href="https://mastodon.thi.ng/@toxi" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>toxi</span></a></span> <span class="h-card" translate="no"><a href="https://cosocial.ca/@avi" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>avi</span></a></span> <span class="h-card" translate="no"><a href="https://mastodon.gamedev.place/@made" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>made</span></a></span> <span class="h-card" translate="no"><a href="https://mastodon.world/@Yura" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>Yura</span></a></span> <span class="h-card" translate="no"><a href="https://genart.social/@jeffpalmer" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>jeffpalmer</span></a></span> <span class="h-card" translate="no"><a href="https://indieweb.social/@alesroubicek" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>alesroubicek</span></a></span> <span class="h-card" translate="no"><a href="https://techhub.social/@slowdownitsfine" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>slowdownitsfine</span></a></span> <span class="h-card" translate="no"><a href="https://hachyderm.io/@latrokles" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>latrokles</span></a></span> <span class="h-card" translate="no"><a href="https://mastodon.social/@rc101" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>rc101</span></a></span> </p><p>We should be thanking you, Karsten! <a href="https://genart.social/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> has been a treasure in the last couple of years I've been using it. I can't recommend it enough, and I've just seen perhaps 20% of it.</p>
Karsten Schmidt<p><a href="https://thi.ng/umbrella" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/umbrella</span><span class="invisible"></span></a> 2024 summary</p><p>Next month <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> will be already 7 years old (in its current monorepo form) and thi.ng itself turn 14 — a true teenager! 😱</p><p>2024 has been a year of a lot of maintenance and the first year in a while, in which I got to put so many of these tools &amp; libraries to work on the development of several other new (and ongoing) projects (incl. some still unannounced ones). Considering the vastly different usage contexts, each time this is also a demonstration (to myself) of just how powerful, adaptable and _composable_ many of these libraries are, and I wish I'd be able to better communicate these aspects to other people...</p><p>My deepest thanks and gratitude to my amazing supporters/sponsors, who've been enabling me to continue this work, to expand on it and actively maintain it! Some of you already for years! Love you, people — Your support means the world to these projects (and to me)! And even though I'm still a far way from being able to work fulltime on all these projects, and also had to take on some consulting work this year, I too have been trying my best to work on thi.ng projects every day this year (and almost succeeded)...</p><p>Super special thanks go out to: <span class="h-card" translate="no"><a href="https://cosocial.ca/@avi" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>avi</span></a></span> <span class="h-card" translate="no"><a href="https://mastodon.gamedev.place/@made" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>made</span></a></span> <span class="h-card" translate="no"><a href="https://mastodon.world/@Yura" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>Yura</span></a></span> <span class="h-card" translate="no"><a href="https://genart.social/@robertoranon" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>robertoranon</span></a></span> <span class="h-card" translate="no"><a href="https://genart.social/@jeffpalmer" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>jeffpalmer</span></a></span> <span class="h-card" translate="no"><a href="https://indieweb.social/@alesroubicek" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>alesroubicek</span></a></span> <span class="h-card" translate="no"><a href="https://techhub.social/@slowdownitsfine" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>slowdownitsfine</span></a></span> <span class="h-card" translate="no"><a href="https://hachyderm.io/@latrokles" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>latrokles</span></a></span> <span class="h-card" translate="no"><a href="https://mastodon.social/@rc101" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>rc101</span></a></span> and others... (Sorry if I missed any other people/supporters/users here — please ping me (again) if I don't follow you already!) 🙏😍</p><p>Some juicy/boring statistics (<a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> only!):</p><p>In 2024 there were 1,639 commits (incl. today's release), of which:</p><p>- 467 features (29%)<br>- 389 documentation related (24%)<br>- 340 refactor &amp; performance (21%)<br>- 198 build, CI, testing, restructuring (12%)<br>- 112 releases (7%)<br>- 87 bug fixes (5%)</p><p>Scope:</p><p>- 200 packages/libraries/tools<br>- 180 standalone example projects/tools<br>- 520 code snippets/examples in docs (extractable via tooling)</p><p>Source code:</p><p>- 4,095 source files<br>- 223k SLOC total, of which:<br>- 159k lines of code<br>- 64k comment lines (mostly for API docs)</p><p>Readme's:</p><p>- 33% of packages with 1,000+ words<br>- 20% of packages with 1,500+ words<br>- Min: 215, max: 9,519, avg: 1,075 words</p><p>3,445 Github ⭐️ (+12% in 2024)</p><p>200,675,881 NPM total downloads to date (🤯)</p><p>There're many valuable ways to support these projects: Share your usage/experience reports, tips &amp; tricks, ask/answer questions, submit issues/PRs, create small examples, documentation/tutorials, word-of-mouth etc.</p><p>If you see value in these projects and want to support a large &amp; mature body of open source work financially, I'm accepting contributions via: Github, Liberapay &amp; Patreon — thank you very much for your consideration!</p><p><a href="https://github.com/postspectacular" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">github.com/postspectacular</span><span class="invisible"></span></a><br><a href="https://liberapay.com/thi.ng/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">liberapay.com/thi.ng/</span><span class="invisible"></span></a><br><a href="https://patreon.com/thing_umbrella" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">patreon.com/thing_umbrella</span><span class="invisible"></span></a></p><p>Ps. I'm on a small single-user instance only here - any boosts are highly appreciated to increase visibility! Thank you! 🙏</p><p><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/ReleaseFriday" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ReleaseFriday</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/YearReview" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>YearReview</span></a> <a href="https://mastodon.thi.ng/tags/Statistics" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Statistics</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/WebAssembly" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebAssembly</span></a></p>
Karsten Schmidt<p>New work: <a href="https://mastodon.thi.ng/tags/ALLUVION" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ALLUVION</span></a></p><p>Over the past two months I've been actively revisiting, updating/extending and now close to finishing this 1.5 year long journey... The actual journey has been much longer, been toying with (faux) fluid sims since ~2007...</p><p>A 50 second preview of one of my fave variations, best enjoyed fullscreen... Tried to achieve some molten, dichroic/irridescent glass &amp; oilfilm aesthetics here, but there're over a dozen of other very different routes/styles possible too, with 25+ parameters to tweak the simulation and look &amp; feel...</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> &amp; <a href="https://thi.ng/shader-ast-stdlib" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/shader-ast-stdlib</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/FluidSim" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FluidSim</span></a> <a href="https://mastodon.thi.ng/tags/FlowField" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>FlowField</span></a> <a href="https://mastodon.thi.ng/tags/Noise" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Noise</span></a> <a href="https://mastodon.thi.ng/tags/Turbulence" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Turbulence</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/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/GLSL" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GLSL</span></a> <a href="https://mastodon.thi.ng/tags/WebGL" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebGL</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/Animation" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Animation</span></a></p>
Karsten Schmidt<p><a href="https://mastodon.thi.ng/tags/ReleaseFriday" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ReleaseFriday</span></a> (Vol. 2) — Also new/recent updates in <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a>:</p><p>- <a href="https://thi.ng/ramp" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/ramp</span><span class="invisible"></span></a> has just received a bugfix for ramps with more than 256 keyframes. Thanks to <span class="h-card" translate="no"><a href="https://genart.social/@robertoranon" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>robertoranon</span></a></span> for finding &amp; reporting! 🤩🙏<br>- <a href="https://thi.ng/meta-css" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/meta-css</span><span class="invisible"></span></a> also fixes a couple of issues related to using certain characters within template/macro arguments (e.g. `:`, `=`)</p><p>Last week, I also added a new feature to <a href="https://thi.ng/rstream" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/rstream</span><span class="invisible"></span></a> to provide a 1:N fanout subscription type for reactive tuple values. For example, this is very useful for editing vector values via reactive UI components (using individual components per vector/tuple element)...</p><p>API docs &amp; mini example:<br><a href="https://docs.thi.ng/umbrella/rstream/functions/fromTuple.html" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">docs.thi.ng/umbrella/rstream/f</span><span class="invisible">unctions/fromTuple.html</span></a></p><p><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>