#ReleaseSaturday — This week I've been working on extracting, refactoring & generalizing the minimal column store database I've been using for my personal knowledge/media management toolset, and I'm happy to share it with the world now:

https://thi.ng/column-store

This is an in-memory column store database with:

- Customizable column storage types with configurable min/max cardinality, support for optional and/or tuple-values, default values
- Support for custom column type implementations
- Optional dictionary encoding of column values (memory & filesize saving)
- Powerful extensible multi-term query engine with built-in OR/AND/NOR/NAND operators and predicate-based matchers (column, row, partial row). Queries can be pre-built and then executed as standard JS iterables
- Optional bitfield indexing for dramatic query acceleration (esp. for complex multi-term queries)
- Dynamic adding/removing of columns
- JSON serialization with optional RLE compression (in my PKM dataset with ~20k items, the RLE compressed version is only 29% of the normal JSON serialization)

I hope the readme and code examples give a decent overview for now... I've been using the overall system for a couple of years now, but this new packaged version is still marked as _alpha_. Everything's still being worked on.

Also, for those wondering what's the point of this all and why not using SQLite etc. — I find there're many use cases for a which a pure JSON-based approach is more than sufficient (without requiring extra tools and interfacing layers). The structure/storage model and the bitfield optimizations enable very fast query performance (compared to other JSON db's I've tried in the past)...

(Including all dependencies [only some other thi.ng packages], the entire DB package is ~6KB brotli'd, 19KB uncompressed...)

#ThingUmbrella #TypeScript #JavaScript #JSON #Database #QueryEngine #RLE #SmallWeb

#ReleaseSaturday — Just added 35 new color palettes (255 in total now) to https://thi.ng/color-palettes. All of these are based on images and dominant colors have been extracted via this tool below and then partially hand edited. The SVG swatches were generated via a custom tool (included in the project repo).

The package provides accessors for obtaining themes as CSS hex colors, RGB or LCH tuples. Themes can also be programmatically selected/filtered by a number of composable criteria (examples in the readme)...

https://demo.thi.ng/umbrella/dominant-colors/

#ThingUmbrella #Color #OpenSource #TypeScript #JavaScript #SVG

Collection of 200+ image based color themes & composable theme query filters

thi.ng/color-palettes

#ReleaseSaturday #ThingUmbrella Already the 21st release cycle of the year...

As mentioned a few days ago, this time around, there're several major (as in semantic versioning major) updates, some listed below. Most of these are to do with new features, simplifying/streamlining API, more cross-project consistent semantics & naming conventions. Also did quite a bit of work on updating various docs, examples, readme files and adding new examples (snippets & projects). All packages have been updated to use latest #TypeScript...

Please check out the change logs for details and/or get in touch (e.g. via GH discussions forum or in next stream, details to follow!) if you need any help/guidance...

List of updated packages:
https://github.com/thi-ng/umbrella/blob/develop/README.md#latest-updates

Brief top level overview:

https://thi.ng/atom - transacted state container updates API

https://thi.ng/geom - updated logic for splitting/partitioning shapes/groups by arc length

https://thi.ng/hiccup-canvas - update bg clear/fill

https://thi.ng/hiccup-svg - updated shape tree conversion & floating point precision handling

https://thi.ng/pixel - add 90/180/270 degree image rotations

https://thi.ng/rstream - new constructs, sidechain-related API updates

https://thi.ng/rstream-dot - simplified API (#GraphViz export)

https://thi.ng/rstream-gestures - support for resettable zoom

Hope you find any of this useful! If you want to support my #OpenSource work and help me make it more sustainable, please consider contributing via:

https://github.com/sponsors/postspectacular

https://www.patreon.com/thing_umbrella

Super thanks to those of you who're doing so already! 😍

Happy coding! :)

umbrella/README.md at develop · thi-ng/umbrella

⛱ Broadly scoped ecosystem & mono-repository of 190 TypeScript projects (and 155 examples) for general purpose, functional, data driven development - thi-ng/umbrella

GitHub

Another day, another #ThingUmbrella #ReleaseSaturday:

Here are (some of) the many ways to iterate any 2D grid with https://thi.ng/grid-iterators - These are only the basic orders/variations, not including symmetries, reversals etc. Also at least 5 of these methods are parametric/configurable...

For example, the latest version also provides diagonal iterators with configurable slope (previously only 45° angles/orders)...

All in all, this is probably one of the most underused packages (by others), but in my own work I'm constantly finding new uses for it, e.g. bitmap image vectorization, pattern generation, simplifying nested loops, allocating jobs/regions for web workers, bucket order for renderers etc.

#ReleaseSaturday and of special interest for #AxiDraw #PenPlotter aficionados: This round includes the pre-announced (and meanwhile revised/extended) new packages:

- https://thi.ng/axidraw: Declarative plotter controller

- https://thi.ng/geom-axidraw: Shape/geometry conversion to AxiDraw commands w/ *detailed* options (per shape) for draw controls, shape & point ordering & clipping etc.

Also updates to other geom packages. Pls check changelogs for details!

Btw. This timelapse shows the thi.ng logo sampled w/ blue noise & nearest neighbor point re-sorting to optimize draw order (minimize draw duration)

#ThingUmbrella