home.social

#transducers — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #transducers, aggregated by home.social.

fetched live
  1. 🎨✨ Ah, the majestic world of #thi.ng, where programmers juggle #TypeScript and #Zig like circus clowns, all while murmuring mystical incantations about "transducers" and "distance fields." 🤹‍♂️🤔 It's not a framework, it's a "manifold longterm project," which is clearly code for "we have no idea what this does, but it sounds smart!" 🤖💫
    thi.ng #transducers #programming #humor #HackerNews #ngated

  2. 🎨✨ Ah, the majestic world of #thi.ng, where programmers juggle #TypeScript and #Zig like circus clowns, all while murmuring mystical incantations about "transducers" and "distance fields." 🤹‍♂️🤔 It's not a framework, it's a "manifold longterm project," which is clearly code for "we have no idea what this does, but it sounds smart!" 🤖💫
    thi.ng #transducers #programming #humor #HackerNews #ngated

  3. 🎨✨ Ah, the majestic world of #thi.ng, where programmers juggle #TypeScript and #Zig like circus clowns, all while murmuring mystical incantations about "transducers" and "distance fields." 🤹‍♂️🤔 It's not a framework, it's a "manifold longterm project," which is clearly code for "we have no idea what this does, but it sounds smart!" 🤖💫
    thi.ng #transducers #programming #humor #HackerNews #ngated

  4. 🎨✨ Ah, the majestic world of #thi.ng, where programmers juggle #TypeScript and #Zig like circus clowns, all while murmuring mystical incantations about "transducers" and "distance fields." 🤹‍♂️🤔 It's not a framework, it's a "manifold longterm project," which is clearly code for "we have no idea what this does, but it sounds smart!" 🤖💫
    thi.ng #transducers #programming #humor #HackerNews #ngated

  5. #ReleaseSaturday 🚀 — Just pushed the new version of thi.ng/hiccup-carbon-icons (now a much larger collection of 2200+ icons, mentioned yesterday[1]) and some other smaller updates/additions to other packages...

    This is the last release before switching all packages to the recently released TypeScript 6.0, support for which will likely require some restructuring & refactoring and hopefully will be less painful than it might look so far (I'm also waiting for some dependencies to update their TS type definitions, which are currently breaking, e.g. github.com/serialport/node-ser, used for thi.ng/axidraw)

    I also added some new async operators for thi.ng/transducers-async to simplify some stream processing tasks (e.g. collecting and/or consuming stdout/stderr of a child process by rechunking the stream for line-based processing), for example:

    ```
    import { rechunk } from "@thi.ng/transducers-async";
    import { spawn } from "child_process";

    // launch child process
    const child = spawn("ls", ["-l"]);

    // split child's stdout into single lines
    for await(let line of rechunk(/\r?\n/g, child.stdout)) {
    console.log("output", line);
    }
    ```

    [1] mastodon.thi.ng/@toxi/11642201

    #ThingUmbrella #OpenSource #Maintenance #TypeScript #JavaScript #Transducers #Async #Icons

  6. #ReleaseSaturday 🚀 — Just pushed the new version of thi.ng/hiccup-carbon-icons (now a much larger collection of 2200+ icons, mentioned yesterday[1]) and some other smaller updates/additions to other packages...

    This is the last release before switching all packages to the recently released TypeScript 6.0, support for which will likely require some restructuring & refactoring and hopefully will be less painful than it might look so far (I'm also waiting for some dependencies to update their TS type definitions, which are currently breaking, e.g. github.com/serialport/node-ser, used for thi.ng/axidraw)

    I also added some new async operators for thi.ng/transducers-async to simplify some stream processing tasks (e.g. collecting and/or consuming stdout/stderr of a child process by rechunking the stream for line-based processing), for example:

    ```
    import { rechunk } from "@thi.ng/transducers-async";
    import { spawn } from "child_process";

    // launch child process
    const child = spawn("ls", ["-l"]);

    // split child's stdout into single lines
    for await(let line of rechunk(/\r?\n/g, child.stdout)) {
    console.log("output", line);
    }
    ```

    [1] mastodon.thi.ng/@toxi/11642201

    #ThingUmbrella #OpenSource #Maintenance #TypeScript #JavaScript #Transducers #Async #Icons

  7. #ReleaseSaturday 🚀 — Just pushed the new version of thi.ng/hiccup-carbon-icons (now a much larger collection of 2200+ icons, mentioned yesterday[1]) and some other smaller updates/additions to other packages...

    This is the last release before switching all packages to the recently released TypeScript 6.0, support for which will likely require some restructuring & refactoring and hopefully will be less painful than it might look so far (I'm also waiting for some dependencies to update their TS type definitions, which are currently breaking, e.g. github.com/serialport/node-ser, used for thi.ng/axidraw)

    I also added some new async operators for thi.ng/transducers-async to simplify some stream processing tasks (e.g. collecting and/or consuming stdout/stderr of a child process by rechunking the stream for line-based processing), for example:

    ```
    import { rechunk } from "@thi.ng/transducers-async";
    import { spawn } from "child_process";

    // launch child process
    const child = spawn("ls", ["-l"]);

    // split child's stdout into single lines
    for await(let line of rechunk(/\r?\n/g, child.stdout)) {
    console.log("output", line);
    }
    ```

    [1] mastodon.thi.ng/@toxi/11642201

    #ThingUmbrella #OpenSource #Maintenance #TypeScript #JavaScript #Transducers #Async #Icons

  8. #ReleaseSaturday 🚀 — Just pushed the new version of thi.ng/hiccup-carbon-icons (now a much larger collection of 2200+ icons, mentioned yesterday[1]) and some other smaller updates/additions to other packages...

    This is the last release before switching all packages to the recently released TypeScript 6.0, support for which will likely require some restructuring & refactoring and hopefully will be less painful than it might look so far (I'm also waiting for some dependencies to update their TS type definitions, which are currently breaking, e.g. github.com/serialport/node-ser, used for thi.ng/axidraw)

    I also added some new async operators for thi.ng/transducers-async to simplify some stream processing tasks (e.g. collecting and/or consuming stdout/stderr of a child process by rechunking the stream for line-based processing), for example:

    ```
    import { rechunk } from "@thi.ng/transducers-async";
    import { spawn } from "child_process";

    // launch child process
    const child = spawn("ls", ["-l"]);

    // split child's stdout into single lines
    for await(let line of rechunk(/\r?\n/g, child.stdout)) {
    console.log("output", line);
    }
    ```

    [1] mastodon.thi.ng/@toxi/11642201

    #ThingUmbrella #OpenSource #Maintenance #TypeScript #JavaScript #Transducers #Async #Icons

  9. #ReleaseSaturday 🚀 — Just pushed the new version of thi.ng/hiccup-carbon-icons (now a much larger collection of 2200+ icons, mentioned yesterday[1]) and some other smaller updates/additions to other packages...

    This is the last release before switching all packages to the recently released TypeScript 6.0, support for which will likely require some restructuring & refactoring and hopefully will be less painful than it might look so far (I'm also waiting for some dependencies to update their TS type definitions, which are currently breaking, e.g. github.com/serialport/node-ser, used for thi.ng/axidraw)

    I also added some new async operators for thi.ng/transducers-async to simplify some stream processing tasks (e.g. collecting and/or consuming stdout/stderr of a child process by rechunking the stream for line-based processing), for example:

    ```
    import { rechunk } from "@thi.ng/transducers-async";
    import { spawn } from "child_process";

    // launch child process
    const child = spawn("ls", ["-l"]);

    // split child's stdout into single lines
    for await(let line of rechunk(/\r?\n/g, child.stdout)) {
    console.log("output", line);
    }
    ```

    [1] mastodon.thi.ng/@toxi/11642201

    #ThingUmbrella #OpenSource #Maintenance #TypeScript #JavaScript #Transducers #Async #Icons

  10. Neither #Affinity nor #Darktable seemingly support 1D LUTs, which would have been too easy and useful for my #DigitalNegative preparation tool... Instead they both insist on using only 3D LUTs. Converting 1D to 3D takes a bit more effort, but thanks to thi.ng/transducers, it's still very easy...

    #ThingUmbrella #TypeScript #JavaScript #FunctionalProgramming #Transducers #LUT #Photography

  11. Neither #Affinity nor #Darktable seemingly support 1D LUTs, which would have been too easy and useful for my #DigitalNegative preparation tool... Instead they both insist on using only 3D LUTs. Converting 1D to 3D takes a bit more effort, but thanks to thi.ng/transducers, it's still very easy...

    #ThingUmbrella #TypeScript #JavaScript #FunctionalProgramming #Transducers #LUT #Photography

  12. Neither #Affinity nor #Darktable seemingly support 1D LUTs, which would have been too easy and useful for my #DigitalNegative preparation tool... Instead they both insist on using only 3D LUTs. Converting 1D to 3D takes a bit more effort, but thanks to thi.ng/transducers, it's still very easy...

    #ThingUmbrella #TypeScript #JavaScript #FunctionalProgramming #Transducers #LUT #Photography

  13. Neither #Affinity nor #Darktable seemingly support 1D LUTs, which would have been too easy and useful for my #DigitalNegative preparation tool... Instead they both insist on using only 3D LUTs. Converting 1D to 3D takes a bit more effort, but thanks to thi.ng/transducers, it's still very easy...

    #ThingUmbrella #TypeScript #JavaScript #FunctionalProgramming #Transducers #LUT #Photography

  14. Neither #Affinity nor #Darktable seemingly support 1D LUTs, which would have been too easy and useful for my #DigitalNegative preparation tool... Instead they both insist on using only 3D LUTs. Converting 1D to 3D takes a bit more effort, but thanks to thi.ng/transducers, it's still very easy...

    #ThingUmbrella #TypeScript #JavaScript #FunctionalProgramming #Transducers #LUT #Photography

  15. 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).

    #ThingUmbrella #Transducers #FunctionalProgramming #ASCIIArt #DataViz #TypeScript #JavaScript

  16. 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).

    #ThingUmbrella #Transducers #FunctionalProgramming #ASCIIArt #DataViz #TypeScript #JavaScript

  17. 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).

    #ThingUmbrella #Transducers #FunctionalProgramming #ASCIIArt #DataViz #TypeScript #JavaScript

  18. 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).

    #ThingUmbrella #Transducers #FunctionalProgramming #ASCIIArt #DataViz #TypeScript #JavaScript

  19. 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).

    #ThingUmbrella #Transducers #FunctionalProgramming #ASCIIArt #DataViz #TypeScript #JavaScript

  20. @weavejester I actually think this is probably wrong! "induce" reminds me of induction, and no values are being induced (this is often related to dependent types and having some sort of inductively defined type or value).

    I'll play with it some more, it may be that I need to call it transduce-once or transduce-one (onceduce? lol that's terrible).

    #Scheme #transducers #Clojure

  21. @weavejester I actually think this is probably wrong! "induce" reminds me of induction, and no values are being induced (this is often related to dependent types and having some sort of inductively defined type or value).

    I'll play with it some more, it may be that I need to call it transduce-once or transduce-one (onceduce? lol that's terrible).

    #Scheme #transducers #Clojure

  22. @weavejester I actually think this is probably wrong! "induce" reminds me of induction, and no values are being induced (this is often related to dependent types and having some sort of inductively defined type or value).

    I'll play with it some more, it may be that I need to call it transduce-once or transduce-one (onceduce? lol that's terrible).

    #Scheme #transducers #Clojure

  23. @weavejester I actually think this is probably wrong! "induce" reminds me of induction, and no values are being induced (this is often related to dependent types and having some sort of inductively defined type or value).

    I'll play with it some more, it may be that I need to call it transduce-once or transduce-one (onceduce? lol that's terrible).

    #Scheme #transducers #Clojure

  24. @weavejester I actually think this is probably wrong! "induce" reminds me of induction, and no values are being induced (this is often related to dependent types and having some sort of inductively defined type or value).

    I'll play with it some more, it may be that I need to call it transduce-once or transduce-one (onceduce? lol that's terrible).

    #Scheme #transducers #Clojure

  25. Had an idea a couple days ago while writing one of the chapters of the transducers book: it would be very useful to be able to transduce over a single value, if only to test that your transducer / collector will do what you expect it to do.

    I've called it once: gitlab.com/ThatGeoGuy/chicken-

    I'm not sure this is the best name for it, so maybe fedi can help me get a better name?

    #Scheme #Clojure #Transducers

  26. Had an idea a couple days ago while writing one of the chapters of the transducers book: it would be very useful to be able to transduce over a single value, if only to test that your transducer / collector will do what you expect it to do.

    I've called it once: gitlab.com/ThatGeoGuy/chicken-

    I'm not sure this is the best name for it, so maybe fedi can help me get a better name?

    #Scheme #Clojure #Transducers

  27. Had an idea a couple days ago while writing one of the chapters of the transducers book: it would be very useful to be able to transduce over a single value, if only to test that your transducer / collector will do what you expect it to do.

    I've called it once: gitlab.com/ThatGeoGuy/chicken-

    I'm not sure this is the best name for it, so maybe fedi can help me get a better name?

    #Scheme #Clojure #Transducers

  28. Had an idea a couple days ago while writing one of the chapters of the transducers book: it would be very useful to be able to transduce over a single value, if only to test that your transducer / collector will do what you expect it to do.

    I've called it once: gitlab.com/ThatGeoGuy/chicken-

    I'm not sure this is the best name for it, so maybe fedi can help me get a better name?

    #Scheme #Clojure #Transducers

  29. Had an idea a couple days ago while writing one of the chapters of the transducers book: it would be very useful to be able to transduce over a single value, if only to test that your transducer / collector will do what you expect it to do.

    I've called it once: gitlab.com/ThatGeoGuy/chicken-

    I'm not sure this is the best name for it, so maybe fedi can help me get a better name?

    #Scheme #Clojure #Transducers

  30. Someone asked for help on an interesting transducers (functional programming) problem. My initial answer using other existing transducers still had some minor differences to their intended behavior, but writing a small custom transducer then saves the day and now I can already think of a bunch of other uses for it too:

    Attempt #1:
    github.com/thi-ng/umbrella/iss

    Attempt #2 (custom transducer):
    github.com/thi-ng/umbrella/iss

    #ThingUmbrella #FunctionalProgramming #Transducers #TypeScript

  31. Someone asked for help on an interesting transducers (functional programming) problem. My initial answer using other existing transducers still had some minor differences to their intended behavior, but writing a small custom transducer then saves the day and now I can already think of a bunch of other uses for it too:

    Attempt #1:
    github.com/thi-ng/umbrella/iss

    Attempt #2 (custom transducer):
    github.com/thi-ng/umbrella/iss

    #ThingUmbrella #FunctionalProgramming #Transducers #TypeScript

  32. Someone asked for help on an interesting transducers (functional programming) problem. My initial answer using other existing transducers still had some minor differences to their intended behavior, but writing a small custom transducer then saves the day and now I can already think of a bunch of other uses for it too:

    Attempt #1:
    github.com/thi-ng/umbrella/iss

    Attempt #2 (custom transducer):
    github.com/thi-ng/umbrella/iss

    #ThingUmbrella #FunctionalProgramming #Transducers #TypeScript

  33. Someone asked for help on an interesting transducers (functional programming) problem. My initial answer using other existing transducers still had some minor differences to their intended behavior, but writing a small custom transducer then saves the day and now I can already think of a bunch of other uses for it too:

    Attempt #1:
    github.com/thi-ng/umbrella/iss

    Attempt #2 (custom transducer):
    github.com/thi-ng/umbrella/iss

    #ThingUmbrella #FunctionalProgramming #Transducers #TypeScript

  34. Someone asked for help on an interesting transducers (functional programming) problem. My initial answer using other existing transducers still had some minor differences to their intended behavior, but writing a small custom transducer then saves the day and now I can already think of a bunch of other uses for it too:

    Attempt #1:
    github.com/thi-ng/umbrella/iss

    Attempt #2 (custom transducer):
    github.com/thi-ng/umbrella/iss

    #ThingUmbrella #FunctionalProgramming #Transducers #TypeScript

  35. #ThingUmbrella #ReleaseFriday[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: thi.ng/transducers-async, thi.ng/rstream, thi.ng/csp, thi.ng/fibers, and partially related, thi.ng/rdom 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 & functionality (via different means), which I'm slowly consolidating where it makes sense...

    Part of this pretty large undertaking has been a complete rewrite of the temporarily deprecated thi.ng/csp package for Communicating Sequential Processes[2] (IMHO one of the most elegant & 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 thi.ng/transducers-async and/or non-async thi.ng/transducers 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:

    Demo:
    demo.thi.ng/umbrella/csp-bus/

    Source:
    github.com/thi-ng/umbrella/blo

    Hand in hand with these major changes are smaller and still ongoing updates to thi.ng/rdom, 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 thi.ng/rstream 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).

    Unrelated, but also part of this week's release: The new version of thi.ng/meta-css includes support for CSS `light-dark()`. The base framework now includes ~950 utilities & 70 functions. See readme for full list...

    Happy coding! :)

    [1] There're actually a lot more frequent release, but these days I'm only mentioning the more notable ones to not spam everyone...

    [2] en.wikipedia.org/wiki/Communic

    #ThingUmbrella #CSP #Async #Transducers #Reactive #UI #DOM #CSS #TypeScript #JavaScript #OpenSource

  36. #ThingUmbrella #ReleaseFriday[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: thi.ng/transducers-async, thi.ng/rstream, thi.ng/csp, thi.ng/fibers, and partially related, thi.ng/rdom 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 & functionality (via different means), which I'm slowly consolidating where it makes sense...

    Part of this pretty large undertaking has been a complete rewrite of the temporarily deprecated thi.ng/csp package for Communicating Sequential Processes[2] (IMHO one of the most elegant & 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 thi.ng/transducers-async and/or non-async thi.ng/transducers 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:

    Demo:
    demo.thi.ng/umbrella/csp-bus/

    Source:
    github.com/thi-ng/umbrella/blo

    Hand in hand with these major changes are smaller and still ongoing updates to thi.ng/rdom, 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 thi.ng/rstream 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).

    Unrelated, but also part of this week's release: The new version of thi.ng/meta-css includes support for CSS `light-dark()`. The base framework now includes ~950 utilities & 70 functions. See readme for full list...

    Happy coding! :)

    [1] There're actually a lot more frequent release, but these days I'm only mentioning the more notable ones to not spam everyone...

    [2] en.wikipedia.org/wiki/Communic

    #ThingUmbrella #CSP #Async #Transducers #Reactive #UI #DOM #CSS #TypeScript #JavaScript #OpenSource

  37. #ThingUmbrella #ReleaseFriday[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: thi.ng/transducers-async, thi.ng/rstream, thi.ng/csp, thi.ng/fibers, and partially related, thi.ng/rdom 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 & functionality (via different means), which I'm slowly consolidating where it makes sense...

    Part of this pretty large undertaking has been a complete rewrite of the temporarily deprecated thi.ng/csp package for Communicating Sequential Processes[2] (IMHO one of the most elegant & 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 thi.ng/transducers-async and/or non-async thi.ng/transducers 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:

    Demo:
    demo.thi.ng/umbrella/csp-bus/

    Source:
    github.com/thi-ng/umbrella/blo

    Hand in hand with these major changes are smaller and still ongoing updates to thi.ng/rdom, 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 thi.ng/rstream 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).

    Unrelated, but also part of this week's release: The new version of thi.ng/meta-css includes support for CSS `light-dark()`. The base framework now includes ~950 utilities & 70 functions. See readme for full list...

    Happy coding! :)

    [1] There're actually a lot more frequent release, but these days I'm only mentioning the more notable ones to not spam everyone...

    [2] en.wikipedia.org/wiki/Communic

    #ThingUmbrella #CSP #Async #Transducers #Reactive #UI #DOM #CSS #TypeScript #JavaScript #OpenSource

  38. #ThingUmbrella #ReleaseFriday[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: thi.ng/transducers-async, thi.ng/rstream, thi.ng/csp, thi.ng/fibers, and partially related, thi.ng/rdom 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 & functionality (via different means), which I'm slowly consolidating where it makes sense...

    Part of this pretty large undertaking has been a complete rewrite of the temporarily deprecated thi.ng/csp package for Communicating Sequential Processes[2] (IMHO one of the most elegant & 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 thi.ng/transducers-async and/or non-async thi.ng/transducers 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:

    Demo:
    demo.thi.ng/umbrella/csp-bus/

    Source:
    github.com/thi-ng/umbrella/blo

    Hand in hand with these major changes are smaller and still ongoing updates to thi.ng/rdom, 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 thi.ng/rstream 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).

    Unrelated, but also part of this week's release: The new version of thi.ng/meta-css includes support for CSS `light-dark()`. The base framework now includes ~950 utilities & 70 functions. See readme for full list...

    Happy coding! :)

    [1] There're actually a lot more frequent release, but these days I'm only mentioning the more notable ones to not spam everyone...

    [2] en.wikipedia.org/wiki/Communic

    #ThingUmbrella #CSP #Async #Transducers #Reactive #UI #DOM #CSS #TypeScript #JavaScript #OpenSource

  39. #ThingUmbrella #ReleaseFriday[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: thi.ng/transducers-async, thi.ng/rstream, thi.ng/csp, thi.ng/fibers, and partially related, thi.ng/rdom 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 & functionality (via different means), which I'm slowly consolidating where it makes sense...

    Part of this pretty large undertaking has been a complete rewrite of the temporarily deprecated thi.ng/csp package for Communicating Sequential Processes[2] (IMHO one of the most elegant & 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 thi.ng/transducers-async and/or non-async thi.ng/transducers 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:

    Demo:
    demo.thi.ng/umbrella/csp-bus/

    Source:
    github.com/thi-ng/umbrella/blo

    Hand in hand with these major changes are smaller and still ongoing updates to thi.ng/rdom, 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 thi.ng/rstream 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).

    Unrelated, but also part of this week's release: The new version of thi.ng/meta-css includes support for CSS `light-dark()`. The base framework now includes ~950 utilities & 70 functions. See readme for full list...

    Happy coding! :)

    [1] There're actually a lot more frequent release, but these days I'm only mentioning the more notable ones to not spam everyone...

    [2] en.wikipedia.org/wiki/Communic

    #ThingUmbrella #CSP #Async #Transducers #Reactive #UI #DOM #CSS #TypeScript #JavaScript #OpenSource

  40. Phew... One key step closer to replicating & simplifying core thi.ng/rstream functionality via just standard async iterables: Just added a `mult()` base-operator to thi.ng/transducers-async [1] which allows splitting a single async iterable into multiple child async iterables (aka subscriptions, aka 1:N splitting), each of which can be added/removed dynamically and individually processed e.g. via transducers, vanilla `for await()` consumers, and/or used as input for downstream `mult()`s to construct entire graph topologies (cycles allowed) of async processors etc. Back pressure is handled by waiting for all child subscriptions to deliver the value before consuming a new one from the source...

    [1] github.com/thi-ng/umbrella/blo

    #ThingUmbrella #Async #Transducers #ReactiveProgramming #FunctionalProgramming #TypeScript #JavaScript

  41. Phew... One key step closer to replicating & simplifying core thi.ng/rstream functionality via just standard async iterables: Just added a `mult()` base-operator to thi.ng/transducers-async [1] which allows splitting a single async iterable into multiple child async iterables (aka subscriptions, aka 1:N splitting), each of which can be added/removed dynamically and individually processed e.g. via transducers, vanilla `for await()` consumers, and/or used as input for downstream `mult()`s to construct entire graph topologies (cycles allowed) of async processors etc. Back pressure is handled by waiting for all child subscriptions to deliver the value before consuming a new one from the source...

    [1] github.com/thi-ng/umbrella/blo

    #ThingUmbrella #Async #Transducers #ReactiveProgramming #FunctionalProgramming #TypeScript #JavaScript

  42. Phew... One key step closer to replicating & simplifying core thi.ng/rstream functionality via just standard async iterables: Just added a `mult()` base-operator to thi.ng/transducers-async [1] which allows splitting a single async iterable into multiple child async iterables (aka subscriptions, aka 1:N splitting), each of which can be added/removed dynamically and individually processed e.g. via transducers, vanilla `for await()` consumers, and/or used as input for downstream `mult()`s to construct entire graph topologies (cycles allowed) of async processors etc. Back pressure is handled by waiting for all child subscriptions to deliver the value before consuming a new one from the source...

    [1] github.com/thi-ng/umbrella/blo

    #ThingUmbrella #Async #Transducers #ReactiveProgramming #FunctionalProgramming #TypeScript #JavaScript

  43. Phew... One key step closer to replicating & simplifying core thi.ng/rstream functionality via just standard async iterables: Just added a `mult()` base-operator to thi.ng/transducers-async [1] which allows splitting a single async iterable into multiple child async iterables (aka subscriptions, aka 1:N splitting), each of which can be added/removed dynamically and individually processed e.g. via transducers, vanilla `for await()` consumers, and/or used as input for downstream `mult()`s to construct entire graph topologies (cycles allowed) of async processors etc. Back pressure is handled by waiting for all child subscriptions to deliver the value before consuming a new one from the source...

    [1] github.com/thi-ng/umbrella/blo

    #ThingUmbrella #Async #Transducers #ReactiveProgramming #FunctionalProgramming #TypeScript #JavaScript

  44. Phew... One key step closer to replicating & simplifying core thi.ng/rstream functionality via just standard async iterables: Just added a `mult()` base-operator to thi.ng/transducers-async [1] which allows splitting a single async iterable into multiple child async iterables (aka subscriptions, aka 1:N splitting), each of which can be added/removed dynamically and individually processed e.g. via transducers, vanilla `for await()` consumers, and/or used as input for downstream `mult()`s to construct entire graph topologies (cycles allowed) of async processors etc. Back pressure is handled by waiting for all child subscriptions to deliver the value before consuming a new one from the source...

    [1] github.com/thi-ng/umbrella/blo

    #ThingUmbrella #Async #Transducers #ReactiveProgramming #FunctionalProgramming #TypeScript #JavaScript

  45. Sorry for recent silence, if I can summarize most of my past two weeks or so:

    "Async all the thi.ngs, what colud posibsyl og wrngo!" [1]

    1) New package thi.ng/transducers-async (restarted development after originally stopping it in 2018 due to lack of async iterable support)
    2) Updates to thi.ng/rstream (adapters from/to async iterables)
    3) Upcoming, a new & simplified implementation of thi.ng/csp (currently still only on a feature branch[2]) for building blocks for Communicating Sequential Processes.
    4) Also still WIP only, async iterable support for thi.ng/rdom, i.e. in the same way as rstream subscriptions, such async iterables can soon be directly embedded as component/element bodies or attribute values and then perform pinpointed DOM updates each time their value changes...

    As I said, async all the thi.ngs...

    [1] h/t @sjb3d for an ancient tweet with a similar sentiment & outcome :)

    [2] The CSP package too was somewhat deprecated (for similar reasons) and a while ago I added another alternative CSP implementation via thi.ng/fibers, but that package too might see some more refactoring/simplifying by switching to async generators...

    #ThingUmbrella #Async #Transducers #OpenSource #TypeScript #JavaScript

  46. Sorry for recent silence, if I can summarize most of my past two weeks or so:

    "Async all the thi.ngs, what colud posibsyl og wrngo!" [1]

    1) New package thi.ng/transducers-async (restarted development after originally stopping it in 2018 due to lack of async iterable support)
    2) Updates to thi.ng/rstream (adapters from/to async iterables)
    3) Upcoming, a new & simplified implementation of thi.ng/csp (currently still only on a feature branch[2]) for building blocks for Communicating Sequential Processes.
    4) Also still WIP only, async iterable support for thi.ng/rdom, i.e. in the same way as rstream subscriptions, such async iterables can soon be directly embedded as component/element bodies or attribute values and then perform pinpointed DOM updates each time their value changes...

    As I said, async all the thi.ngs...

    [1] h/t @sjb3d for an ancient tweet with a similar sentiment & outcome :)

    [2] The CSP package too was somewhat deprecated (for similar reasons) and a while ago I added another alternative CSP implementation via thi.ng/fibers, but that package too might see some more refactoring/simplifying by switching to async generators...

    #ThingUmbrella #Async #Transducers #OpenSource #TypeScript #JavaScript

  47. Sorry for recent silence, if I can summarize most of my past two weeks or so:

    "Async all the thi.ngs, what colud posibsyl og wrngo!" [1]

    1) New package thi.ng/transducers-async (restarted development after originally stopping it in 2018 due to lack of async iterable support)
    2) Updates to thi.ng/rstream (adapters from/to async iterables)
    3) Upcoming, a new & simplified implementation of thi.ng/csp (currently still only on a feature branch[2]) for building blocks for Communicating Sequential Processes.
    4) Also still WIP only, async iterable support for thi.ng/rdom, i.e. in the same way as rstream subscriptions, such async iterables can soon be directly embedded as component/element bodies or attribute values and then perform pinpointed DOM updates each time their value changes...

    As I said, async all the thi.ngs...

    [1] h/t @sjb3d for an ancient tweet with a similar sentiment & outcome :)

    [2] The CSP package too was somewhat deprecated (for similar reasons) and a while ago I added another alternative CSP implementation via thi.ng/fibers, but that package too might see some more refactoring/simplifying by switching to async generators...

    #ThingUmbrella #Async #Transducers #OpenSource #TypeScript #JavaScript

  48. Sorry for recent silence, if I can summarize most of my past two weeks or so:

    "Async all the thi.ngs, what colud posibsyl og wrngo!" [1]

    1) New package thi.ng/transducers-async (restarted development after originally stopping it in 2018 due to lack of async iterable support)
    2) Updates to thi.ng/rstream (adapters from/to async iterables)
    3) Upcoming, a new & simplified implementation of thi.ng/csp (currently still only on a feature branch[2]) for building blocks for Communicating Sequential Processes.
    4) Also still WIP only, async iterable support for thi.ng/rdom, i.e. in the same way as rstream subscriptions, such async iterables can soon be directly embedded as component/element bodies or attribute values and then perform pinpointed DOM updates each time their value changes...

    As I said, async all the thi.ngs...

    [1] h/t @sjb3d for an ancient tweet with a similar sentiment & outcome :)

    [2] The CSP package too was somewhat deprecated (for similar reasons) and a while ago I added another alternative CSP implementation via thi.ng/fibers, but that package too might see some more refactoring/simplifying by switching to async generators...

    #ThingUmbrella #Async #Transducers #OpenSource #TypeScript #JavaScript

  49. Sorry for recent silence, if I can summarize most of my past two weeks or so:

    "Async all the thi.ngs, what colud posibsyl og wrngo!" [1]

    1) New package thi.ng/transducers-async (restarted development after originally stopping it in 2018 due to lack of async iterable support)
    2) Updates to thi.ng/rstream (adapters from/to async iterables)
    3) Upcoming, a new & simplified implementation of thi.ng/csp (currently still only on a feature branch[2]) for building blocks for Communicating Sequential Processes.
    4) Also still WIP only, async iterable support for thi.ng/rdom, i.e. in the same way as rstream subscriptions, such async iterables can soon be directly embedded as component/element bodies or attribute values and then perform pinpointed DOM updates each time their value changes...

    As I said, async all the thi.ngs...

    [1] h/t @sjb3d for an ancient tweet with a similar sentiment & outcome :)

    [2] The CSP package too was somewhat deprecated (for similar reasons) and a while ago I added another alternative CSP implementation via thi.ng/fibers, but that package too might see some more refactoring/simplifying by switching to async generators...

    #ThingUmbrella #Async #Transducers #OpenSource #TypeScript #JavaScript

  50. If you change "traversables" with #transducers I think you get a pretty clear idea of how #Scheme or #Clojure transducers are different from Rust's Iterator trait.

    without.boats/blog/iterators-a