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:
This probably doesn't matter for most, but interesting anyway:
"To complete an operation like const [a, b] = function_that_returns_an_array(), JavaScript constructs an iterator that iterates through the array instead of directly indexing from the array, which is slower. "
#JavaScript—I’m still a big fan of server-sent events (SSE): They provide a very simple API for sending messages from server to client. That means you often don’t need a library:
– Messages from client to server: use HTTP(S) requests (REST).
– Messages from server to client: SSE
This is a little something I ended up playing around with this morning before figuring out how to do it (after spending far too much time down a rabbit hole with object destructuring when what I really needed was creative use of the spread operator).
#JavaScript dependency management is the reason for my ever increasing amount of grey hair.
I'm somebody who keeps their dependencies updated on a very regular basis, but still end up in those rabbit holes where update x needs y updated which needs z migrated to gamma because alpha was replaced with the now outdated beta because the community doesn't think it's cool anymore. or so.
Has anyone put any thought into how to protect your personal blog from the generative ai scrapers? I've already blocked openai in robots.txt, but it seems like more and more small #generativeAI providers are popping up who don't honor these requests?
Maybe a noise filters artists are using with invisible characters but then again how do I make sure Google bot can see my posts? I don't care about humans using my work but I take issue with machines
But it's a struggle to come up with a solution. Everything I can think of hurts accessibility of my content. Invisible characters could break screen readers. Dynamic #javascript or decrypt my content is bad, and isn't really that strong, so I'm at a loss.
Fun fact about the Langchain's logo. The parrot and a chain link were inspired by people calling LLMs stochastic parrots. Models mimic human writing but don't really understand what they're saying. #Langchain serves to "chain" the "parrots" together 😃 #llm#javascript#webdev
> [HTMX] can get you 80% there with radically less complexity. No extra dependencies, no build step, no advanced tooling (now re-written in Rust!), no complicated state management, no “double data” problem, no hydration mismatch… Just write your HTTP server and return HTML!
• Forgetting to pass a custom class that’s persisted in your database in your JSDB.open() call now throws instead of corrupting your database by falling back to using an untyped object.
• Added JSDF ver. 2 to 3 database migration script (i.e., JSDB version 2-4 to 5)²