Karsten Schmidt<p><a href="https://mastodon.thi.ng/tags/LongRead" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>LongRead</span></a> <a href="https://mastodon.thi.ng/tags/ThingNews" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ThingNews</span></a> 01/2024</p><p>Yesterday was <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ThingUmbrella</span></a> <a href="https://mastodon.thi.ng/tags/ReleaseFriday" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ReleaseFriday</span></a> (2nd round this year), incl. updates & additions to these new/recent packages (in A-Z order):</p><p><a href="https://thi.ng/blurhash" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/blurhash</span><span class="invisible"></span></a> — A fast implementation of the blurhash algorithm to create extremely compact (usually just 10-40 characters) blurred previews of images. Includes both encoder/decoder. A CLI wrapper is forthcoming. I also created an interactive online generator as new example project, allowing you to import own images & play with params:</p><p><a href="https://demo.thi.ng/umbrella/blurhash/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">demo.thi.ng/umbrella/blurhash/</span><span class="invisible"></span></a><br>---</p><p><a href="https://thi.ng/boids" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/boids</span><span class="invisible"></span></a> — Finished updates to the composable behavior architecture. Included 7 behavior building blocks (all short, simple functions) which can be freely mixed/assigned to agents to create complex behaviors. All agents are individually configurable. Behaviors are weighted and dynamically adjustable, e.g. to vary spatially or temporally, based on external stimuli etc.</p><p>Updated example project using the new API:<br><a href="https://github.com/thi-ng/umbrella/tree/develop/examples/boid-basics" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/thi-ng/umbrella/tre</span><span class="invisible">e/develop/examples/boid-basics</span></a></p><p>Many more examples of what can be done with this package (my tagged posts w/ <a href="https://mastodon.thi.ng/tags/Boids" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Boids</span></a>): <a href="https://mastodon.thi.ng/@toxi/tagged/Boids" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/tagged/B</span><span class="invisible">oids</span></a><br>---</p><p><a href="https://thi.ng/canvas" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/canvas</span><span class="invisible"></span></a> - Result of recent restructuring/cleaning/consolidating, this new small package contains helpers for canvas creation and HDPI adjustments. Features merged from <a href="https://thi.ng/adapt-dpi" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/adapt-dpi</span><span class="invisible"></span></a> (now deprecated), <a href="https://thi.ng/pixel" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/pixel</span><span class="invisible"></span></a> and others...<br>---</p><p><a href="https://thi.ng/meta-css" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/meta-css</span><span class="invisible"></span></a> — New CLI toolchain for creating, using and bundling custom CSS utility-class-based frameworks (similar to Tachyons, Tailwind etc.)</p><p>Differentiating factors: Uses generative & parametric grammar to define modular CSS frameworks, resulting in 100s of CSS classes (~950 are included as starting point). CSS purely used as output format. Custom stylesheet syntax to concisely assemble styles (incl. selector nesting) from the generated classes & declarations. Supports definition of arbitrary media queries, whose IDs can be used as compound prefixes to apply referenced CSS classes responsively. Supports file watching, bundling of multiple stylesheets, automatic tree-shaking. Only referenced classes & media queries are transpiled to CSS, supports pretty printing, forced includes and plain CSS includes. Extremely small & fast (33KB, incl. dependencies).</p><p>Extensive readme (3k+ words) included. Based on <a href="https://thi.ng/hiccup-css" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/hiccup-css</span><span class="invisible"></span></a>, much of this has been existing in loose form as partial tooling/experiments since 2016. Over the past 2 months I finally took the plunge to actually make this fully usable and been refining the overall workflow & features.</p><p>(Personally, this works _really_ well for me and offers the best of both worlds, i.e. using utility classes for concision, but not leading to clutter in component code, better separation & maintainability)</p><p>Several recently added examples are already using (or have been updated) to this toolchain (see pkg readme for a growing list). There're also new related build instructions in the wiki (linked from each example's readme)<br>---</p><p><a href="https://thi.ng/rdom" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/rdom</span><span class="invisible"></span></a> — Updated many function signatures to support usage in Web Components (Shadow DOM). Added lazy loading component wrapper. Removed experimental scheduler. I never really used it and the general issue is much better solved outside, e.g. using available synchronization constructs in <a href="https://thi.ng/rstream" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/rstream</span><span class="invisible"></span></a>.</p><p>Added a new super basic usage example (rdom & meta-css):<br><a href="https://github.com/thi-ng/umbrella/tree/develop/examples/rdom-web-components" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/thi-ng/umbrella/tre</span><span class="invisible">e/develop/examples/rdom-web-components</span></a><br>---</p><p><a href="https://thi.ng/rdom-forms" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/rdom-forms</span><span class="invisible"></span></a> — Data-driven declarative HTML form/controls based around <a href="https://thi.ng/hiccup-html" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/hiccup-html</span><span class="invisible"></span></a> & <a href="https://thi.ng/rdom" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/rdom</span><span class="invisible"></span></a>. The widgets are unstyled by default, but highly customizable. In addition to being aimed at rdom (for using reactive values & other attribs), it's also suitable for static HTML-generation or SSR purposes.<br>---</p><p>More recent updates:<br><a href="https://github.com/thi-ng/umbrella/blob/develop/README.md#latest-updates" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/thi-ng/umbrella/blo</span><span class="invisible">b/develop/README.md#latest-updates</span></a></p><p><a href="https://mastodon.thi.ng/tags/OpenSource" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>OpenSource</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.thi.ng/tags/JavaScript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.thi.ng/tags/Announcement" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Announcement</span></a> <a href="https://mastodon.thi.ng/tags/Boids" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Boids</span></a> <a href="https://mastodon.thi.ng/tags/CSS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.thi.ng/tags/Reactive" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Reactive</span></a> <a href="https://mastodon.thi.ng/tags/UI" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>UI</span></a> <a href="https://mastodon.thi.ng/tags/WebComponents" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WebComponents</span></a> <a href="https://mastodon.thi.ng/tags/MetaCSS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>MetaCSS</span></a> <a href="https://mastodon.thi.ng/tags/RDOM" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>RDOM</span></a></p>