socel.net is one of the many independent Mastodon servers you can use to participate in the fediverse.
Socel is a place for animation professionals, freelancers, independents, students, and fans to connect and grow together. Everyone in related fields are also welcome.

Server stats:

316
active users

#thingumbrella

2 posts2 participants0 posts today
Karsten Schmidt<p><a href="https://mastodon.thi.ng/tags/ReleaseFriday" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ReleaseFriday</span></a> —&nbsp;Just pushed a new version of <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>, now with added support for "broadcasting" in most operations taking more than one input tensor. This means the shapes of the tensors only need to be compatible, not identical. Supporting operators attempt to adjust each tensor's shape &amp; stride configurations to be compatible (details in the readme &amp; API docs).</p><p>This new version also includes more tensor ops (almost 50 now), including singular value matrix decomposition (SVD), plus improved type safety &amp; result type interference for all operations. The readme contains more code examples...</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/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><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><span class="h-card" translate="no"><a href="https://merveilles.town/@akkartik" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>akkartik</span></a></span> <span class="h-card" translate="no"><a href="https://fire.asta.lgbt/@ashley" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>ashley</span></a></span> <span class="h-card" translate="no"><a href="https://hachyderm.io/@datarama" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>datarama</span></a></span> I'm not fully sure which magic constants you're referring to, but the ones used in this example[1] come from fine tuning the desired behavior and tweaking the balance of the main three different force contributions (separation, alignment, cohesion). Sure, you can give them all equal weighting, but you can achieve so many more varied &amp; interesting behaviors by simply playing with these force multipliers (and throwing other constraints/forces into the mix). In the <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> implementation these forces are customizable per boid (e.g. to create groups of different species/behaviors) and can also be modulated spatially (based on current position and a possibly underlying data layer/map). That way I can dynamically force different behaviors based on where an agent is in the simulation space/time. The combination of all these provides incredible freedom and allows me use boids in situations you wouldn't normally associate with the cliché flocking behaviors...</p><p>ICYMI (related), check out my more recent boids explorations here:<br><a href="https://mastodon.thi.ng/@toxi/tagged/Actiniaria" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/tagged/A</span><span class="invisible">ctiniaria</span></a></p><p>[1] <a href="https://github.com/thi-ng/umbrella/blob/develop/examples/boid-basics/src/index.ts#L44" 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/boid-basics/src/index.ts#L44</span></a></p><p><a href="https://mastodon.thi.ng/tags/Actiniaria" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Actiniaria</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/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</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><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> <span class="h-card" translate="no"><a href="https://tldr.nettime.org/@tomjennings" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>tomjennings</span></a></span> Yes, wabi-sabi has also been very influential on my own practice and was one of the conceptual hooks for this talk I gave at Resonate Belgrade in 2016, which incidentally also includes a great quote by <span class="h-card" translate="no"><a href="https://masto.hackers.town/@vertigo" class="u-url mention" rel="nofollow noopener noreferrer" target="_blank">@<span>vertigo</span></a></span>):</p><p><a href="https://media.thi.ng/2016/talks/resonate.pdf" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">media.thi.ng/2016/talks/resona</span><span class="invisible">te.pdf</span></a><br>(sorry, slides only, no talk notes)</p><p>Re: The feeling "should have written myself" —&nbsp;that's exactly how I feel about your framing/writing! :))</p><p><a href="https://mastodon.thi.ng/tags/WabiSabi" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WabiSabi</span></a> <a href="https://mastodon.thi.ng/tags/Forth" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Forth</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/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</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>
Karsten Schmidt<p>Just added some new diagrams to describe the internals of the <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> block storage &amp; filesystem (incl. some examples) and also added/updated CLI tooling docs...</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/BlockStorage" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>BlockStorage</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/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/Documentation" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Documentation</span></a> <a href="https://mastodon.thi.ng/tags/Diagram" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Diagram</span></a></p>
Karsten Schmidt<p>To put the "large" package size a little more into perspective: I don't know of any other feature-comparable JS vector library which provides all of the following:</p><p>- Generic n-dimensional float, int, uint, boolean vectors<br>- Size optimized versions for 2D/3D/4D (all types)<br>- Multiple-dispatch wrappers (auto-delegating to available optimized versions)<br>- Memory-mapped vectors and optimized versions for various memory layouts (e.g. SOA/AOS)<br>- Optimized versions of many vector-scalar ops<br>- Optimized compound operations (like multiply-add etc.)<br>- Vector randomizations (several approaches)<br>- 99% of GLSL vector operations &amp; conversions<br>- Vector versions of most of JS `Math` ops<br>- Vector interpolations (linear, bilinear, cubic, quadratic...)<br>- 10 different distance functions &amp; metrics<br>- Swizzling &amp; vector coercion/extension<br>- Dozens of additional graphics, statistics &amp; ML-related operations</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/CodeGeneration" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CodeGeneration</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/OpenSource" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OpenSource</span></a></p>
Karsten Schmidt<p>Just a quick <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> update to say that I've already replaced the <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> package on the develop branch and after LOTS of deep experimentation have decided NOT to split up the package. There will be a few (minor) breaking changes, mainly because of enforcing more consistent naming and more granularity in some source files (therefore possibly changed imports, though only if you use direct ones for individual functions...). All in all, I've managed to keep the impact on users to a bare minimum (likely unnoticeable for most), even though it's pretty much a complete rewrite of the entire package (with all its ~900 functions)... This package is now almost 10 years old and I'm very happy how this refactor turned out!</p><p>In terms of file size impact: The FULL minified pkg bundle is now 56.4KB vs previously 48.5KB, however the code density has improved and the brotli-compressed pkg size is only 15.1KB (only 1KB larger than before), which I found absolutely incredible! 🎉 I also have to state once more that this package (and most others in <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a>) are _designed for tree shaking_ and bundling. Hardly any project would ever use the full set of functions provided here all at once, most will only use a small/tiny subset...</p><p>Also — more importantly — many of the 185 example projects in the repo are now showing between 2-25% smaller final bundle sizes. Some also have become slightly larger, but so far I found the most by only ~2%...</p><p>Related to this change: I've also updated the <a href="https://thi.ng/color" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/color</span><span class="invisible"></span></a> &amp; <a href="https://thi.ng/matrices" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/matrices</span><span class="invisible"></span></a> packages to be free from dynamic code generation now! The only packages still using `new Function(...)` are the following, but for those it's unavoidable and dynamic code generation is a core feature:</p><p>- <a href="https://thi.ng/pixel" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/pixel</span><span class="invisible"></span></a> (custom pixel format definition/compilation)<br>- <a href="https://thi.ng/pixel-convolve" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/pixel-convolve</span><span class="invisible"></span></a> (custom image convolution kernel compilation)<br>- <a href="https://thi.ng/shader-ast-js" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/shader-ast-js</span><span class="invisible"></span></a> (Shader AST to JavaScript compilation)</p><p>I will do more testing over the coming days, then release new version(s) ASAP...</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/CodeGeneration" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CodeGeneration</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/OpenSource" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>OpenSource</span></a></p>
Karsten Schmidt<p>In recent years every spring seems to turn into a period of _massive_ refactoring &amp; restructuring in <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a> — maybe it's a form of spring cleaning, even though the reasons[1] are not seasonal... Currently spending my nights reworking the <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> package (likely one of the most comprehensive vector packages available for TS/JS) and trying out different splits/structures, testing their impact on package sizes and usability in existing downstream packages. Currently over 3000 source files with uncommitted changes... aaaarrrgghh! 🤯</p><p>Most functions (vector operations) in this package exist in multiple versions (many code generated, but now in need to be updated): Generic n-dimensional, loop-free, optimized 2D/3D/4D versions and strided versions for manipulating vectors views of larger nD data buffers (supporting all kinds of data layouts, incl. AOS, SOA, hybrid...)</p><p>[1] <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></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/Refactoring" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Refactoring</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>Thanks to <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> I recently learned that dynamic code generation doesn't play nice with certain Content Security Policies (CSP). This has a major impact on a few core packages in <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a>, like the <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> package which contains ~900 vector functions, most of them code generated and optimized for different vector sizes/dimensions (incl. n-dimensional versions). This package (and some others using a similar approach) are key dependencies for dozens of other geometry/visualization related packages... However, I found code generation the only way to practically manage &amp; maintain the sheer amount of functionality provided.</p><p>Because of this (CSP impact), I've been working on a new code generator, which converts the dynamically generated code into statically generated source code files. This will make the overall initial package size bigger, but this shouldn't be a major problem in practice, since there're also very positive effects, including:</p><p>- The new format allows for doc strings for _all_ generated vector ops (with the dynamic approach there was no way to properly attach those in TypeScript)<br>- The new file structure (single function per source file) massively helps with dead code elimination when using a bundler, resulting in smaller final file/bundle sizes. When NOT using a bundler, similar filesize savings can be had by using direct imports (to individual functions) rather than full package imports<br>- None of the unused versions need to be code generated at runtime anymore, so also improving startup time</p><p>The new codegen is already covering around more than a third of the 900 ops. If you want to keep an eye on progress &amp; discussion, follow this issue:</p><p><a href="https://github.com/thi-ng/umbrella/issues/497" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/thi-ng/umbrella/iss</span><span class="invisible">ues/497</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/CodeGenerator" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CodeGenerator</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/Vector" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Vector</span></a> <a href="https://mastodon.thi.ng/tags/PSA" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>PSA</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> Just pushed a new version of <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>, now with additional multi-command CLI tooling to convert &amp; bundle a local file system tree into a single block-based binary blob (e.g. for bundling assets, or distributing a virtual filesystem as part of a web app, or for snapshot testing, or as bridge for WASM interop etc.)</p><p>Also new, the main API now includes a `.readAsObjectURL()` method to wrap files as URLs to binary blobs with associated MIME types, thereby making it trivial to use the virtual filesystem for sourcing stored images and other assets for direct use in the browser...</p><p>(Ps. For more context see other recent announcement: <a href="https://mastodon.thi.ng/@toxi/114264980961483146" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11426498</span><span class="invisible">0961483146</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/BlockStorage" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>BlockStorage</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/BlockFS" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>BlockFS</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/CLI" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>CLI</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>
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>