shakedown.social is one of the many independent Mastodon servers you can use to participate in the fediverse.
A community for live music fans with roots in the jam scene. Shakedown Social is run by a team of volunteers (led by @clifff and @sethadam1) and funded by donations.

Administered by:

Server stats:

261
active users

#reactive

0 posts0 participants0 posts today
Karsten Schmidt<p>Another day, another longish user support answer... 😊 This time a little deep dive into potential pitfalls and solutions related to the recursive teardown behavior of <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> reactive subscription pipelines/graphs/topologies. Esp. for UI use cases, these are important aspects to be aware of...</p><p><a href="https://github.com/thi-ng/umbrella/issues/491#issuecomment-2298492699" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/thi-ng/umbrella/iss</span><span class="invisible">ues/491#issuecomment-2298492699</span></a></p><p><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/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/Documentation" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Documentation</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></p>
🧿🪬🍄🌈🎮💻🚲🥓🎃💀🏴🛻🇺🇸<p>So many things in JavaScript are just shitty abstractions built on top of Events</p><p><a href="https://mastodon.social/tags/webDev" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webDev</span></a> <a href="https://mastodon.social/tags/javaScript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>javaScript</span></a> <a href="https://mastodon.social/tags/web" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>web</span></a> <a href="https://mastodon.social/tags/js" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>js</span></a> <a href="https://mastodon.social/tags/events" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>events</span></a> <a href="https://mastodon.social/tags/stream" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>stream</span></a> <a href="https://mastodon.social/tags/signal" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>signal</span></a> <a href="https://mastodon.social/tags/invoker" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>invoker</span></a> <a href="https://mastodon.social/tags/streams" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>streams</span></a> <a href="https://mastodon.social/tags/signals" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>signals</span></a> <a href="https://mastodon.social/tags/invokers" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>invokers</span></a> <a href="https://mastodon.social/tags/react" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>react</span></a> <a href="https://mastodon.social/tags/reactive" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>reactive</span></a></p>
Karsten Schmidt<p>So thanks to an idea/challenge by <span class="h-card" translate="no"><a href="https://genart.social/@guidoschmidt" class="u-url mention" rel="nofollow noopener" target="_blank">@<span>guidoschmidt</span></a></span> (from an hour ago?), you can now play a game of guessing the (currently) 188 package names in <a href="https://thi.ng/umbrella" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/umbrella</span><span class="invisible"></span></a> (and obviously the quiz is built with several of these packages)... 🤩</p><p><a href="https://demo.thi.ng/umbrella/thing-packages-quiz/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/thing-pac</span><span class="invisible">kages-quiz/</span></a></p><p>Source code:<br><a href="https://github.com/thi-ng/umbrella/tree/develop/examples/thing-packages-quiz/src/index.ts" 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/thing-packages-quiz/src/index.ts</span></a></p><p><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/Quiz" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Quiz</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/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></p>
Karsten Schmidt<p>New <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ThingUmbrella</span></a> example (#172): Interactive visualization of low-discrepancy samples using <a href="https://thi.ng/viz" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/viz</span><span class="invisible"></span></a>, <a href="https://thi.ng/hiccup-svg" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/hiccup-svg</span><span class="invisible"></span></a>, <a href="https://thi.ng/lowdisc" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/lowdisc</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> &amp; <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></p><p>The example also demonstrates combining multiple plots and uses lens axes with adjustable non-linear mapping using focal points and dilation...</p><p>Demo:<br><a href="https://demo.thi.ng/umbrella/viz-scatter-plot/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/viz-scatt</span><span class="invisible">er-plot/</span></a></p><p>Commented source code:<br><a href="https://github.com/thi-ng/umbrella/blob/develop/examples/viz-scatter-plot/src/index.ts" 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/examples/viz-scatter-plot/src/index.ts</span></a></p><p><a href="https://mastodon.thi.ng/tags/DataViz" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>DataViz</span></a> <a href="https://mastodon.thi.ng/tags/Visualization" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Visualization</span></a> <a href="https://mastodon.thi.ng/tags/ScatterPlot" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ScatterPlot</span></a> <a href="https://mastodon.thi.ng/tags/LowDiscrepancy" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>LowDiscrepancy</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/SVG" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SVG</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></p>
Karsten Schmidt<p>Trying to debug a user's issue, I ended up creating a new, small &amp; barebones <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ThingUmbrella</span></a> example, showing a basic usage pattern combining:</p><p>- <a href="https://thi.ng/atom" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/atom</span><span class="invisible"></span></a> for app state<br>- <a href="https://thi.ng/router" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/router</span><span class="invisible"></span></a> for URL routing/validation<br>- <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> for reactive, vdom-less UI components</p><p>Demo:<br><a href="https://demo.thi.ng/umbrella/rdom-router/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/rdom-rout</span><span class="invisible">er/</span></a></p><p>Source:<br><a href="https://github.com/thi-ng/umbrella/blob/develop/examples/rdom-router/src/index.ts" 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/examples/rdom-router/src/index.ts</span></a></p><p><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/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/Router" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Router</span></a> <a href="https://mastodon.thi.ng/tags/WebDev" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WebDev</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></p>
Karsten Schmidt<p><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>[1] 🚀 — As announced a couple of weeks ago, a lot of my recent work has been centered around async iterables and addressing the conceptual overlap between the various packages related to those, specifically: <a href="https://thi.ng/transducers-async" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/transducers-async</span><span class="invisible"></span></a>, <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>, <a href="https://thi.ng/csp" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/csp</span><span class="invisible"></span></a>, <a href="https://thi.ng/fibers" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/fibers</span><span class="invisible"></span></a>, and partially related, <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> too. Apart from the first package, until recently, none of the others had direct support for async iterables (largely for historic reasons), but they all offer similar operators &amp; functionality (via different means), which I'm slowly consolidating where it makes sense...</p><p>Part of this pretty large undertaking has been a complete rewrite of the temporarily deprecated <a href="https://thi.ng/csp" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/csp</span><span class="invisible"></span></a> package for Communicating Sequential Processes[2] (IMHO one of the most elegant &amp; sane ways to structure larger apps via multiple small, reasonable concurrent processes). The package is active again now (as v3+) albeit constituting a new API (new docs still WIP) and removing any direct transducer-related functionality — this is one aspect of the aforementioned consolidation and now simply assumed to be delegated to the <a href="https://thi.ng/transducers-async" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/transducers-async</span><span class="invisible"></span></a> and/or non-async <a href="https://thi.ng/transducers" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/transducers</span><span class="invisible"></span></a> packages. I've also included a new small example project showing mixed usage patterns of working with CSP channels and combining them with (async) transducers to create derived views:</p><p>Demo:<br><a href="https://demo.thi.ng/umbrella/csp-bus/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">demo.thi.ng/umbrella/csp-bus/</span><span class="invisible"></span></a></p><p>Source:<br><a href="https://github.com/thi-ng/umbrella/blob/develop/examples/csp-bus/src/events.ts" 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/examples/csp-bus/src/events.ts</span></a></p><p>Hand in hand with these major changes are smaller and still ongoing updates to <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>, which recently received partial support for embedded async iterables as reactive values inside a UI/DOM component tree. The goal for this package is to become fully decoupled from <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> and focus more on the equally powerful, but more lightweight (since part of the language) async iterables. Adapters from rstream → asynciter already exists (see docs).</p><p>Unrelated, but also part of this week's release: The new version of <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> includes support for CSS `light-dark()`. The base framework now includes ~950 utilities &amp; 70 functions. See readme for full list...</p><p>Happy coding! :)</p><p>[1] There're actually a lot more frequent release, but these days I'm only mentioning the more notable ones to not spam everyone...</p><p>[2] <a href="https://en.wikipedia.org/wiki/Communicating_sequential_processes" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">en.wikipedia.org/wiki/Communic</span><span class="invisible">ating_sequential_processes</span></a></p><p><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/CSP" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>CSP</span></a> <a href="https://mastodon.thi.ng/tags/Async" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Async</span></a> <a href="https://mastodon.thi.ng/tags/Transducers" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Transducers</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/DOM" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>DOM</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/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/OpenSource" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>OpenSource</span></a></p>
Karsten Schmidt<p>🚀 <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/ReleaseMonday" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ReleaseMonday</span></a> with new, just released functionality:</p><p>The parameter tweening/animation package <a href="https://thi.ng/ramp" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/ramp</span><span class="invisible"></span></a> has received a major update (v3.0.0) and now supports:</p><p>- interpolation of arbitrary &amp; nested types (numeric, nD vector values and nested objects of the same are supported out-of-the-box, extensible)<br>- grouped/nestable ramp/timeline channels, with each channel having its own independent set of keyframes, interpolation type &amp; options<br>- per-channel time domain mapping functions (e.g. for clamping, looping, speed adjustments, direction etc.)</p><p>Incredibly complex animations can be achieved with these features (and the fact it's all declarative and supports dynamic/procedural generation of keyframes &amp; timelines). I shall write more about this in due course...</p><p>For now, here's a small (purposefully underwhelming, basic(!)) demo, showing some of these concepts in action, using the vertical scroll position to drive (reactively) various CSS properties. A few more smaller examples are also in the package readme...</p><p>Btw. This package has ZERO relationship with HTML/CSS and can be useful in any other usage scenarios, from WebGL to any other parameter tweening tasks...</p><p>The attached image shows the commented demo source code.</p><p>Demo:<br><a href="https://demo.thi.ng/umbrella/ramp-scroll-anim/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/ramp-scro</span><span class="invisible">ll-anim/</span></a></p><p>Source code:<br><a href="https://github.com/thi-ng/umbrella/blob/develop/examples/ramp-scroll-anim/src/index.ts" 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/examples/ramp-scroll-anim/src/index.ts</span></a></p><p><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/CSS" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>CSS</span></a> <a href="https://mastodon.thi.ng/tags/Tween" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Tween</span></a> <a href="https://mastodon.thi.ng/tags/Animation" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Animation</span></a> <a href="https://mastodon.thi.ng/tags/Transition" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Transition</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/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/UI" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>UI</span></a></p>
Karsten Schmidt<p>New <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ThingUmbrella</span></a> releases &amp; example: This week's releases included updates to <a href="https://thi.ng/system" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/system</span><span class="invisible"></span></a>, a minimal and declarative way to compose an app from multiple components, build their dependency graph and manage their lifecycle (async start/stop) in the correct (topological) order. The computed graph (DAG) can then also be serialized to GraphViz format for visualization/debugging/documentation purposes with a single line of code (see readme)...</p><p>Even though I've been using this system in dozens of projects, it occurred to me there wasn't any example project yet demonstrating this approach, so I finally fixed that:</p><p><a href="https://github.com/thi-ng/umbrella/tree/develop/examples/rstream-system-bus" 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/rstream-system-bus</span></a></p><p>The demo is purposefully minimal and the source code is (hopefully) much more interesting than the result. In addition to showing how the app components are defined, this example also shows another powerful pattern I've been using in my own tools:</p><p>Using <a href="https://thi.ng/atom" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/atom</span><span class="invisible"></span></a> as central app state and <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> pubsub as central event bus, to both of which various system components can attach topic based subscriptions (aka event and/or change handlers). Since each of these reactive subscriptions are normal rstream subs, they can all be forming graphs of child subs and be filtered/transformed and synchronized via hundreds of composable operators in the <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> and <a href="https://thi.ng/transducers" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/transducers</span><span class="invisible"></span></a> packages — and — these rstream values can also be directly embedded in <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> created reactive UI components/elements/attributes. Some of these techniques are shown in this new example as well... Hope it's helpful to some of you!</p><p><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/ThingNews" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ThingNews</span></a> <a href="https://mastodon.thi.ng/tags/HowToThing" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HowToThing</span></a> <a href="https://mastodon.thi.ng/tags/Graph" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Graph</span></a> <a href="https://mastodon.thi.ng/tags/Components" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Components</span></a> <a href="https://mastodon.thi.ng/tags/Lifecycle" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Lifecycle</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/PubSub" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>PubSub</span></a> <a href="https://mastodon.thi.ng/tags/GraphViz" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>GraphViz</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/OpenSource" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>OpenSource</span></a></p>
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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; media queries are transpiled to CSS, supports pretty printing, forced includes and plain CSS includes. Extremely small &amp; 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 &amp; 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 &amp; 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 &amp; 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> &amp; <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 &amp; 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>
Tomasz Nurkiewicz<p>I struggle to find the benefits of <a href="https://fosstodon.org/tags/Spring" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Spring</span></a> <a href="https://fosstodon.org/tags/R2DBC" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>R2DBC</span></a>. It's a full rewrite of <a href="https://fosstodon.org/tags/JDBC" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>JDBC</span></a> API using non-blocking I/O. However, typical application shouldn't open more than a handful of DB connections. So, just a few threads blocked on I/O (plus some threads queued up) shouldn't be an issue. Unless you want to be purely reactive or you are connecting to massively scalable database. But in that case, virtual threads come in handy. So what's the point? <a href="https://fosstodon.org/tags/Java" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Java</span></a> <a href="https://fosstodon.org/tags/reactive" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>reactive</span></a></p>
Karsten Schmidt<p><a href="https://mastodon.thi.ng/tags/HowToThing" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HowToThing</span></a> #023 — Responsive &amp; reactive image gallery with tag-based Jaccard similarity ranking/filtering using <a href="https://thi.ng/bitfield" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/bitfield</span><span class="invisible"></span></a>, <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> &amp; <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></p><p>A quite common comment about <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ThingUmbrella</span></a> is that people often have little idea what some of the ~185 packages are even good/intended for and/or how to synthesize solutions from these small, individual building blocks. IMHO this is less about these packages themselves and more down to existing blank spots about the underlying concepts, algorithms and their potential role/utility in a larger problem domain... So I very much hope this new example is also useful in this respect!</p><p>Alas, the full code for this got pretty long and contains a lot more UI stuff. I'm intending to develop this further for the new homepage to browse all ~135 <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ThingUmbrella</span></a> examples (and maybe even for parts of the <a href="https://thi.ng" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng</span><span class="invisible"></span></a> website itself)... For those of you interested in more "advanced" <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> examples, do check it out!</p><p>Background info:<br><a href="https://en.wikipedia.org/wiki/Jaccard_index" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">en.wikipedia.org/wiki/Jaccard_</span><span class="invisible">index</span></a></p><p>Demo:<br><a href="https://demo.thi.ng/umbrella/related-images/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/related-i</span><span class="invisible">mages/</span></a></p><p>Full source code:<br><a href="https://github.com/thi-ng/umbrella/tree/develop/examples/related-images/src/" 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/related-images/src/</span></a></p><p>The important parts re: using compact binary encoding, bitfields &amp; Jaccard similarity to find related items are here:</p><p><a href="https://github.com/thi-ng/umbrella/blob/fc5db1c7a2b9083b40e9be5d6002db937b5a8267/examples/related-images/src/data.ts#L191-L225" 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/fc5db1c7a2b9083b40e9be5d6002db937b5a8267/examples/related-images/src/data.ts#L191-L225</span></a></p><p><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/Tagging" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Tagging</span></a> <a href="https://mastodon.thi.ng/tags/Statistics" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Statistics</span></a> <a href="https://mastodon.thi.ng/tags/Similarity" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Similarity</span></a> <a href="https://mastodon.thi.ng/tags/Ranking" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Ranking</span></a> <a href="https://mastodon.thi.ng/tags/Bitfield" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Bitfield</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/UI" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>UI</span></a> <a href="https://mastodon.thi.ng/tags/Frontend" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Frontend</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/Tutorial" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Tutorial</span></a></p>
Karsten Schmidt<p><a href="https://mastodon.thi.ng/tags/HowToThing" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HowToThing</span></a> #016 — Building a small (and very incomplete!) Mastodon UI with <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ThingUmbrella</span></a>. Still, the following features are included so far and demonstrate:</p><p>- Looking up Mastodon account details &amp; loading public messages for any given username<br>- Transforming JSON payloads with <a href="https://thi.ng/transducers" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/transducers</span><span class="invisible"></span></a><br>- HTML parsing, cleaning &amp; rewriting via <a href="https://thi.ng/parse" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/parse</span><span class="invisible"></span></a><br>- Reactive UI components via <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> &amp; <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><br>- Polymorphic (multiple-dispatch) functions via <a href="https://thi.ng/defmulti" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/defmulti</span><span class="invisible"></span></a></p><p>UI features:</p><p>- Account details w/ header image, avatar, bio<br>- Media previews for images, gifv, videos<br>- Fullscreen modal overlay for images &amp; alt text<br>- UI design heavily inspired by the amazing <span class="h-card" translate="no"><a href="https://hachyderm.io/@phanpy" class="u-url mention" rel="nofollow noopener" target="_blank">@<span>phanpy</span></a></span> (😍)</p><p>Alas, the code for this new example (#131) is too long &amp; too split up for showing here in this format, but it's well documented and you can find it all linked below...</p><p>Demo:<br><a href="https://demo.thi.ng/umbrella/mastodon-feed/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/mastodon-</span><span class="invisible">feed/</span></a></p><p>Source:<br><a href="https://github.com/thi-ng/umbrella/tree/develop/examples/mastodon-feed/src" 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/mastodon-feed/src</span></a></p><p>I hope this (and other parts) of this ongoing <a href="https://mastodon.thi.ng/tags/HowToThing" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HowToThing</span></a> series are interesting to you. If so, please consider boosting and/or supporting my <a href="https://mastodon.thi.ng/tags/OpenSource" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>OpenSource</span></a> work via GitHub or Patreon. Thank you very much in advance!</p><p><a href="https://github.com/sponsors/postspectacular" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/sponsors/postspecta</span><span class="invisible">cular</span></a><br><a href="https://patreon.com/thing_umbrella" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">patreon.com/thing_umbrella</span><span class="invisible"></span></a></p><p><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/Mastodon" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Mastodon</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/Reactive" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Reactive</span></a> <a href="https://mastodon.thi.ng/tags/FunctionalProgramming" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>FunctionalProgramming</span></a></p>
Karsten Schmidt<p><a href="https://mastodon.thi.ng/tags/HowToThing" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>HowToThing</span></a> #014 — Building a simple browser REPL UI for yesterday's Lispy S-expression mini language[1], using <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> and other usual suspects like <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> &amp; <a href="https://thi.ng/transducers" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/transducers</span><span class="invisible"></span></a>.</p><p>The language impl itself now also has local let-bindings, some more error checking, introspection and more examples of built-in functions...</p><p>Demo:<br><a href="https://demo.thi.ng/umbrella/lispy-repl/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/lispy-rep</span><span class="invisible">l/</span></a></p><p>Source code:<br><a href="https://github.com/thi-ng/umbrella/blob/develop/examples/lispy-repl" 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/examples/lispy-repl</span></a></p><p>(The attached source code image only shows the UI/REPL parts, the language implementation can be found in the above link...)</p><p><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/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/Lisp" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Lisp</span></a> <a href="https://mastodon.thi.ng/tags/FunctionalProgramming" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>FunctionalProgramming</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/REPL" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>REPL</span></a> <a href="https://mastodon.thi.ng/tags/DSL" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>DSL</span></a></p><p>[1] See yesterday's toot about building/using a mini DSL:<br><a href="https://mastodon.thi.ng/@toxi/111006345413482231" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">mastodon.thi.ng/@toxi/11100634</span><span class="invisible">5413482231</span></a></p>
IT News<p>The Dipole Antenna Isn’t as Simple as it Appears - Dipole antennas are easy, right? Just follow the formula, cut two pieces of wire, ... - <a href="https://hackaday.com/2023/08/16/the-dipole-antenna-isnt-as-simple-as-it-appears/" rel="nofollow noopener" target="_blank"><span class="invisible">https://</span><span class="ellipsis">hackaday.com/2023/08/16/the-di</span><span class="invisible">pole-antenna-isnt-as-simple-as-it-appears/</span></a> <a href="https://schleuss.online/tags/radiohacks" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>radiohacks</span></a> <a href="https://schleuss.online/tags/wavelength" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>wavelength</span></a> <a href="https://schleuss.online/tags/bandwidth" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>bandwidth</span></a> <a href="https://schleuss.online/tags/frequency" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>frequency</span></a> <a href="https://schleuss.online/tags/impedance" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>impedance</span></a> <a href="https://schleuss.online/tags/resistive" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>resistive</span></a> <a href="https://schleuss.online/tags/reactive" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>reactive</span></a> <a href="https://schleuss.online/tags/antenna" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>antenna</span></a> <a href="https://schleuss.online/tags/dipole" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>dipole</span></a> <a href="https://schleuss.online/tags/vna" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>vna</span></a></p>
IT News<p>Ferrofluid Drum Synth Dances To The Beat - [Love Hultén]’s work often incorporates reactive sound elements, and his Ferroflui... - <a href="https://hackaday.com/2023/06/15/ferrofluid-drum-synth-dances-to-the-beat/" rel="nofollow noopener" target="_blank"><span class="invisible">https://</span><span class="ellipsis">hackaday.com/2023/06/15/ferrof</span><span class="invisible">luid-drum-synth-dances-to-the-beat/</span></a> <a href="https://schleuss.online/tags/soundreactive" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>soundreactive</span></a> <a href="https://schleuss.online/tags/musicalhacks" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>musicalhacks</span></a> <a href="https://schleuss.online/tags/ferrofluid" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ferrofluid</span></a> <a href="https://schleuss.online/tags/reactive" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>reactive</span></a> <a href="https://schleuss.online/tags/msgeq7" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>msgeq7</span></a> <a href="https://schleuss.online/tags/music" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>music</span></a> <a href="https://schleuss.online/tags/synth" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>synth</span></a></p>
nosh :fosstodon: (ʘ‿ʘ)<p>🕸️ 📦 <br>Reactive state in Native Web Components:</p><p>Anyone not using Lit framework, how do you manage reactive state inside native web components?</p><p>I am learning about Astro &amp; Web Components.</p><p>I have seen examples where javascript proxy objects can be used to updated reactive state in a native web component.</p><p>Are there any elegant solutions being used by anyone in this area?</p><p><a href="https://fosstodon.org/tags/webcomponents" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webcomponents</span></a> <br><a href="https://fosstodon.org/tags/state" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>state</span></a> <br><a href="https://fosstodon.org/tags/reactive" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>reactive</span></a> <br><a href="https://fosstodon.org/tags/javascript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>javascript</span></a></p>
Ynte<p>So, my <a href="https://aus.social/tags/introduction" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>introduction</span></a> or <a href="https://aus.social/tags/intro" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>intro</span></a> or whatever -</p><p>I'm a married twenty-something living in the <a href="https://aus.social/tags/UK" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>UK</span></a>, originally from <a href="https://aus.social/tags/Australia" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Australia</span></a>. I work in <a href="https://aus.social/tags/TV" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>TV</span></a> in <a href="https://aus.social/tags/ProductionManagement" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ProductionManagement</span></a>, so focus a lot on <a href="https://aus.social/tags/productivity" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>productivity</span></a> systems and <a href="https://aus.social/tags/automation" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>automation</span></a> - <a href="https://aus.social/tags/todoist" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>todoist</span></a> is my daily driver.</p><p>Interested in <a href="https://aus.social/tags/urbanism" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>urbanism</span></a> and <a href="https://aus.social/tags/transit" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>transit</span></a> for a more connected, sustainable world. Getting back into <a href="https://aus.social/tags/gaming" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>gaming</span></a> with my new <a href="https://aus.social/tags/SteamDeck" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>SteamDeck</span></a>. Owner of a <a href="https://aus.social/tags/reactive" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>reactive</span></a> <a href="https://aus.social/tags/RescueDog" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>RescueDog</span></a>. Big <a href="https://aus.social/tags/foodie" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>foodie</span></a>. Amateur <a href="https://aus.social/tags/writer" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>writer</span></a> and <a href="https://aus.social/tags/archivist" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>archivist</span></a>, growing <a href="https://aus.social/tags/datahoarder" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>datahoarder</span></a> due to slight paranoia about the shakiness of our digital world (<a href="https://aus.social/tags/RIPTwitter" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>RIPTwitter</span></a> didn't help).</p><p>Still not sure where I belong yet on Mastodon, but so far I'm loving not having my feed dictated by an algorithm. It feels cool, like how the internet used to be. Enjoying the ride! :blobcatdance:</p>
Koko The Collie<p>Hello <a href="https://mastodonapp.uk/tags/fediverse" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>fediverse</span></a> here's my <a href="https://mastodonapp.uk/tags/introduction" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>introduction</span></a> : My name is Koko. I'm a 2 year old <a href="https://mastodonapp.uk/tags/BorderCollie" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>BorderCollie</span></a> cross <a href="https://mastodonapp.uk/tags/AustralianKelpie" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>AustralianKelpie</span></a></p><p>I was a pandemic pup, so I didn't get the socialisation I needed. This means that I can be <a href="https://mastodonapp.uk/tags/reactive" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>reactive</span></a> towards cars and other dogs.</p><p>Luckily for me, the <a href="https://mastodonapp.uk/tags/DogsTrust" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>DogsTrust</span></a> helped me find the best Mum and Dad who are doing everything possible to help me become calmer and more optimistic. They already tell me I'm the goodest boy 🐶 </p><p><a href="https://mastodonapp.uk/tags/dog" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>dog</span></a> <a href="https://mastodonapp.uk/tags/dogs" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>dogs</span></a> <a href="https://mastodonapp.uk/tags/DogsOfMastodon" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>DogsOfMastodon</span></a> <a href="https://mastodonapp.uk/tags/Collie" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Collie</span></a> <a href="https://mastodonapp.uk/tags/AdoptDontShop" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>AdoptDontShop</span></a></p>