@toxi@mastodon.thi.ng avatar



Interdisciplinary open so(u)rcery, computational art/craft/design, landscape photography, electronic music, education. See pinned toots for more info!

Unless stated otherwise, all published images/media (except boosts/linked content) is my own work & copyright by me.

Available for consulting/commissions. Searchable.


#ThingUmbrella #ComputationalDesign #GenerativeArt #LandscapePhotography #TypeScript #ZigLang #WebAssembly #Clojure #Forth #GLSL #Houdini #DigitalFabrication #Geometry #CellularAutomata #EvolutionaryComputing #PermaComputing #AxiDraw #DemoScene #DSP #Synth #Music4Coding #Hiking #Nature

This profile is from a federated server and may be incomplete. Browse more on the original instance.

toxi, to opensource
@toxi@mastodon.thi.ng avatar

Btw. It was also yesterday and as a direct & immediate result from a good criticism received via the community survey, I've updated all 350+ code snippets in 275+ source files/docs of all 190 https://thi.ng/umbrella libraries. Each snippet now includes imports for all functions/constants used, incl. those from other packages (if there are)... The updated docs have also been published on https://docs.thi.ng/. Hope that helps! If you do run into any mistakes & omissions, please get in touch! 🙏

Obviously, this doesn't fix other issues with the docs, but many of them are the result of other fundamental issues with TypeDoc & TypeScript's language server (e.g. treating arrow functions and/or functions annotated with type aliases as 3rd class citizens). I do not have the bandwidth to re-organize a massive project like this around the quirks/bugs of 3rd party infrastructure, but I'm always open to suggestions for how the situ can be improved... Many times I've been pondering and even starting work on a custom doc generator (incl. a ton more metadata, diagrams, cross-references, links to related functions [in other packages]), but I just cannot justify working on this at this stage...

toxi, to photography
@toxi@mastodon.thi.ng avatar
toxi, to photography
@toxi@mastodon.thi.ng avatar
@toxi@mastodon.thi.ng avatar

@vga256 Thank you! Blue & golden hour are my favorites! :)

@toxi@mastodon.thi.ng avatar

@kerstinsailer Kann ich mir selbst nach 23+ Jahren in LDN gut vorstellen — für uns ist es jetzt hier die Neue Heimat :) Gruß ans Bartlett, hab vor 10-15 Jahren einige von Euch & AA DRL gekannt, als die Studenten noch meine opensource libraries benutzt hatten und habe dann auch dataviz prototypes für die B-PRO website entworfen... Kleine Welt!

toxi, to Introvert
@toxi@mastodon.thi.ng avatar

Current status #SilentSunday #Solitude

@toxi@mastodon.thi.ng avatar

@vga256 yeah, first trying to take some long exposures. still too bright though... gotta wait

@toxi@mastodon.thi.ng avatar

@vga256 Thank you! It was lovely, if suddenly getting pretty cold! Btw. My cam is almost 15 years old (Canon 7D), would love to try with a newer one, since this one can be quite noisy...

rauschma, to random
@rauschma@fosstodon.org avatar

CLI programs: It’s surprisingly tricky to return to a previous cursor location.

Use case: Fill in status (✅ or ❌) after a file was fully processed.

=== file1.js ✅
Status output 1a
Status output 1b
=== file2.js ❌
Error output 2a
Error output 2b

In other words – I’d like to:

  • Save the cursor position.
  • Log text (potentially a lot = Terminal might scroll).
  • Update the status at the saved cursor position.

Maybe that’s not even possible with the current Terminal standards!

@toxi@mastodon.thi.ng avatar

@rauschma I don't know an easy solution if the screen is scrolling, but otherwise there're dedicated ANSI sequences for storing/restoring cursor position:

console.log(hello \x1b7${"\n".repeat(10)}\x1b8\x1b[0Jworld);

Given your terminal has more than 10 lines spare, the above code should just print "hello world"...

ESC 7 = save cursor
ESC 8 = restore cursor
ESC 0J = delete from cursor onwards

toxi, to random
@toxi@mastodon.thi.ng avatar

White wave. Encountered on a memorable winter hike two years ago along a stretch through snow till my hips... 🌊

#SilentSunday #LandscapePhotography #Photography #Snow #Wave #Abstract #Clouds

toxi, to opensource
@toxi@mastodon.thi.ng avatar

You have no idea how much I love and appreciate concrete helpful & constructive feedback like "put import statements in code snippets" compared to handwavy & obtuse comments like "the docs are pretty bad..." or "examples are all for wild or out there things but what I need are tutorials on the basics". None of the hundreds of example projects & snippets cover those, are you sure?!

Concrete feedback (like the former) actually helps kickstarting things and leads to improving the situation for other users/everyone! I.e. I've already started updating the code snippets in all doc strings across all 190 libraries and I'm going to push new releases in the next couple of days! Great! 🙏🚀

If people really want thi.ngs to improve, at the very least they need to report what exactly is wrong/weak with the docs (preferably with examples), or explain which "basics" should be focused on more... There's an issue tracker and discussion forum[1]. I've been repeatedly asking for feedback here too...

Going hand in hand with this, the survey[2] question "Have you ever contributed to any thi.ng project in any way?" has a big fat ZERO for the "documentation" answer choice. I don't know why it's soo very hard to even just entice people providing some constructive comments, if helping out in other ways is out of the question...

In general, preliminary feedback collected in the survey so far seems to indicate these projects really are like Marmite[3] — people either absolutely love it or hate it, with seemingly not much middle ground... Go figure! Maybe it's a sign of the times...

The result of this is a feeling of being stuck between a rock and a hard place. No matter how much energy (1000s of hours in the past 2 years alone) I've already been investing in providing/improving docs (>50k words in just the readme's), creating/updating docstrings, examples, snippets, diagrams & including links for further reading... it all just doesn't seem to register or is getting shrugged off as non-helpful and I truly don't know if spending even more time/energy/savings on any of this really even worth the effort anymore... Where is the bar for open source projects, esp. those not run be corporations?

[1] https://github.com/thi-ng/umbrella/discussions
[2] https://forms.gle/XacbSDEmQMPZg8197
[3] https://www.creativereview.co.uk/you-either-love-it-or-hate-it/

@toxi@mastodon.thi.ng avatar

So first batch of improvements done: updated/fixed code snippets in 196 docstrings across 141 files (that's 135 of 190 packages updated so far):


Good night! :)

GuyBirkin, to random
@GuyBirkin@post.lurk.org avatar

Very cool new album by @nnirror, where each track is made by synthesizing audio to image (spectrogram) and then resynthesizing into audio using Facet. Flatland Casts is name your price.

@toxi@mastodon.thi.ng avatar

@GuyBirkin @nnirror Will check this out ASAP, thank you!

Back in 2010 I did some related experiments with my own toxiclibs audio tools using horizontal slitscanning of RGB images (and webcam inputs for live "jamming") to drive 768 granular oscillators and some feedback delay lines, creating super complex spectral outcomes...



Last year I also posted the slitscanning tool (without audion) as a #ThingUmbrella example project (all processing is local, nothing uploaded):


toxi, to opensource
@toxi@mastodon.thi.ng avatar

#ThingUmbrella #ReleaseThursday & new package announcement:

https://thi.ng/imago is a declarative & extensible image processor using JSON arrays to define pipelines (or rather trees, because nestable) of processing steps as pure data. Each pipeline can produce file outputs at any point. Multiple outputs are supported & expected. So far there're a dozen operations/transforms (most of them with many options). More to come and it's also very straightforward to add support for custom image transforms.

The following file formats are supported: AVIF, GIF, JPEG, JPEG2000, JPEG XL, PNG, SVG (input only), TIFF, WebP, raw data (output only). Output file names can be templated with various presets (e.g. dimensions, date, time, hashes etc.)

All image I/O & processing is done via https://sharp.pixelplumbing.com and https://thi.ng/pixel & https://thi.ng/pixel-dither. Whilst "sharp" is doing most of the behind-the-scenes heavy lifting, this new library allows for a wider set of transformations and options to define various ops (e.g. sizes/positions can also be given as percent). Sharp on its own also has other limitations (which can only be overcome with extra interim in-memory serializations)...

Docs & examples are still forthcoming — please bear with me! 😉

Ps. This project is the spritual successor of an eponymous project I started in Clojure/Java back in 2014... The big wheel keeps on turning!

Pps. ...it's also the 190th (😱) library/project in #ThingUmbrella!

#OpenSource #ImageProcessing #Declarative #TypeScript #JavaScript

lorenschmidt, to random
@lorenschmidt@genart.social avatar

single pass gradient solver is working

an orthogonal neighborhood a* solver

toxi, (edited )
@toxi@mastodon.thi.ng avatar

@lorenschmidt Noice! How are you solving it? In the games I've been working on since my Atari & Director days, I've often used a Disjoint Set datastructure[1] to go from a binary image/maze to create the distance field (only back then never thought of it as such). I'm not sure if this qualifies as single pass though:

Related blog post:

"Playable" prototype (cursor keys or WASD to move around):


Press 1-4 to toggle between SDF, ASCII art, connected zones, in-game viz

[1] https://en.wikipedia.org/wiki/Disjoint-set_data_structure

toxi, to random
@toxi@mastodon.thi.ng avatar

Just learning about Nike laying off almost 1700 people as well (2% of their workforce) — thinking of my old computational design team and hoping they're not too impacted...



toxi, to opensource
@toxi@mastodon.thi.ng avatar

#ThingUmbrella readme/example tip: If you've got a local clone of the Git repo[1] and have everything built (via yarn build), you can then run: yarn doc:readme to re-generate the readme files of all packages and extract various code examples[2] into runnable TypeScript source files.

In #LiterateProgramming parlance this process is called "tangling" and here is handled by https://thi.ng/tangle, which you can of course use for your own projects/documentation/literate programming too! The tangled source files are written in the export folder of each eligible package and can then be (usually) directly run from the terminal using bun (https://bun.sh), e.g. like so:

bun packages/text-canvas/export/readme-barplot.ts

Just thought this might be useful for some of you...

[1] https://github.com/thi-ng/umbrella/blob/develop/README.md#building

[2] So far there're only ~28 packages (15% of the total) for which I've updated the readmes with this mechanism. I'm hoping by end of the year all of them will be ready...

#ThingUmbrella #OpenSource #Documentation #Examples #TypeScript #Bun

toxi, to random
@toxi@mastodon.thi.ng avatar

#ReleaseMonday 🚀 — Still warm from uploading, this round includes notable updates to these package (updated/fixed code examples in the readme's), in A-Z order:

https://thi.ng/hiccup-canvas — fixed vertex memory layout attrib handling for packed polygons/polylines (mainly of interest for WASM interop)

https://thi.ng/logger — major version update: restructured & updated base types/implementations to support hierarchies of loggers, also to simplify creating & configuring child loggers attached to the newly provided central ROOT logger. Various other thi.ng packages with logging support have already been updated...

https://thi.ng/mime — updated to latest snapshot of mime-db, update vendor prefixed overrides, add isCompressible() predicate

https://thi.ng/ramp — updated/extended vector type interpolation, now truly supports n-dimensional vectors (previously only 2d/3d/4d)

https://thi.ng/text-canvas — major version update: added/updated texmode plotting functions and support compositing multiple bar plots using additive blending for CLI based dataviz purposes[1], cleanup parts of API.

For more updates check the main readme:

Ps. Thank you to the 28 people who've filled in the community survey[2] and gave some great feedback over the past 10 days. It's open for another 10 days, so if you haven't participated yet, now is the time :) Thank you very much in advance!

[1] https://mastodon.thi.ng/@toxi/111957681302985179
[2] https://forms.gle/XacbSDEmQMPZg8197

toxi, to random
@toxi@mastodon.thi.ng avatar

As slow as the wait for spring... Filtered slo-mo beats, fragments of harps, pianos, oboes, time reversals, long build up, moments of bright light, an overall sense of controlled minimalism & looseness...

Brambles — Half-Gramme Holiday (2015)


fotowandern, to photography German
@fotowandern@mastodon.social avatar

Fotoreise Zugspitzregion

für den #waterfallwednesday

Habt noch einen schönen Mittwoch! : )

#fotografie #fotoreise #wandern #langzeitbelichtung #wasserfall
#photography #landscape #longexposure #waterfall #alps

@toxi@mastodon.thi.ng avatar

@hikingdude @m4nuel @fotowandern Kuhflucht ist super, und du kannst noch viel weiter hoch (bis zum Hohen Fricken, 1300 hm)! Der obere Wasserfall ist eigentlich eine große Quelle direkt in der Felswand. Warte lieber bis der Schnee etwas weg ist, nach der kleinen Brücke wird der Pfad dann sehr steil (und im Winter teilweise sau vereist, zumindest bei meinem Versuch :)...

@toxi@mastodon.thi.ng avatar

@hikingdude @m4nuel @fotowandern Gemütlich wäre nicht meine erst Wortwahl hier 😅... 1300 Höhenmeter (von Farchant) - der Fricken ist fast 2000...

toxi, to animation
@toxi@mastodon.thi.ng avatar

Animating SVG via https://thi.ng/hiccup-svg and the new https://thi.ng/ramp v3 with its multi-channel timelines... sooo much easier (and easier to control) than using CSS!


(I manually set the document height to 2000px, scrolling might be weird/nonfunctional on large screens/window sizes)

@toxi@mastodon.thi.ng avatar

@thejikz Sure. This anim is not tied to the usual CSS-based approach & can be manually controlled by anything: actual time passed, number of key presses, preloader progress, the weather... :) I will write a blog post about it in the next few months, for now see https://thi.ng/ramp for details (the readme also has links other examples...)

mxk, to hiking
@mxk@hachyderm.io avatar

Last Sunday I spotted this magnificent view with the suitable #FingerPostFriday.
Standing at Schachen you get the view on Alpspitze all the way to the Zugspitzglazier or what is left of it.
#hiking #snowshoeing

@toxi@mastodon.thi.ng avatar

@mxk Oh, I've got Schachentor already planned out for when the snow is gone. Did you start at Elmau? How long did those 800m+ take you in snowshoes? Respect!

@toxi@mastodon.thi.ng avatar

@mxk Ooof! That's too fast for me 😅 - I don't like to rush in the mountains, also because I'm taking a ton of pics (also to observe & collect references)... Here's my tour plan for later this year (just had to update it since one of the paths back to Elmau seems to be closed now until further notice):


@toxi@mastodon.thi.ng avatar

@hikingdude @mxk Thank you both! I'd take the bike too if I'd not planned to go down into the Reintal... Looks like that first part has only 6-8% incline until the Wetterstein Alm... Bike would be useful in the Reintal later too, but I'm not crazy enough to carry it down for 850m (30%+ slope), heh... :)

  • All
  • Subscribed
  • Moderated
  • Favorites
  • bokunoheroacademia
  • rosin
  • Youngstown
  • Durango
  • khanakhh
  • slotface
  • mdbf
  • InstantRegret
  • kavyap
  • thenastyranch
  • DreamBathrooms
  • rhentai
  • tacticalgear
  • magazineikmin
  • HellsKitchen
  • osvaldo12
  • tester
  • modclub
  • cisconetworking
  • everett
  • ethstaker
  • GTA5RPClips
  • cubers
  • normalnudes
  • lostlight
  • Leos
  • relationshipadvice
  • sketchdaily
  • All magazines