Started creating browser-based calculators for quickly computing a bunch of recurring things in darkroom processing, so far:

Scale amount by area:
Given reference dimensions and amount, compute scaled amount needed for new target dimensions.
Example: Compute drops of emulsion needed for a new print size

Two-part solution ratio:
For a total volume of a two-part solution with a A:B target mix ratio, compute how many units are needed of both A and B.
Example: For N drops in total, compute how many drops are needed for A & B using a 1.2:1 target ratio

Solution addition:
Compute the amount of solution A (with given concentration) to add to another volume to achieve a certain target concentration (for solution A)
Example: How many extra drops of a 25% contrast agent solution are needed to achieve a 5% solution with a certain base emulsion volume

More calculators forthcoming... Feel free to ping me with any other useful formulas you'd like to have added...

Bookmark this on your phone:
https://demo.thi.ng/umbrella/darkroom-calc/

(The UI is responsive to the system's dark mode setting)

Source code:
https://codeberg.org/thi.ng/umbrella/src/branch/develop/examples/darkroom-calc/

Btw. This is https://thi.ng/umbrella example project #186 and relies mostly on these packages:

- https://thi.ng/rdom & https://thi.ng/rstream for reactive UI & computation
- https://thi.ng/rdom-forms for reactive form element abstraction/creation

#ThingUmbrella #AltProcess #Darkroom #DarkroomPrint #AnalogPhotography #Calculator #Reactive #UI #TypeScript

One from the archives for #TextmodeTuesday. The post might be 3 years old, but I'm still using these snippets almost daily to visualize and debug data whilst I'm working in the Node REPL...

https://mastodon.thi.ng/@toxi/110942967462856117

#ThingUmbrella #DataViz #REPL #Terminal

PSA: Migrating the https://thi.ng/umbrella monorepo to Codeberg, including:

- updating thousands of links in ~970 files (readme's, media, API docs/snippets in source files, examples, wiki etc.)
- updated 215 package short links to point to new locations on Codeberg
- re-configured & re-uploaded hundreds of megabytes of package API docs to https://docs.thi.ng/ (with new backlinks to Codeberg)

Re: short links, for example http://thi.ng/wasm-api is an alias for the more unwieldly package homepage URL in the larger umbrella repo on Codeberg: https://codeberg.org/thi.ng/umbrella/src/branch/develop/packages/wasm-api

Along with these changes, Codeberg is also the main/default remote for this project now. I will keep the Github repo (https://github.com/thi-ng/umbrella) around for a bit longer, but will add a note in some places to say that this is only a passive mirror from now on...

This exercise has taken up most of my Sunday today, for a body of work which spans close to 10 years of my life... I had migrated this large repo already in 2024, but finally got around to "make the switch". Other thi.ng projects will be migrated over the coming weeks/months...

As always, a big thank you to all the people who've been supporting this work and its maintenance. Self-promotion is absolutely not my forte and I always have prioritized putting my energy into these projects instead. But if you in any way have benefited from these varied projects and/or want to support their ongoing development, I'd highly appreciate any donations/sponsoring via:

https://codeberg.org/thi.ng/umbrella/src/branch/develop/CONTRIBUTING.md#donations

#ThingUmbrella #Monorepo #OpenSource #Migration #Codeberg #GitHub

thi.ng/umbrella

thi.ng/umbrella

As is somewhat customary, spring time is maintenance time and so this past week was again "infrastructure week" in #ThingUmbrella land, updating various tool scripts, switching to Rclone for uploading/syncing API docs, updating/pinning Prettier version & config, reformatting thousands of source files, re-uploading hundreds of MB of documentation for all current 214 projects, updating package metadata etc.

Also lots of recent updates to several packages, including some larger ones like:

https://thi.ng/column-store

Re-indexing of dictionary-based columns now re-creates the dictionary using the histogram (usage frequency) of stored values. This can result in major file size savings (I do still care about this aspect.. 😅). For example, in my PKM system (also my main dev focus at the moment), this change alone has reduced the database file size by almost 30% (containing tens of thousands of tagged items and where tags are stored in such a dictionary-based column).

The query engine now also supports result paging and sorting by an arbitrary number of columns/criteria & custom comparators (each with ascending/descending order options).

#ThingUmbrella #OpenSource #Maintenance #TypeScript #JavaScript

In-memory column store database with indexing (WIP)

thi.ng/column-store

Finally have been trying out https://github.com/boyter/scc for counting (unique) lines of code, comments, DRYness and complexity and getting a better and more aggregated overview of the scale of my https://thi.ng/umbrella monorepo. SCC is really much better and faster than what I've been using previously (cloc) and also provides more meaningful results, including COCOMO project stats.

So selected current data points for this mega repo (incl. 214 projects and 185 example projects):

Estimated Cost to Develop (organic) $10,032,312
Estimated Schedule Effort (organic) 33.03 months
Estimated People Required (organic) 26.98

(This is equivalent of 74 years for one person and an assumed salary of $56k/year... Considering the repo in this form is only 8+ years old, that literally makes me a 9.25x developer 🙃)

#TypeScript
Files: 5,439
Lines of code: 323,816 (unique 161,337)
Comment lines: 85,303

#Zig
Files: 46
Lines of code: 4,828
Comment lines: 2,332

Markdown (aka #Documentation)
Files: 423
Lines: 66,370 (unique 31,330)

#ThingUmbrella #OpenSource #CodeAnalysis

GitHub - boyter/scc: Sloc, Cloc and Code: scc is a very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go

Sloc, Cloc and Code: scc is a very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go - boyter/scc

GitHub

It's Friday, spring is here (a bit too early) — it feels like a good day to share another minute recording of a variation of my Actiniaria piece which I worked on last spring and think also captures that much needed #BloomScrolling spirit...

See #Actiniaria for more context...

(Note: Sadly Firefox still doesn't respect the Rec2020 color profile in the video, please download the video or use Chrome or Safari for full viewing pleasure...)

#GenerativeArt #AlgorithmicArt #NoAI #ThingUmbrella #GenArtAPI #Boids #Color #Video #Animation #TypeScript #WebGL

#ReleaseSunday 🎉 Quite a few https://thi.ng/column-store updates over the past month, including further performance optimizations, more tests and documentation updates...

Just also added a small section and diagram illustrating the extensive use of bit-fields and bitmap-based indexes to optimize query processing and the stepwise narrowing of result sets in multi-term queries. Depending on column configuration and query term/operator type, individual rows often do not need to be visited/checked at all (only their bitfields are combined). But even if a traversal is necessary, the use of bitfields allows the engine to only having to check rows which have already been pre-selected by previous terms in the query. Apart from some exceptions, no interim result arrays are created. Queries are also short circuiting, i.e. terminate the moment a sub-term does not produce any results...

Happy coding! :)

#ThingUmbrella #Database #Query #Optimization #Bitfield #OpenSource #TypeScript #JavaScript

RE: https://mstdn.social/@inecas/116125098722422939

PSA: All the thi.ng subdomains should be working again. I upgraded Caddy yesterday and together with the recent DNS handling changes on Hetzner, Let's Encrypt challenges stopped working. All fixed again now...

#ThingUmbrella

Latest harvest of "Light Streaks" — generative photography (see start of thread for context and an explanation of the technique...)

Again, all of these variations are still from the exact same system and choice of five randomly chosen functions. The only variable between them is the initial random seed number. Exposure here is between 5-10 billion iterations... I'm amazed by just how varied the outcomes are, still regularly encountering directions I haven't seen before...

#Monochrome #Light #Simulation #LongExposure #Fractal #IFS #GenerativePhotography #GenerativeArt #AlgorithmicArt #ThingUmbrella #TypeScript

More variations of "Light Streaks" — generative photography... A small selection of long-exposures of randomly generated IFS (aka Iterated Function Systems). See start of thread for context and an explanation of the technique...

All of the variations in this post and the following ones are from the exact same system and choice of functions. The only variable here is the random seed number.

#Monochrome #Light #Simulation #LongExposure #Fractal #IFS #GenerativePhotography #GenerativeArt #AlgorithmicArt #ThingUmbrella #TypeScript