Added a convolution kernel filtering operator for polygons/polylines to https://thi.ng/geom, incl. some useful preset kernels: box filter, triangle, gaussian, all with configurable size...
The image shows effects of various kernel sizes & iterations. Unlike with subdivision smoothing, here each version has the exact same number of vertices, only their positions are impacted: orange = box, magenta = triangle, blue = gaussian
(For now the operator is only implemented for polygons (also w/ holes) & polylines, but can be extended to other shape types...)
pro tip: learning this the hard way, if you're trying to fix linter issues based on ouput with #python or #typescript start fixing from the bottom of the output because if you start on the top then all of your changes will effect the downstream line number references.
Added a new[1] configurable curve subdivision kernel for https://thi.ng/geom to (iteratively) subdivide polygons/polylines with displacement, allowing for super compact code, infinite variation, and beautiful results like shown...
[1] Actually been using this approach since 2010, initially for 3D mesh subdivisions (3rd image)
We are excited about React Compiler, aren't we? I just remembered that my first OSS library in JavaScript was a JS-to-JS compiler! Funny how things come around.
🦾 Functional TypeScript #1: Algebraic Data Types | Injuly
"In functional programming, algebraic types are so ubiquitous that you would be hard pressed to find a language that doesn't support them. Strangely though, nothing about them demands that a language be functional by paradigm. That imperative languages have avoided ADTs for decades seems almost an accident."
After an 8-year break from web development, I evaluated modern tech stacks to build my personal projects in 2024. This post chronicles my journey in selecting the perfect combination of backend, frontend, database, and hosting.
Another leak in the JavaScript single-threaded facade (or a bug in Jest, really).
Asserting expect(...).toStrictEqual(...) fails with two structurally identical objects created by two different Node worker threads because their prototypes are not the same (though identical). Asserting expect(structuredClone(...)).toStrictEqual(structuredClone(...)) works.
#Shopware 6.6.2.0 released containing 44 bug fixes and cool improvements, especially for developers, for example #typescript support for extensions, automatic compiling of JS/SCSS of plugin sub-bundles, #meteor component library in administration etc.
This project is actually a byproduct of another big thing I'm working on.
Currently, I use YNAB for budgeting, but I've been putting sustained effort into getting my data out of the cloud and self-hosting everything.
I started researching options for budgeting software, and I really couldn't find anything I liked or that felt like it had enough features.
I decided, then, to just whip up something in Excel... which led me to the discovery of Office.js and the ability to build Add-ins for Excel using web tech.
Thus, vue-excel was born.
I may eventually release my budgeting tool for Excel, when it's feeling a little more mature and stable. Stay tuned... ❤️
Still only on a feature branch, but over the past few days I've been working on updating https://thi.ng/geom to add support for polygons with holes and paths with holes (or more generally support for sub-paths, e.g. multiple curves). Since both of these shape types are containers of multiple geometries and therefore require in some situations (e.g. shape conversions) different handling than the other shapes with a single boundary/geometry, adding support for these also includes updating a dozen or so polymorphic shape operators/functions and unfortunately will involve a few of breaking changes. For instance, some of these functions are returning an array of shapes now, instead of just a single one. Also related, some of the other geom support packages (e.g. https://thi.ng/geom-axidraw, https://thi.ng/geom-sdf) will have to be refactored more and partially have been already (likely only internally, though)...
As part of this work, I've also just added example #160(!!!) to demonstrate & test out some of this new functionality:
Congrats to the 9 applicants who got accepted into GSoC with GNOME! 🧑🎓
They'll be working on
• Rework Bustle's Diagram
• Add TypeScript Support to Workbench
• Port Workbench demos to Vala, new library
• Create a web IDE for Tracker SPARQL (2x)
• Mobile/touch support for Papers
• More durable synching for FlatSync
• Port libipuz to Rust
• Add support for the latest GIR attributes and gi-docgen formatting to Valadoc