To put the "large" package size a little more into perspective: I don't know of any other feature-comparable JS vector library which provides all of the following:
- Generic n-dimensional float, int, uint, boolean vectors - Size optimized versions for 2D/3D/4D (all types) - Multiple-dispatch wrappers (auto-delegating to available optimized versions) - Memory-mapped vectors and optimized versions for various memory layouts (e.g. SOA/AOS) - Optimized versions of many vector-scalar ops - Optimized compound operations (like multiply-add etc.) - Vector randomizations (several approaches) - 99% of GLSL vector operations & conversions - Vector versions of most of JS `Math` ops - Vector interpolations (linear, bilinear, cubic, quadratic...) - 10 different distance functions & metrics - Swizzling & vector coercion/extension - Dozens of additional graphics, statistics & ML-related operations
Just a quick #ThingUmbrella update to say that I've already replaced the https://thi.ng/vectors package on the develop branch and after LOTS of deep experimentation have decided NOT to split up the package. There will be a few (minor) breaking changes, mainly because of enforcing more consistent naming and more granularity in some source files (therefore possibly changed imports, though only if you use direct ones for individual functions...). All in all, I've managed to keep the impact on users to a bare minimum (likely unnoticeable for most), even though it's pretty much a complete rewrite of the entire package (with all its ~900 functions)... This package is now almost 10 years old and I'm very happy how this refactor turned out!
In terms of file size impact: The FULL minified pkg bundle is now 56.4KB vs previously 48.5KB, however the code density has improved and the brotli-compressed pkg size is only 15.1KB (only 1KB larger than before), which I found absolutely incredible! 🎉 I also have to state once more that this package (and most others in #ThingUmbrella) are _designed for tree shaking_ and bundling. Hardly any project would ever use the full set of functions provided here all at once, most will only use a small/tiny subset...
Also — more importantly — many of the 185 example projects in the repo are now showing between 2-25% smaller final bundle sizes. Some also have become slightly larger, but so far I found the most by only ~2%...
Related to this change: I've also updated the https://thi.ng/color & https://thi.ng/matrices packages to be free from dynamic code generation now! The only packages still using `new Function(...)` are the following, but for those it's unavoidable and dynamic code generation is a core feature:
In recent years every spring seems to turn into a period of _massive_ refactoring & restructuring in #ThingUmbrella — maybe it's a form of spring cleaning, even though the reasons[1] are not seasonal... Currently spending my nights reworking the https://thi.ng/vectors package (likely one of the most comprehensive vector packages available for TS/JS) and trying out different splits/structures, testing their impact on package sizes and usability in existing downstream packages. Currently over 3000 source files with uncommitted changes... aaaarrrgghh! 🤯
Most functions (vector operations) in this package exist in multiple versions (many code generated, but now in need to be updated): Generic n-dimensional, loop-free, optimized 2D/3D/4D versions and strided versions for manipulating vectors views of larger nD data buffers (supporting all kinds of data layouts, incl. AOS, SOA, hybrid...)
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
Data analysis in Jupyter notebooks with... TypeScript?! 😱 ✅ using `fetch` and other web standards ✅ fast dataframes with nodejs-polars ✅ easy charts with @observablehq ✅ rich interactive UIs with JavaScript
Dnes otázka od bývalého kolegy: "a proč se zase učíš #JavaScript, když se vším už pomůže AI?" Zároveň mě informoval, že vytváří mobilní aplikaci ve Flutteru pomocí ChatGPT (podotýkám, že on sám nemá žádné programátorské zkušenosti). Svět je už v háji... #dobaKonce
I had a bit of free time this weekend and finally got around to trying something “real” with WASM components. I wanted to test cross language interoperability on something big.
I was able to successfully componentize a natural language parser written in JavaScript using jco, and then call it from a Rust application 😂 there were… a few snags along the way, but it DOES work!
#ReleaseWednesday Just pushed a new version of https://thi.ng/block-fs, now with additional multi-command CLI tooling to convert & bundle a local file system tree into a single block-based binary blob (e.g. for bundling assets, or distributing a virtual filesystem as part of a web app, or for snapshot testing, or as bridge for WASM interop etc.)
Also new, the main API now includes a `.readAsObjectURL()` method to wrap files as URLs to binary blobs with associated MIME types, thereby making it trivial to use the virtual filesystem for sourcing stored images and other assets for direct use in the browser...
ALT text detailsScreenshot excerpt from the project readme (link in post) containing information about the CLI wrapper, as well as example usage (here to convert/bundle as filesystem tree)
ALT text detailsScreenshot excerpt from the project readme (link in post) containing information about the CLI wrapper, as well as example usage (here to list contents of an already bundled filesystem)
Data analysis in Jupyter notebooks with... TypeScript?! 😱 ✅ using `fetch` and other web standards ✅ fast dataframes with nodejs-polars ✅ easy charts with @observablehq ✅ rich interactive UIs with JavaScript
I'm working on a project that is intended to encourage folk to make markdown text files which can be bundled together in different bundles of text files using a package manager.
Question for coders; Which package manager would you suggest I use?
Main criterias (in order) are:
1. Easy for someone with basic command line skills to edit the file and update version numbers and add additional packages.
2. All being equal, more commonly and easy to setup is preferred.
Do you have any suggestions, tips, opinions, dos, don’ts about headless CMSes?
I have a growing list of small/mid non-profits and collectives asking for my help to (re)make their website. I totally want to help, but I don’t have much time, especially considering that they generally have little or no funding—I would most definitely point them to @VillageOneCoop, otherwise.
Therefore, I want a super simple and replicable solution where I can copy-paste most of the code, while providing them with a stable, fast, and modern solution. I had a look at the Headless CMS section in the Jamstack website, but I need opinions from people who actually used some of that software already.
Needs
I want to code and configure everything using @eleventy
Admin interface (#WebApp) for the client to add pages and write posts
Static website in the front-end
Simple and reliable CI/CD
No/minimal maintenance after the first setup
Self-hostable (I was taking this for granted so much that I forgot to write it)
If it requires forge integration, it should support #ForgeJo
Do you have any suggestions, tips, opinions, dos, don’ts about headless CMSes?
I have a growing list of small/mid non-profits and collectives asking for my help to (re)make their website. I totally want to help, but I don’t have much time, especially considering that they generally have little or no funding—I would most definitely point them to @VillageOneCoop, otherwise.
Therefore, I want a super simple and replicable solution where I can copy-paste most of the code, while providing them with a stable, fast, and modern solution. I had a look at the Headless CMS section in the Jamstack website, but I need opinions from people who actually used some of that software already.
Needs
I want to code and configure everything using @eleventy
Admin interface (#WebApp) for the client to add pages and write posts
Static website in the front-end
Simple and reliable CI/CD
No/minimal maintenance after the first setup
Self-hostable (I was taking this for granted so much that I forgot to write it)
If it requires forge integration, it should support #ForgeJo
I am in urgent job search mode, so I'm gonna throw this out here and see if anything comes of it.
I am a #Canadian, fluent in both #English and #French. I have experience with several programming languages. My strongest proficiency is with #Haskell and #C. I also have a reasonable grasp of #HTML, #JavaScript, #SQL, #Python, #Lua, #Linux system administration, #bash scripting, #Perl, #AWK, some #Lisp (common, scheme, and emacs), and probably several others I've forgotten to mention.
I am not necessarily looking for something in tech. I just need something stable. I have done everything from software development, to customer support, to factory work, though my current circumstances make in-person work more difficult than remote work. I have been regarded as a hard worker in every job I have ever held.
I am in urgent job search mode, so I'm gonna throw this out here and see if anything comes of it.
I am a #Canadian, fluent in both #English and #French. I have experience with several programming languages. My strongest proficiency is with #Haskell and #C. I also have a reasonable grasp of #HTML, #JavaScript, #SQL, #Python, #Lua, #Linux system administration, #bash scripting, #Perl, #AWK, some #Lisp (common, scheme, and emacs), and probably several others I've forgotten to mention.
I am not necessarily looking for something in tech. I just need something stable. I have done everything from software development, to customer support, to factory work, though my current circumstances make in-person work more difficult than remote work. I have been regarded as a hard worker in every job I have ever held.
Nonfree #JavaScript may be taking away your freedom without your realizing it! Many web sites require proprietary JavaScript. Nonfree JavaScript subjugates users in the same way as any piece of proprietary software. Learn more: https://u.fsf.org/freejs
I am in urgent job search mode, so I'm gonna throw this out here and see if anything comes of it.
I am a #Canadian, fluent in both #English and #French. I have experience with several programming languages. My strongest proficiency is with #Haskell and #C. I also have a reasonable grasp of #HTML, #JavaScript, #SQL, #Python, #Lua, #Linux system administration, #bash scripting, #Perl, #AWK, some #Lisp (common, scheme, and emacs), and probably several others I've forgotten to mention.
I am not necessarily looking for something in tech. I just need something stable. I have done everything from software development, to customer support, to factory work, though my current circumstances make in-person work more difficult than remote work. I have been regarded as a hard worker in every job I have ever held.
Biome has released v2.0 beta with support for custom plugins, domain-specific linting, and multi-file analysis. The update brings type-aware rules to the Rust-powered #JavaScript toolchain. Next up: @biomejs plans to add HTML support and embedded languages in 2025. https://socket.dev/blog/biome-announces-v2-0-beta#TypeScript
Just made my day: "I somehow made it to March 2025 before being aware of https://thi.ng/ - an incredible mountain of code created primarily by a prolific genius, full of ideas that are like catnip to me."
(Also, to clarify, even though thi.ng/hiccup and a small selection of other thi.ng libs started out porting concepts widely used in Clojure (the language I spent 7 years with previously), in many cases the scope, features, usability & potential use cases have been far extended far beyond their "originals" and it sometimes saddens me that these are often just plainly ignored or mis-labeled/described...)
> HarmonyOS initially began as a project based on the Android Open Source Project and the Linux kernel, allowing compatibility with existing Android apps. In 2023, Huawei introduced HarmonyOS NEXT, a new iteration built on a custom microkernel and proprietary technology frameworks.
> Unlike its predecessor, HarmonyOS NEXT does not support Android or Windows applications. Instead, it uses a native application format based on JavaScript, TypeScript, and an optimized compiler designed to accelerate JavaScript execution. In 2024, Huawei confirmed its plans to replace Windows with HarmonyOS for its upcoming PC models.
> In addition to its HarmonyOS-based PC, Huawei is developing a Linux-based system, according to MyDrivers. The upcoming MateBook D16 Linux Edition will feature the same hardware as the standard MateBook D16, with an unnamed Linux distribution replacing Windows.
ALT text detailsScreenshot of 4'33" website, showing several boxes with audio players and their features. A play button and a time element are available on each player. The time starts at 00:00:00
ALT text detailsScreenshot of 4'33" website, showing several boxes with audio players and their features. A play button and a time element are available on each player. The time starts at 00:00:00
To avoid a massive OpenCV dependency for a current project I'm involved in, I ended up porting my own homemade, naive optical flow code from 2008 and just released it as a new package. Originally this was written for a gestural UI system for Nokia retail stores (prior to the Microsoft takeover), the package readme contains another short video showing the flow field being utilized to rotate a 3D cube:
ALT text details20 second screen recording of me waving my hand in camera and visualizing the resulting optical flow field (as blue arrows). The thick red line shows the field's average movement vector for the current frame.
- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage) - Built-in OTel tracing for node:http.request - LSP now starts the TypeScript server lazily
- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage) - Built-in OTel tracing for node:http.request - LSP now starts the TypeScript server lazily
- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage) - Built-in OTel tracing for node:http.request - LSP now starts the TypeScript server lazily
- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage) - Built-in OTel tracing for node:http.request - LSP now starts the TypeScript server lazily
- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage) - Built-in OTel tracing for node:http.request - LSP now starts the TypeScript server lazily
- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage) - Built-in OTel tracing for node:http.request - LSP now starts the TypeScript server lazily
- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage) - Built-in OTel tracing for node:http.request - LSP now starts the TypeScript server lazily
- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage) - Built-in OTel tracing for node:http.request - LSP now starts the TypeScript server lazily
Leaky buckets are commonly used in communication networks for rate limiting, traffic shaping and bandwidth control, but are equally useful in other domains requiring similar constraints.
A Leaky Bucket is a managed counter with an enforced maximum value (i.e. bucket capacity). The counter is incremented for each a new event to check if it can/should be processed. If the bucket capacity has already been reached, the bucket will report an overflow, which we can then handle accordingly (e.g. by dropping or queuing events). The bucket also has a configurable time interval at which the counter is decreasing (aka the "leaking" behavior) until it reaches zero again (i.e. until the bucket is empty). Altogether, this setup can be utilized to ensure both an average rate, whilst also supporting temporary bursting in a controlled fashion...
Related, I've also updated/simplified the rate limiter interceptor in https://thi.ng/server to utilize this new package...
just under TWO WEEKS until the submission deadline for Good Internet magazine: march 15, 2025!
☂️ Good Internet launches in May 2025. it's a volunteer-run, not-for-profit print and digital quarterly magazine for personal website owners and those interested in using the internet as a means of self-expression, art, and recreation.
🔎 we're looking for 1,500 to 4,000 word articles about anything for that audience!
* internet history * personal websites & blogs * #accessibility on the #indieweb * finding inspiration for a #blog * #webdesign trends (current or old) * running from the #enshittification of the web * lessons or post-mortems from web projects * news or overviews of #opensource projects * #privacy on the indieweb
🔍 also looking for any #art submissions centered around the web, coding, internet culture, and digital art!
if it relates to hobbies on "this side of the web," we probably want to run it!
✨ you can have your article submitted as text and images only OR you can code a whole webpage that helps tell your story!
🌊 if you're interested in learning more, sign up for our email list or check out the submission guidelines @ https://goodinternetmagazine.com!
🙏 (please boost if you can! <3 getting the word out helps so much!)
Ever wanted to add a new lint rule but gave up because fixing all existing files felt impossible? 🤔 Enter Lint to the Future—a way to progressively improve massive codebases *without* overwhelming PRs or ignored warnings.
just under TWO WEEKS until the submission deadline for Good Internet magazine: march 15, 2025!
☂️ Good Internet launches in May 2025. it's a volunteer-run, not-for-profit print and digital quarterly magazine for personal website owners and those interested in using the internet as a means of self-expression, art, and recreation.
🔎 we're looking for 1,500 to 4,000 word articles about anything for that audience!
* internet history * personal websites & blogs * #accessibility on the #indieweb * finding inspiration for a #blog * #webdesign trends (current or old) * running from the #enshittification of the web * lessons or post-mortems from web projects * news or overviews of #opensource projects * #privacy on the indieweb
🔍 also looking for any #art submissions centered around the web, coding, internet culture, and digital art!
if it relates to hobbies on "this side of the web," we probably want to run it!
✨ you can have your article submitted as text and images only OR you can code a whole webpage that helps tell your story!
🌊 if you're interested in learning more, sign up for our email list or check out the submission guidelines @ https://goodinternetmagazine.com!
🙏 (please boost if you can! <3 getting the word out helps so much!)
just under TWO WEEKS until the submission deadline for Good Internet magazine: march 15, 2025!
☂️ Good Internet launches in May 2025. it's a volunteer-run, not-for-profit print and digital quarterly magazine for personal website owners and those interested in using the internet as a means of self-expression, art, and recreation.
🔎 we're looking for 1,500 to 4,000 word articles about anything for that audience!
* internet history * personal websites & blogs * #accessibility on the #indieweb * finding inspiration for a #blog * #webdesign trends (current or old) * running from the #enshittification of the web * lessons or post-mortems from web projects * news or overviews of #opensource projects * #privacy on the indieweb
🔍 also looking for any #art submissions centered around the web, coding, internet culture, and digital art!
if it relates to hobbies on "this side of the web," we probably want to run it!
✨ you can have your article submitted as text and images only OR you can code a whole webpage that helps tell your story!
🌊 if you're interested in learning more, sign up for our email list or check out the submission guidelines @ https://goodinternetmagazine.com!
🙏 (please boost if you can! <3 getting the word out helps so much!)
🆕 blog! “Using the Web Crypto API to Generate TOTP Codes in JavaScript Without 3rd Party Libraries”
The Web Crypto API is, thankfully, nothing to do with scammy cryptocurrencies. Instead, it provides access to powerful cryptographic features which were previously only available in 3rd party tools.
🆕 blog! “Using the Web Crypto API to Generate TOTP Codes in JavaScript Without 3rd Party Libraries”
The Web Crypto API is, thankfully, nothing to do with scammy cryptocurrencies. Instead, it provides access to powerful cryptographic features which were previously only available in 3rd party tools.
🆕 blog! “Using the Web Crypto API to Generate TOTP Codes in JavaScript Without 3rd Party Libraries”
The Web Crypto API is, thankfully, nothing to do with scammy cryptocurrencies. Instead, it provides access to powerful cryptographic features which were previously only available in 3rd party tools.
Someone sent me a joke of a boycott poster saying don’t use <some evil corp> products on Feb 29, 30, and 31.
Since I’ve been cursed with having to port some JavaScript recently, the thought immediately struck me “dude, I wonder what hot garbage JS will spit out if I try to parse a date that doesn’t exist?”
ALT text detailsA screenshot of a JavaScript console with the following code:
new Date('2025-02-31')
The output of the expression is Mon Mar 03 2025 09:00:00 GMT+0900 (Korean Standard Time)
Hey everyone, what's cooking in the open-source universe? 🤯 I just stumbled upon something that's seriously mind-blowing.
So, there's this Python library pretending to be a music tool (automslc), but get this – it's actually illegally downloading songs from Deezer! And the worst part? It turns your computer into an accomplice in a huge music piracy operation. Seriously, a digital pirate cove. 🏴☠️
And then there's this npm saga with @ton-wallet/create... Crypto wallet emptied, just like that! 💸
The moral of the story? Open source rocks, but blindly trusting everything is a recipe for disaster. Always double-check those dependencies! Automated scans are cool, but a real penetration test? That's pure gold. 🥇
Clients are always so appreciative when we can spot and fix this kind of stuff beforehand!
Now, I'm curious: What are your go-to methods for keeping your codebase squeaky clean and secure? Any tips or tricks you'd like to share?
#ReleaseTuesday Just released a new version of https://thi.ng/scenegraph which has some minor breaking changes and also includes a new feature to zoom/scale and translate a node with a given reference point, such that this reference point remains constant in global space. This is very useful for creating zoomable UIs where we want to zoom towards a cursor position (rather than the scene's origin). I got tired to remember the maths and recreate this functionality each time I need it, so now it's just a single `node.scaleWithReferencePoint()` call...
Click & drag to pan, touchpad/mousewheel to zoom towards the cursor pos...
As for the breaking changes: Since the scene node constructors had quite a few (optional) arguments, I refactored them as options objects (aka named params), also improving readability. All other related/bundled examples have already been updated too, see a list in the package readme...
Soy un Tech Lead y entusiasta de Angular, al igual que muchos de ustedes. La evolución del framework es constante y apasionante. Comparto un hilo sobre las últimas novedades y lo que se anticipa para las próximas versiones. 🚀 #Angular#Angular18#Angular19#Angular20#webdev#javascript#frontend
I always thought there is no way to track upload progress with fetch. Here my idea: I can pass a ReadableStream as body. Can I track upload progress through a proxy stream? At the moment I am using XMLHttpRequest just for tracking upload requests. But the XMLHttpRequest is annoying to handle and hard to read #WebDev#JavaScript
To learn more about how Kitten automatically implements authentication for your Small Web sites and apps using public-key cryptography (so even your own server doesn’t know your secret)¹, please see the Authentication tutorial:
¹ The security (and privacy) of Domain/Kitten are based on a 32-byte cryptographically random secret string that only the person who owns/controls a domain knows.
This is basically a Base256-encoded ed25519 secret key where the Base256 alphabet is a set of curated emoji surrogate pairs without any special modifiers chosen mainly from the animals, plants, and food groups with some exceptions (to avoid common phobias or triggers, etc.) that we call KittenMoji.
…
When setting up a Small Web app via Domain, this key is generated in the person’s browser, on their own computer, and is never communicated to either the Domain instance or the Kitten app being installed. Instead the ed25519 public key is sent to both and signed token authentication is used when the server needs to verify the owner’s identity (e.g., before allowing access to the administration area).
The expected/encouraged behaviour is for the person to store this secret in their password manager of choice.
To learn more about how Kitten automatically implements authentication for your Small Web sites and apps using public-key cryptography (so even your own server doesn’t know your secret)¹, please see the Authentication tutorial:
¹ The security (and privacy) of Domain/Kitten are based on a 32-byte cryptographically random secret string that only the person who owns/controls a domain knows.
This is basically a Base256-encoded ed25519 secret key where the Base256 alphabet is a set of curated emoji surrogate pairs without any special modifiers chosen mainly from the animals, plants, and food groups with some exceptions (to avoid common phobias or triggers, etc.) that we call KittenMoji.
…
When setting up a Small Web app via Domain, this key is generated in the person’s browser, on their own computer, and is never communicated to either the Domain instance or the Kitten app being installed. Instead the ed25519 public key is sent to both and signed token authentication is used when the server needs to verify the owner’s identity (e.g., before allowing access to the administration area).
The expected/encouraged behaviour is for the person to store this secret in their password manager of choice.
Missed the #LPI 25th anniversary giveaway? We’re extending the deadline!
To show our appreciation for the community that makes our efforts to support #FOSS possible: every 25th candidate who takes an #LPI exam Jan. 1 - March 31st will receive a free voucher for their next exam!
Missed the #LPI 25th anniversary giveaway? We’re extending the deadline!
To show our appreciation for the community that makes our efforts to support #FOSS possible: every 25th candidate who takes an #LPI exam Jan. 1 - March 31st will receive a free voucher for their next exam!
Going live in a few minutes! Join me as building tools for SOMOS.tech using JavaScript (yuck) and Azure!
Yesterday we got a chatbot working (yay me!) from scratch.
Today? No idea.
But we’re learning and cursing along the way.
Expect some frustration, and my first test of a custom multistreaming setup—fingers crossed it works! Come hang out, chat, and let’s figure this out together.
I'd like to *finish* this #JavaScript library and guarantee it will receive no further updates. To do that, I must first find and test every edge case. That seems like it might be possible because it's only 18 lines of code.
Very likely today I will start the gen-AI related project for SOMOS.tech. I'll be building from scratch using TypeScript/JavaScript. And when I say from scratch, I mean from ZERO—creating the repo and setting up my VSCode and extensions. Just a fair warning, I'm not a Javascript expert, so expect some learning pains, frustration, and maybe a few cursed words along the way. #GenAI#SOMOStech#TypeScript#JavaScript
Very likely today I will start the gen-AI related project for SOMOS.tech. I'll be building from scratch using TypeScript/JavaScript. And when I say from scratch, I mean from ZERO—creating the repo and setting up my VSCode and extensions. Just a fair warning, I'm not a Javascript expert, so expect some learning pains, frustration, and maybe a few cursed words along the way. #GenAI#SOMOStech#TypeScript#JavaScript
My book on 📘 LangGraph & AI Agents is almost ready to launch! Please help chose the book cover design. Just add in the comments your vote, or any suggestions. And btw, you can check the Table of Contents here: 👉 https://forms.gle/SZpqDgWWmzg3pYXWA
My book on 📘 LangGraph & AI Agents is almost ready to launch! Please help chose the book cover design. Just add in the comments your vote, or any suggestions. And btw, you can check the Table of Contents here: 👉 https://forms.gle/SZpqDgWWmzg3pYXWA
I'm going to build building an AI-powered app from scratch, focusing on javascript/typescript/azure and possibly dotnet for SOMOS.tech. I've got about a month to get it done, so it's going to be a wild ride!
I'm going to stream the process live and build in public.
However, due to my peculiar hours, the streaming might come with little to no notice.
Absolutely wild fact: creating a new V8 isolate (assuming I’m not “holding it wrong”) and compiling a large ES module can take over 100ms. But creating a new component instance in wasmtime is more on the order of 10ms 🤔
I *think* this is roughly apples to apples.
(Though, as one might expect, running JS that’s transpiled to WASM without JIT is going to be relatively slow, but that’s another story.)
I have seen careful and pedantic coders build impressive things with python and js while I tend to make a mess that's impossible to maintain. I also waste many hours debugging.
So for me, a strictly typed language leads to long term productivity. I also take on bigger problems with confidence.
Over the past few months, we've made several improvements to our documentation: 🗂️ better organized examples 📸 video tutorials 💻 more documentation in API reference and much more —
Are you still using npm transpile services like esm.sh and unpkg.com? ❌ dependency deduplication ❌ install hooks and native add-ons ❌ loading data files
Here's why we recommend importing npm packages natively via npm specifiers 👇
I had a bit of free time this weekend and finally got around to trying something “real” with WASM components. I wanted to test cross language interoperability on something big.
I was able to successfully componentize a natural language parser written in JavaScript using jco, and then call it from a Rust application 😂 there were… a few snags along the way, but it DOES work!
Haven't talked about LogTape in a while—it's a #logging library I made for #JavaScript and #TypeScript. You know how logging can be a pain point in JavaScript/TypeScript development? Well, I tried to address some common frustrations.
What makes it special
Zero dependencies
We've all been there with dependency hell, right? #LogTape has absolutely no external dependencies. Install it without worrying about bloating your node_modules.
You can organize your logs in a tree structure. Want to save only database-related logs to a file? Easy to do. Child categories can inherit settings from their parents too, which keeps things clean and manageable.
Writing a library and want to include logs without stepping on your users' toes? LogTape lets you add logging to your library while giving end users complete control over how those logs are handled.
Haven't talked about LogTape in a while—it's a #logging library I made for #JavaScript and #TypeScript. You know how logging can be a pain point in JavaScript/TypeScript development? Well, I tried to address some common frustrations.
What makes it special
Zero dependencies
We've all been there with dependency hell, right? #LogTape has absolutely no external dependencies. Install it without worrying about bloating your node_modules.
You can organize your logs in a tree structure. Want to save only database-related logs to a file? Easy to do. Child categories can inherit settings from their parents too, which keeps things clean and manageable.
Writing a library and want to include logs without stepping on your users' toes? LogTape lets you add logging to your library while giving end users complete control over how those logs are handled.
Haven't talked about LogTape in a while—it's a #logging library I made for #JavaScript and #TypeScript. You know how logging can be a pain point in JavaScript/TypeScript development? Well, I tried to address some common frustrations.
What makes it special
Zero dependencies
We've all been there with dependency hell, right? #LogTape has absolutely no external dependencies. Install it without worrying about bloating your node_modules.
You can organize your logs in a tree structure. Want to save only database-related logs to a file? Easy to do. Child categories can inherit settings from their parents too, which keeps things clean and manageable.
Writing a library and want to include logs without stepping on your users' toes? LogTape lets you add logging to your library while giving end users complete control over how those logs are handled.
Haven't talked about LogTape in a while—it's a #logging library I made for #JavaScript and #TypeScript. You know how logging can be a pain point in JavaScript/TypeScript development? Well, I tried to address some common frustrations.
What makes it special
Zero dependencies
We've all been there with dependency hell, right? #LogTape has absolutely no external dependencies. Install it without worrying about bloating your node_modules.
You can organize your logs in a tree structure. Want to save only database-related logs to a file? Easy to do. Child categories can inherit settings from their parents too, which keeps things clean and manageable.
Writing a library and want to include logs without stepping on your users' toes? LogTape lets you add logging to your library while giving end users complete control over how those logs are handled.
Haven't talked about LogTape in a while—it's a #logging library I made for #JavaScript and #TypeScript. You know how logging can be a pain point in JavaScript/TypeScript development? Well, I tried to address some common frustrations.
What makes it special
Zero dependencies
We've all been there with dependency hell, right? #LogTape has absolutely no external dependencies. Install it without worrying about bloating your node_modules.
You can organize your logs in a tree structure. Want to save only database-related logs to a file? Easy to do. Child categories can inherit settings from their parents too, which keeps things clean and manageable.
Writing a library and want to include logs without stepping on your users' toes? LogTape lets you add logging to your library while giving end users complete control over how those logs are handled.
🚀 Big news for Node.js developers! require(esm) has been backported to Node.js 20, removing a major roadblock for ESM adoption. With Node 18 nearing EOL, library maintainers can finally go ESM-only with confidence. 🎉
🚀 Big news for Node.js developers! require(esm) has been backported to Node.js 20, removing a major roadblock for ESM adoption. With Node 18 nearing EOL, library maintainers can finally go ESM-only with confidence. 🎉
🚀 Big news for Node.js developers! require(esm) has been backported to Node.js 20, removing a major roadblock for ESM adoption. With Node 18 nearing EOL, library maintainers can finally go ESM-only with confidence. 🎉
🚀 Big news for Node.js developers! require(esm) has been backported to Node.js 20, removing a major roadblock for ESM adoption. With Node 18 nearing EOL, library maintainers can finally go ESM-only with confidence. 🎉
Are you still using npm transpile services like esm.sh and unpkg.com? ❌ dependency deduplication ❌ install hooks and native add-ons ❌ loading data files
Here's why we recommend importing npm packages natively via npm specifiers 👇
Latest attempt at building better documentation for https://thi.ng/umbrella (also to make it available offline!): Having noticed that recent versions of TypeDoc support extracting & merging of doc strings from monorepos, over the past few weeks I've been updating/cleaning docstrings in hundreds of source files across all 200+ packages and started building a small tool to assemble a single/mega-page documentation (currently ~4.3MB of just HTML). The tool translates existing docstrings and references contained therein (and still used for the existing API docs) to support proper cross-package references.
Please be aware that so far this is only an early stage prototype and only contains very limited docs. I.e. there are no generics/typeparams, no details about classes/interfaces... But at least I know now HOW to add this all, as well as all the additional metadata I've already got (currently still only available via other custom tools/examples).
For example, there're links to the tag-based browser[1] and I'm also planning to add the fuzzy doc search engine/index[2] to this new documentation... The tag browser integration still needs more work in terms of correctly matching package names to tags. The underlying system is there already, just needs more work in terms of actually doing/assigning the concept mapping. Since most package names in thi.ng/umbrella are very plain/boring (for a reason), for many (most?) packages this already works pretty well:
ALT text detailsScreenshot of the documentation tool/page mentioned in the post, showing the API docs for this function (dark color scheme): https://docs.thi.ng/umbrella/#fuzzy-viz:instrumentStrategy
ALT text detailsScreenshot of the documentation tool/page mentioned in the post, showing the API docs for this function (light color scheme): https://docs.thi.ng/umbrella/#fuzzy-viz:instrumentStrategy
Donno about you guys but it sure is nice not to have to try and decipher the clusterfuck-like syntax of Hugo’s Go-based templating engine anymore…
The code on the left is Kitten¹, on the right is Hugo².
Kitten’s ‘template engine’ is just JavaScript tagged template strings.
(I’m porting the Small Technology Foundation web site³ from Site.js⁴ to Kitten, and in the process from being a Hugo-based static site to a dynamic one with a nice little admin panel I’m making to make it trivially easy to add new news items, events, and videos.)
Your web server having an interactive shell (REPL) where you can live update entries in your site/app’s database is pretty neat (if I do say so myself) :)
(I’m porting the Small Technology Foundation site¹ from Site.js² – and hence from being a static site generated via Site.js’s integrated Hugo³ – to Kitten⁴. In the process, I’m creating an admin panel⁵ for the news, events, and videos sections, which will make them easier to update, and storing the data in Kitten’s internal JavaScript Database⁶.)
Your web server having an interactive shell (REPL) where you can live update entries in your site/app’s database is pretty neat (if I do say so myself) :)
(I’m porting the Small Technology Foundation site¹ from Site.js² – and hence from being a static site generated via Site.js’s integrated Hugo³ – to Kitten⁴. In the process, I’m creating an admin panel⁵ for the news, events, and videos sections, which will make them easier to update, and storing the data in Kitten’s internal JavaScript Database⁶.)
• Kitten (rolling release) • @small-tech/https version 5.3.2 • Auto Encrypt version 4.1.3
OCSP support has been reinstated in the server so existing sites with Let’s Encrypt certificates provisioned prior to the removal of the OCSP stapling requirement will not fail to load in Firefox.
Kitten servers in production will automatically update to this version in a few hours. You can also sign in to the Kitten settings page on your server and do a manual update to update Kitten immediately.
Over the past few months, we've made several improvements to our documentation: 🗂️ better organized examples 📸 video tutorials 💻 more documentation in API reference and much more —
The latest development in @deno_land 's petition to cancel Oracle’s claim to the #JavaScript trademark: Oracle used Node.js as proof of use & is seeking to dismiss fraud claims, delaying the case and avoiding questions about its right to the name.
Over the past few months, we've made several improvements to our documentation: 🗂️ better organized examples 📸 video tutorials 💻 more documentation in API reference and much more —
The latest development in @deno_land 's petition to cancel Oracle’s claim to the #JavaScript trademark: Oracle used Node.js as proof of use & is seeking to dismiss fraud claims, delaying the case and avoiding questions about its right to the name.
The latest development in @deno_land 's petition to cancel Oracle’s claim to the #JavaScript trademark: Oracle used Node.js as proof of use & is seeking to dismiss fraud claims, delaying the case and avoiding questions about its right to the name.
I'm a #Programmer/#SoftwareEngineer. I'm most fluent in #Python, have some basics in #Java and #C++, but I'm also taking up new languages like #Javascript and others in my eternal journey of getting better and minimising the impostor syndrome that befalls pretty much all programmers (I feel). I'm also very experienced in #CloudNative/#DevOps technologies, and have been the one devising solutions and maintaining infrastructure in a fast-paced startup environment in my previous employment.
I'm passionate in what I do and those that know me here or IRL would know that I'm always yapping about the things I'm learning or working on - I love discussing them, and I love helping people out - esp those on the same boat as me.
This passion has led me into writing and maintaining tons of #FOSS projects like Mango: a content distribution framework based on #Django for #Mastodon and #Bluesky that powers various bots of mine like @lowyat@mastodon.social and @waktusolat@mastodon.social, Charts: a #Helm chart repository for an easy and reproducible deployment strategy for all my projects and everything else I self-host on my #homelab, and Orked: O-tomated #RKE2 distribution, a collection of scripts I wrote that are comprehensively documented to enable everyone to self-host a production-grade #Kubernetes cluster for absolutely free in their homes.
I'm based in Malaysia, but I'm open to just about any on-site, hybrid, or remote job opportunities anywhere. In the meantime though, I'm actively looking for a job in countries like #Japan and #Singapore, in a bid for a desperate lifestyle change. I've linked below my Portfolio (which you too, could self-host your own!), for those who'd wish to connect/learn more of me. Thank you ❤️
I'm a #Programmer/#SoftwareEngineer. I'm most fluent in #Python, have some basics in #Java and #C++, but I'm also taking up new languages like #Javascript and others in my eternal journey of getting better and minimising the impostor syndrome that befalls pretty much all programmers (I feel). I'm also very experienced in #CloudNative/#DevOps technologies, and have been the one devising solutions and maintaining infrastructure in a fast-paced startup environment in my previous employment.
I'm passionate in what I do and those that know me here or IRL would know that I'm always yapping about the things I'm learning or working on - I love discussing them, and I love helping people out - esp those on the same boat as me.
This passion has led me into writing and maintaining tons of #FOSS projects like Mango: a content distribution framework based on #Django for #Mastodon and #Bluesky that powers various bots of mine like @lowyat@mastodon.social and @waktusolat@mastodon.social, Charts: a #Helm chart repository for an easy and reproducible deployment strategy for all my projects and everything else I self-host on my #homelab, and Orked: O-tomated #RKE2 distribution, a collection of scripts I wrote that are comprehensively documented to enable everyone to self-host a production-grade #Kubernetes cluster for absolutely free in their homes.
I'm based in Malaysia, but I'm open to just about any on-site, hybrid, or remote job opportunities anywhere. In the meantime though, I'm actively looking for a job in countries like #Japan and #Singapore, in a bid for a desperate lifestyle change. I've linked below my Portfolio (which you too, could self-host your own!), for those who'd wish to connect/learn more of me. Thank you ❤️
I've worked with dates and times in several programming languages, and I have to say that the best is easily PHP (since the big refactor in, what was it, 5.6?).
I've worked with dates and times in several programming languages, and I have to say that the best is easily PHP (since the big refactor in, what was it, 5.6?).
#Introduction Greetings! I'm a #software developer in the world of #dotnet and #JavaScript. Worth mentioning - a degree in game dev and table tennis coaching credentials.
I won a Hackathon, and once increased sales by 300%. In my timeline, you'll mostly find reflections on programming, as it is my bread and butter, as my odyssey into open-source continues.
Here to exchange ideas, learn, and share wisdom. Open for spirited discussions. Always game for a chat, so feel free to reach out.
tl;dr I created an extension for the GNOME desktop on Linux, so that folks can stream and listen to music from The Indie Beat – an online radio station powered by independent musicians sharing music in the Fediverse, via Bandwagon.
Background
Independent musicians, creatives, artists, makers – these are all folk who often struggle to connect with audiences, and where retail and tech platforms tend towards squeezing their ability to make money from their work (see the excellent Chokepoint Capitalism by Cory Doctorow – essential reading for today’s world and understanding how it systematically squeezes creatives). Over the Christmas period, I finally deleted my Spotify account, after reading about yet more awful ways that company is destroying authentic creativity for their own profit.
I’ve been a huge fan of independent artists for a very long time. Back in the MySpace / MP3 / Napster days I came across folks who I now count as friends, amazing musicians such as Cindy Alexander, and Alex Cornish.
Up until recently there was a wonderful streaming station, RadioFreeFedi, that offered music from artists who had a presence in the Fediverse. Sadly, that has now gone away.
Over the past couple of years I’ve been attending Fediforum, an online conference where people building in the Fediverse gather to share projects and ideas. During the events in 2024, I came across two fantastic people with an interest in making things better for artists and musicians: Ben Pate, builder of the Emissary platform, which has a music-centric edition called Bandwagon; and Kirsten Lambertsen, a multi-talented web creative who runs Patron Hunt, and who spun up an alternative streaming station, The Indie Beat.
Happy New Year fedifriends!
I'm excited to officially announce the launch of TheIndieBeat.fm, a streaming radio station showcasing indie #music from the Fediverse.
The Indie Beat Radio is made possible through a collaboration with Bandwagon.fm / @benpate
Music artists who upload their work to Bandwagon.fm have the option to make tracks available for streaming on TheIndieBeat.fm
Our goal is to use federation to make less work for artists — upload once; distribute infinitely.
The Indie Beat builds on Bandwagon, so artists who share their music in the Fediverse via Bandwagon, can also choose to add them to rotation on The Indie Beat.
Some inspirations
I was nerd-sniped, I mean, inspired, to make something with The Indie Beat, in part through a nice blog post shared by Neil Brown (which was apparently prompted by me, so that’s nice and circular!) about how to add the streams from The Indie Beat into Linux music apps such as mpd.
I don’t use mpd, and to be honest I most often live on Apple platforms (but I do keep a Plex server, which I intend to move to Jellyfin this year as I work on improving my self-hosting and homelab situations). I was pretty sure that I’d seen a taskbar music player for GNOME, though. I usually run GNOME on my Linux systems – the exception being my MNT Pocket Reform, which is Sway with a minimal set of other desktop apps.
The player I was thinking of is the SomaFM internet radio extension, which is a menubar app that lists the SomaFM station streams, and allows the user to choose between them.
The process
The first iteration was a straightforward copy/edit hack of the SomaFM extension, replacing the list of channel streams with the equivalent ones from The Indie Beat. Easy!
I excitedly sent a screenshot to Kirsten to show off!
There were quite a few things that I felt I could do better, though. First of all, the artwork was missing. Also, I knew that the whole point of The Indie Beat was to be a showcase for the artists on Bandwagon, and that there was supposed to be metadata in the stream header that contained their link information.
After a lot of poking at the MP3 stream, I realised that The Indie Beat is built on a streaming server called Azura Cast, which has an API – and The Indie Beat API had that data, and a whole lot more that I could use. In order to use it all though, I had to fully re-think how the extension would work.
So, I started over, from scratch.
I hand-traced the “catellite” artwork and made a minified icon for the GNOME top bar – the full design was not great at a tiny size.
I kept a similar look-and-feel to the SomaFM extension – an icon, a player, a list of channels – but, I removed the settings and favourites options from my scope, to keep things simple. I also have the menu expand to fit the channel names, which I don’t love as it means it changes size, but it works.
a little thing that I’m fond of is that the extension uses the configured accent colour – recently added in GNOME 47 – for some of the text.
I did a lot of reading and poking around at GNOME Shell and gjs, the JavaScript API that enables extensions to be built. I also learned a lot about GStreamer, the engine that GNOME apps use for access to audio and video media. This was all a long, long way from my past work coding for GNOME, ~20 years ago, back in early Anjuta days! I’m not naturally a JavaScript person at all, so I made a lot of mistakes here.
huge shout-out to the author of the JustPerfection extension, who carefully and helpfully reviewed my submissions to the GNOME Extensions site. This thing would be a lot more crashy and messy without that oversight!
the extension contains a small cached implementation of the Azura Cast API, which enables the extension to query the available channels, rather than needing to have a static internal list of streams updated if a channel came along or went away (a concept of “mixtapes” is on the roadmap for The Indie Beat in the future).
I needed to add a way to access an artist’s page, which comes from a property that’s stored in the now playing data, so building an API layer that sits parallel to the radio stream player seemed to work nicely.
The Indie Beat is evolving – within a few days of starting work on this side project, Kirsten switched the branding from pink to green, so I updated the artwork. She also added a Bonk Wave channel – and the extension seamlessly picked it up! That was a nice win.
Not What I Call Radio Bonk Wave is a new radio station from The Indie Beat Radio, curated by bonkwave.org and playing music which may be #BonkWave. Or may be #NotBonkWave.
I’ve posted a short video which covers the basic features: choose between channels, play/stop, open the Bandwagon page of the currently playing artist in a web browser, or directly jump to Bandwagon’s Explore page or The Indie Beat main page. I’ve aimed for simple and clean, as befits the GNOME philosophy.
There’s a lot of opportunity for creatives in the Fediverse!
Castopod is a great way to self-host a podcast with native ActivityPub federation. Bandwagon exists, where you can create a Fediverse profile for yourself and your music. You can share it through The Indie Beat. I’ve personally got my eye on Libre.FM (like Last.FM, but free, and with a renewed / reinvigorated interest in building new features like ActivityPub and IndieWeb support – here’s my profile). Beyond those, there is also Faircamp, a static site generator that helps musicians self-host their content and avoid enshittification through other channels and platforms. I’m excited! We can work together to make our spaces better for musicians and other artists!
More features for the extension?
This has been a fun side project!
I’ve got a few barely-formed ideas for things I can do with this in the future, as both Bandwagon and The Indie Beat evolve. Stay tuned. 📡
Oh, and through making this extension, I found and purchased an album I’m obsessed with, which has inspired me to do some other new things… so watch this space.
Update 26/02 – since posting this, folks have made me aware of some other fantastic options in this space. Hopefully, we can see more collaborations between these platforms / sites / curators, to grow the opportunity for everyone.
NHAM shares monthly online mixtapes of music from Fediverse musicians
Audio Interface, a set of radio shows for independent artists
the Faircamp Webring collects together many of the artists using Faircamp for their sites
Mirlo (there’s an open issue proposing that they add ActivityPub / Fediverse support)
Update 26/02 – I wanted a simple app to play The Indie Beat on my MNT Pocket Reform, too, so I made a more basic system tray app, that should work on most Linux desktops (written in Python)
Where do I get those stickers?
Come find me at FOSDEM 2025 in Brussels next weekend, I’ll have Bandwagon+The Indie Beat stickers to share 👍🏻
Today I dipped my toe into static site generation with @eleventy and it was a breeze! I didn’t know this #WebDevelopment stuff could actually be fun. I will now happily trade the complexities of #Wordpress plus visual site builders plus theme customization against the complexities of #SSG with vanilla #HTML / #CSS and (almost) no #JavaScript. If think, I‘ll redo all my sites with it. Hint: ChatGPT is also really good at teaching #Eleventy and CSS.
I've been hand rolling touch friendly elements in Svelte 5 + HTML + CSS. But it's getting a bit tedious, and I should probably try some UI component framework or library.
Trouble is, it's hard to choose, I have zero experience about any of them, not all of them are Svelte 5 compatible. What to do?
It's fine to do lots of up front work and learning provided I make the right choice. But boy it would suck to have to revert and start over with another library.
Twice a year, due to a very old system, many assumptions, user expectations, and a bright mind that decided to set a database in Europe/Amsterdam TZ, we have to deal with at least a bug regarding time issues. I cannot wait for Temporal to be fully implemented in all the platforms.
Replacing Date object. Adds support for time zone and calendar representations, many built-in methods for conversions, comparisons and computations, formatting, etc.
Replacing Date object. Adds support for time zone and calendar representations, many built-in methods for conversions, comparisons and computations, formatting, etc.
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
• npm install: 📦 Installs dependencies from package.json, updates package-lock.json if needed. Flexible but slower. • npm ci: ⚡ Clean, fast install based only on package-lock.json. Reproducible builds, perfect for CI/CD.
💡Tip: Use npm ci for consistent, reliable deployments! ✅ #javascript#npm
• npm install: 📦 Installs dependencies from package.json, updates package-lock.json if needed. Flexible but slower. • npm ci: ⚡ Clean, fast install based only on package-lock.json. Reproducible builds, perfect for CI/CD.
💡Tip: Use npm ci for consistent, reliable deployments! ✅ #javascript#npm
Edit : I found my internship, thank you everyone for reposting :)
Just migrated from my mastodon.social account to the post.lurk.org instance (thank you @rra for the invite and the ressources ) So... here is my little #Introduction post (also a post of me searching for an internship lol) : Hi, I'm Zineb, I am a moroccan girly pop who loves to code, to draw and to sing :3 Currently in the first year of my Master's degree in Communication at the Ésac art school in Cambrai (france), I'm searching for an #internship in the field of #graphicdesign, especially with collectives enthusiastic about #webtoprint and #opensource tools (like me!). I mainly code with #HTML and #CSS, and I am currently learning #javascript. I can speak fluently french, english and arabic. I also have some basic knowledge in spanish. In terms of location, I'm seeking an internship in #Belgium, the #Netherlands, #Germany or the region of Paris. (Oh, forgot to mention that I can have an erasmus/internship grant ) Here's the link to my website: https://zinebammar.neocities.org/
Edit : I found my internship, thank you everyone for reposting :)
Just migrated from my mastodon.social account to the post.lurk.org instance (thank you @rra for the invite and the ressources ) So... here is my little #Introduction post (also a post of me searching for an internship lol) : Hi, I'm Zineb, I am a moroccan girly pop who loves to code, to draw and to sing :3 Currently in the first year of my Master's degree in Communication at the Ésac art school in Cambrai (france), I'm searching for an #internship in the field of #graphicdesign, especially with collectives enthusiastic about #webtoprint and #opensource tools (like me!). I mainly code with #HTML and #CSS, and I am currently learning #javascript. I can speak fluently french, english and arabic. I also have some basic knowledge in spanish. In terms of location, I'm seeking an internship in #Belgium, the #Netherlands, #Germany or the region of Paris. (Oh, forgot to mention that I can have an erasmus/internship grant ) Here's the link to my website: https://zinebammar.neocities.org/
tl;dr I created an extension for the GNOME desktop on Linux, so that folks can stream and listen to music from The Indie Beat – an online radio station powered by independent musicians sharing music in the Fediverse, via Bandwagon.
Background
Independent musicians, creatives, artists, makers – these are all folk who often struggle to connect with audiences, and where retail and tech platforms tend towards squeezing their ability to make money from their work (see the excellent Chokepoint Capitalism by Cory Doctorow – essential reading for today’s world and understanding how it systematically squeezes creatives). Over the Christmas period, I finally deleted my Spotify account, after reading about yet more awful ways that company is destroying authentic creativity for their own profit.
I’ve been a huge fan of independent artists for a very long time. Back in the MySpace / MP3 / Napster days I came across folks who I now count as friends, amazing musicians such as Cindy Alexander, and Alex Cornish.
Up until recently there was a wonderful streaming station, RadioFreeFedi, that offered music from artists who had a presence in the Fediverse. Sadly, that has now gone away.
Over the past couple of years I’ve been attending Fediforum, an online conference where people building in the Fediverse gather to share projects and ideas. During the events in 2024, I came across two fantastic people with an interest in making things better for artists and musicians: Ben Pate, builder of the Emissary platform, which has a music-centric edition called Bandwagon; and Kirsten Lambertsen, a multi-talented web creative who runs Patron Hunt, and who spun up an alternative streaming station, The Indie Beat.
Happy New Year fedifriends!
I'm excited to officially announce the launch of TheIndieBeat.fm, a streaming radio station showcasing indie #music from the Fediverse.
The Indie Beat Radio is made possible through a collaboration with Bandwagon.fm / @benpate
Music artists who upload their work to Bandwagon.fm have the option to make tracks available for streaming on TheIndieBeat.fm
Our goal is to use federation to make less work for artists — upload once; distribute infinitely.
The Indie Beat builds on Bandwagon, so artists who share their music in the Fediverse via Bandwagon, can also choose to add them to rotation on The Indie Beat.
Some inspirations
I was nerd-sniped, I mean, inspired, to make something with The Indie Beat, in part through a nice blog post shared by Neil Brown (which was apparently prompted by me, so that’s nice and circular!) about how to add the streams from The Indie Beat into Linux music apps such as mpd.
I don’t use mpd, and to be honest I most often live on Apple platforms (but I do keep a Plex server, which I intend to move to Jellyfin this year as I work on improving my self-hosting and homelab situations). I was pretty sure that I’d seen a taskbar music player for GNOME, though. I usually run GNOME on my Linux systems – the exception being my MNT Pocket Reform, which is Sway with a minimal set of other desktop apps.
The player I was thinking of is the SomaFM internet radio extension, which is a menubar app that lists the SomaFM station streams, and allows the user to choose between them.
The process
The first iteration was a straightforward copy/edit hack of the SomaFM extension, replacing the list of channel streams with the equivalent ones from The Indie Beat. Easy!
I excitedly sent a screenshot to Kirsten to show off!
There were quite a few things that I felt I could do better, though. First of all, the artwork was missing. Also, I knew that the whole point of The Indie Beat was to be a showcase for the artists on Bandwagon, and that there was supposed to be metadata in the stream header that contained their link information.
After a lot of poking at the MP3 stream, I realised that The Indie Beat is built on a streaming server called Azura Cast, which has an API – and The Indie Beat API had that data, and a whole lot more that I could use. In order to use it all though, I had to fully re-think how the extension would work.
So, I started over, from scratch.
I hand-traced the “catellite” artwork and made a minified icon for the GNOME top bar – the full design was not great at a tiny size.
I kept a similar look-and-feel to the SomaFM extension – an icon, a player, a list of channels – but, I removed the settings and favourites options from my scope, to keep things simple. I also have the menu expand to fit the channel names, which I don’t love as it means it changes size, but it works.
a little thing that I’m fond of is that the extension uses the configured accent colour – recently added in GNOME 47 – for some of the text.
I did a lot of reading and poking around at GNOME Shell and gjs, the JavaScript API that enables extensions to be built. I also learned a lot about GStreamer, the engine that GNOME apps use for access to audio and video media. This was all a long, long way from my past work coding for GNOME, ~20 years ago, back in early Anjuta days! I’m not naturally a JavaScript person at all, so I made a lot of mistakes here.
huge shout-out to the author of the JustPerfection extension, who carefully and helpfully reviewed my submissions to the GNOME Extensions site. This thing would be a lot more crashy and messy without that oversight!
the extension contains a small cached implementation of the Azura Cast API, which enables the extension to query the available channels, rather than needing to have a static internal list of streams updated if a channel came along or went away (a concept of “mixtapes” is on the roadmap for The Indie Beat in the future).
I needed to add a way to access an artist’s page, which comes from a property that’s stored in the now playing data, so building an API layer that sits parallel to the radio stream player seemed to work nicely.
The Indie Beat is evolving – within a few days of starting work on this side project, Kirsten switched the branding from pink to green, so I updated the artwork. She also added a Bonk Wave channel – and the extension seamlessly picked it up! That was a nice win.
Not What I Call Radio Bonk Wave is a new radio station from The Indie Beat Radio, curated by bonkwave.org and playing music which may be #BonkWave. Or may be #NotBonkWave.
I’ve posted a short video which covers the basic features: choose between channels, play/stop, open the Bandwagon page of the currently playing artist in a web browser, or directly jump to Bandwagon’s Explore page or The Indie Beat main page. I’ve aimed for simple and clean, as befits the GNOME philosophy.
There’s a lot of opportunity for creatives in the Fediverse!
Castopod is a great way to self-host a podcast with native ActivityPub federation. Bandwagon exists, where you can create a Fediverse profile for yourself and your music. You can share it through The Indie Beat. I’ve personally got my eye on Libre.FM (like Last.FM, but free, and with a renewed / reinvigorated interest in building new features like ActivityPub and IndieWeb support – here’s my profile). Beyond those, there is also Faircamp, a static site generator that helps musicians self-host their content and avoid enshittification through other channels and platforms. I’m excited! We can work together to make our spaces better for musicians and other artists!
More features for the extension?
This has been a fun side project!
I’ve got a few barely-formed ideas for things I can do with this in the future, as both Bandwagon and The Indie Beat evolve. Stay tuned. 📡
Oh, and through making this extension, I found and purchased an album I’m obsessed with, which has inspired me to do some other new things… so watch this space.
Update 26/02 – since posting this, folks have made me aware of some other fantastic options in this space. Hopefully, we can see more collaborations between these platforms / sites / curators, to grow the opportunity for everyone.
NHAM shares monthly online mixtapes of music from Fediverse musicians
Audio Interface, a set of radio shows for independent artists
the Faircamp Webring collects together many of the artists using Faircamp for their sites
Mirlo (there’s an open issue proposing that they add ActivityPub / Fediverse support)
Update 26/02 – I wanted a simple app to play The Indie Beat on my MNT Pocket Reform, too, so I made a more basic system tray app, that should work on most Linux desktops (written in Python)
Where do I get those stickers?
Come find me at FOSDEM 2025 in Brussels next weekend, I’ll have Bandwagon+The Indie Beat stickers to share 👍🏻
ALT text detailsScreenshot of Kitten error page with cute illustration of a grey kitten with pink ears and nose playing with a purple ball of yarn followed by the error message:
500
Error: Attempt to instantiate kitten.Component in markup without calling its connectedTo() static factory method:
In your kitten.html``, replace:
<{Uptime} />
With:
<{Uptime.connectedTo(this)} />
Finally, there’s a partial view of a stack trace that scrolls off the page.
So last night, while recording the preview of Kitten’s¹ improved component model², I made a silly mistake (copying raw HTML into a JavaScript function instead of wrapping it in a kitten.html`` tagged template, easy to do when you’re refactoring to pull out components from pages).
Then, once I figured out what I’d done, I made another one by forgetting to return the value from the function (easy to do when you’re used to using one-line closures as render functions).
I would have caught both of those so much faster if Kitten had helpful error messages for those two pitfalls. And guess what, this morning, it does :)
Attached are screenshot showing the before and after error messages.
ALT text detailsScreenshot of first error message (before):
500 TypeError: Cannot read properties of undefined (reading 'match')
ALT text detailsScreenshot of first error message (after):
Error: Render function did not return kitten.html``
class Count extends kitten.Component {
html {
kitten.html`<h1 morph>${kitten.db.counter.count}</h1>`
}
onIncrement {
kitten.db.counter.count++
this.update
}
}
ALT text detailsScreenshot of second error message (before):
500 SyntaxError: Unexpected token '<
ALT text detailsScreenshot of second error message (after):
500 SyntaxError: Unexpected token '<
(Did you put raw HTML inside a function by mistake instead of wrapping it in a kitten.html`` tagged template?)
#introduction Code Lutin est une #entreprise extraordinaire : pratiquant l'#autogestion (1 personne = 1 voix) et le salaire unique (quelque-soit le diplôme, l'expérience, l'ancienneté, le poste), nous sommes une des rares société « à participation ouvrière » en France
#introduction Code Lutin est une #entreprise extraordinaire : pratiquant l'#autogestion (1 personne = 1 voix) et le salaire unique (quelque-soit le diplôme, l'expérience, l'ancienneté, le poste), nous sommes une des rares société « à participation ouvrière » en France
Little preview video: Kitten’s improved component model
• Class-based page routes and components • Object-oriented • Event-based • Seamless hypermedia-driven WebSocket-based event mapping and interface updates (Streaming HTML) • A light server-side live component hierarchy with event bubbling • Almost as if you’re building a desktop or mobile app instead of a web app…
… another authoring simplification made possible because on the Small Web – which is a peer-to-peer web – you build a web app/site as a tool for one person (the owner of the site/app) instead of as a tool for you to farm millions of people.
- Correct handling of compilerOptions.types - Better handling of npm package types - Improvements to node:fs FileHandle - Make deno outdated more robust Run `deno upgrade` to get it
- Correct handling of compilerOptions.types - Better handling of npm package types - Improvements to node:fs FileHandle - Make deno outdated more robust Run `deno upgrade` to get it
- Correct handling of compilerOptions.types - Better handling of npm package types - Improvements to node:fs FileHandle - Make deno outdated more robust Run `deno upgrade` to get it
- Correct handling of compilerOptions.types - Better handling of npm package types - Improvements to node:fs FileHandle - Make deno outdated more robust Run `deno upgrade` to get it
Pretty soon, you’re going to be able to view your live pages and the events on them in real time while developing Kitten apps.
The improved component model with support for class-based routes (and a server-side component hiearchy that lets you build well-encapsulated components and pages and work in an event-driven way) is coming along nicely and I’m back to writing Place¹ using it.
(In the GIF, you’re looking at Place’s profile settings page. Not shown here but those profile changes reflect in realtime on all open pages. The highlighted piece of code is what streams the event details to the browser.)
ALT text detailsScreen recording of two web browser windows, side by side. The one on the right is showing Kitten’s Settings page at state: pages. I open the detail veiw for the /settings/profile route and see its ID, session id, number of connected sockets (1) and an empty Events table with name and data.
On the left, an instance of the /settings/profile route is open in the browser. I change the value of the Name field (erasing the t and s from Aral’s 1st) and I see two events pop up on the page on the right (Name: name, Data: { name: 'Aral’s 1s'}) and (Name: name, Data: { name: 'Aral’s 1'}). Then I add the deleted letters back and see the event (Name: name, Data: { name: 'Aral’s 1st'}). Finally, I toggle the Show name? and Show Image? checkboxes on and off and see the events (name: howOrHide, { showOrHide: 'on', item: 'Image' }), (name: showOrHide, { item: 'Image' }, showOrHide { showOrHide: 'on', item: 'Name' })
ALT text detailsScreenshot of code. The showPageEvent method is highlighted.
onAddToPage () {
this.addEventHandler(kitten.events, `kittenPageEvent-${this._page.id}`, this.showPageEvent)
}
/**
Stream new page event details to top of the events list,
hiding the placeholder if necessary.
@param {{
name: string,
data: {HEADERS: any}
}} event
*/
showPageEvent (event) {
delete event.data.HEADERS
// Hide placeholder if necessary.
if (this.placeHolderIsVisible) {
this.page.send(kitten.html`
<tr id='placeholder-${this.id}' swap-target='delete'>
`)
this.placeHolderIsVisible = false
}
// Send the new event row with event details.
this.page.send(kitten.html`
<tbody id=${this.id} swap-target='afterend:#${this.id}'>
<tr>
<td>${event.name}</td>
<td>${util.inspect(event.data)}</td>
</tr>
</tbody>
`)
}
}
class Pages extends kitten.Component {
html() {
// We could just display a “loading” message here
// as we’re going to refresh the list at onConnect(),
// but given how fast it all happens, we might was well
// send the whole list instead of having an odd flash.
const pages = Object.values(kitten.pages)
Thanks to all who have participated. If we haven't contacted you about stickers, then please let us know (or email andy@deno.com).
Finally, one lucky winner will get the elite, special edition, hyper exclusive Deno sticker. (Here's Phil seeing it for the first time.) ️ More details 👇️ https://deno.com/blog/advent-of-code-2024
Thanks to all who have participated. If we haven't contacted you about stickers, then please let us know (or email andy@deno.com).
Finally, one lucky winner will get the elite, special edition, hyper exclusive Deno sticker. (Here's Phil seeing it for the first time.) ️ More details 👇️ https://deno.com/blog/advent-of-code-2024
Thanks to all who have participated. If we haven't contacted you about stickers, then please let us know (or email andy@deno.com).
Finally, one lucky winner will get the elite, special edition, hyper exclusive Deno sticker. (Here's Phil seeing it for the first time.) ️ More details 👇️ https://deno.com/blog/advent-of-code-2024
Good Morning #FediHire friends - have a new role for ya!
Looking for a fairly senior frontend-focused #Software Engineer to join a team building a containerization product for the CI/CD pipeline called Dagger.
The role is looking for some fairly specific criteria so here are the key points:
* This role is not a UI Designer position, you must have a strong coding background ( #JavaScript / #TypeScript / #ReactJS preferred) in addition to design chops
* You must have developed frontends for #devtools (the thought behind this requirement is that these tools are designed very differently than a typical B2C site so if you have done something substantially similar, answer yes)
* Americas (somewhere between EST to PST) timezones are required. We can hire in Canada, US, South America, and have hired in Europe before for exceptional candidates
* We cannot sponsor visas at this time
* I've worked with this company for about 6 months and have only positive things to say about the team and culture
* There's currently a bug in the application coming from the ATS that's making the dropdowns funky. Don't judge me too harshly, I've submitted a ticket
I'm the #recruiter on the role, so feel free to ask any questions here and I'll either have an answer or go find you one :)
Good Morning #FediHire friends - have a new role for ya!
Looking for a fairly senior frontend-focused #Software Engineer to join a team building a containerization product for the CI/CD pipeline called Dagger.
The role is looking for some fairly specific criteria so here are the key points:
* This role is not a UI Designer position, you must have a strong coding background ( #JavaScript / #TypeScript / #ReactJS preferred) in addition to design chops
* You must have developed frontends for #devtools (the thought behind this requirement is that these tools are designed very differently than a typical B2C site so if you have done something substantially similar, answer yes)
* Americas (somewhere between EST to PST) timezones are required. We can hire in Canada, US, South America, and have hired in Europe before for exceptional candidates
* We cannot sponsor visas at this time
* I've worked with this company for about 6 months and have only positive things to say about the team and culture
* There's currently a bug in the application coming from the ATS that's making the dropdowns funky. Don't judge me too harshly, I've submitted a ticket
I'm the #recruiter on the role, so feel free to ask any questions here and I'll either have an answer or go find you one :)
Deno is committed to web standards - that's why we co-founded WinterCG two years ago. Today marks the next step in that journey: WinterCG moves to Ecma International as technical comittee 55 (TC55).
Deno is committed to web standards - that's why we co-founded WinterCG two years ago. Today marks the next step in that journey: WinterCG moves to Ecma International as technical comittee 55 (TC55).
Deno is committed to web standards - that's why we co-founded WinterCG two years ago. Today marks the next step in that journey: WinterCG moves to Ecma International as technical comittee 55 (TC55).
Deno is committed to web standards - that's why we co-founded WinterCG two years ago. Today marks the next step in that journey: WinterCG moves to Ecma International as technical comittee 55 (TC55).
New release of https://thi.ng/genart-api (v0.24.0) — a platform-independent extensible API for browser-based computational/algorithmic/generative art projects:
This release contains quite a few new features, as well as several important fixes for bugs which were accidentally introduced in the two most recent versions...
- extracted the debug time provider & FPS overlay to separate package - updated `bigint` param handling (esp. randomization) - added `collector` and `iteration` metadata accessors - updated platform adapters (esp. the #fxhash one) - fixed image & ramp param handling - added a bunch of utilities to core API to deduplicate code in various adapters - updated/fixed examples & docs - added more tests (and updated core API to be more testable outside the browser)
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Interesting change: “Lifecycle scripts of dependencies are not executed during installation by default! This is a breaking change aimed at increasing security. In order to allow lifecycle scripts of specific dependencies, they should be listed in the pnpm.onlyBuiltDependencies field of package.json.”
Interesting change: “Lifecycle scripts of dependencies are not executed during installation by default! This is a breaking change aimed at increasing security. In order to allow lifecycle scripts of specific dependencies, they should be listed in the pnpm.onlyBuiltDependencies field of package.json.”
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Calflora is seeking an experienced developer who would like to take part in important conservation work and who values biodiversity data. This developer would assist in maintaining and developing Calflora’s Java-based website and infrastructure, including systems administration, database management, web application programming, front-end development, and data integration. Qualifications: Java - Databases (MySQL or other), Java-based web technologies (such as GWT), and interest in natural history and botany. https://myemail.constantcontact.com/The-Calflora-Team-is-Expanding-.html?soid=1101318247526&aid=vnjMtGwmYG4. #jobs#javascript
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
Our core team is looking for a senior Front-end Developer to elevate the web UI/UX experience for our users.
Ideally:
1. You are highly skilled in accessible and semantic #HTML 2. Proficient in modern #CSS 3. Experienced with #Javascript, #Typescript and complex React/Redux applications
This remote full-time position requires a 4-hour overlap with the CET timezone.
#ReleaseFriday (1st release cycle of 2025) 🎉 — New additions & updates to https://thi.ng/genart-api, a platform-independent extensible API for browser-based computational/algorithmic/generative art projects:
- Added https://fxhash.xyz platform adapter (incl. support & adaptations for 10 of the 17 built-in GenArtAPI param types) - Added `bigint` & `binary` data param types - Updated parameter type definitions & factories (date, datetime, time, numlist, strlist, text, vector) - Ensure any given default values are valid (and can be coerced) - Added MurmurHash3 (128 bit version) functions (e.g. seed PRNGs) - Added tests for all parameter types (factory functions & implementations) - Added tests for utility functions - Added GitHub actions (running tests) - Various API docs updates, clarifications & fixes - Update/refactor EditArt & Layer platform adapters - Updated main & adapter readmes
I just noticed the release notes for @gotink’s #JavaScript#KDL parser and it has this new tool for defining KDL<->JS mappings in a more complex way than just JiK. This is AMAZING. It lets you really harness the power of KDL’s node-based system but still work easily with JS objects, in a well-defined and structured way!
Cause sometimes what you really really want is a tree structure, not just objects and arrays. And you never want yaml, even if you think you do :P
I have added snow to my instance during the winter holidays. It's a tiny JS canvas and fades out on scroll down. The snow is also respecting the system accessibility settings, it won't be there if you prefer reduced motion.
Next month #ThingUmbrella will be already 7 years old (in its current monorepo form) and thi.ng itself turn 14 — a true teenager! 😱
2024 has been a year of a lot of maintenance and the first year in a while, in which I got to put so many of these tools & libraries to work on the development of several other new (and ongoing) projects (incl. some still unannounced ones). Considering the vastly different usage contexts, each time this is also a demonstration (to myself) of just how powerful, adaptable and _composable_ many of these libraries are, and I wish I'd be able to better communicate these aspects to other people...
My deepest thanks and gratitude to my amazing supporters/sponsors, who've been enabling me to continue this work, to expand on it and actively maintain it! Some of you already for years! Love you, people — Your support means the world to these projects (and to me)! And even though I'm still a far way from being able to work fulltime on all these projects, and also had to take on some consulting work this year, I too have been trying my best to work on thi.ng projects every day this year (and almost succeeded)...
- 200 packages/libraries/tools - 180 standalone example projects/tools - 520 code snippets/examples in docs (extractable via tooling)
Source code:
- 4,095 source files - 223k SLOC total, of which: - 159k lines of code - 64k comment lines (mostly for API docs)
Readme's:
- 33% of packages with 1,000+ words - 20% of packages with 1,500+ words - Min: 215, max: 9,519, avg: 1,075 words
3,445 Github ⭐️ (+12% in 2024)
200,675,881 NPM total downloads to date (🤯)
There're many valuable ways to support these projects: Share your usage/experience reports, tips & tricks, ask/answer questions, submit issues/PRs, create small examples, documentation/tutorials, word-of-mouth etc.
If you see value in these projects and want to support a large & mature body of open source work financially, I'm accepting contributions via: Github, Liberapay & Patreon — thank you very much for your consideration!
ALT text detailsScreenshot of my Github activity/contribution heatmap of the past year, listing 2493 contributions (only a handful of days without contribs since end of Jan 2024)
Visualization from here:
https://github.com/postspectacular
Next month #ThingUmbrella will be already 7 years old (in its current monorepo form) and thi.ng itself turn 14 — a true teenager! 😱
2024 has been a year of a lot of maintenance and the first year in a while, in which I got to put so many of these tools & libraries to work on the development of several other new (and ongoing) projects (incl. some still unannounced ones). Considering the vastly different usage contexts, each time this is also a demonstration (to myself) of just how powerful, adaptable and _composable_ many of these libraries are, and I wish I'd be able to better communicate these aspects to other people...
My deepest thanks and gratitude to my amazing supporters/sponsors, who've been enabling me to continue this work, to expand on it and actively maintain it! Some of you already for years! Love you, people — Your support means the world to these projects (and to me)! And even though I'm still a far way from being able to work fulltime on all these projects, and also had to take on some consulting work this year, I too have been trying my best to work on thi.ng projects every day this year (and almost succeeded)...
- 200 packages/libraries/tools - 180 standalone example projects/tools - 520 code snippets/examples in docs (extractable via tooling)
Source code:
- 4,095 source files - 223k SLOC total, of which: - 159k lines of code - 64k comment lines (mostly for API docs)
Readme's:
- 33% of packages with 1,000+ words - 20% of packages with 1,500+ words - Min: 215, max: 9,519, avg: 1,075 words
3,445 Github ⭐️ (+12% in 2024)
200,675,881 NPM total downloads to date (🤯)
There're many valuable ways to support these projects: Share your usage/experience reports, tips & tricks, ask/answer questions, submit issues/PRs, create small examples, documentation/tutorials, word-of-mouth etc.
If you see value in these projects and want to support a large & mature body of open source work financially, I'm accepting contributions via: Github, Liberapay & Patreon — thank you very much for your consideration!
ALT text detailsScreenshot of my Github activity/contribution heatmap of the past year, listing 2493 contributions (only a handful of days without contribs since end of Jan 2024)
Visualization from here:
https://github.com/postspectacular
I have added snow to my instance during the winter holidays. It's a tiny JS canvas and fades out on scroll down. The snow is also respecting the system accessibility settings, it won't be there if you prefer reduced motion.
Another new release of #GenArtAPI (v0.20.0), due to some urgent additions & updates of partially outdated documentation and refactoring/cleaning up of some parameter types. This project already contains more docs than code and because things are moving so fast, I forgot to update some parts... (Sorry for any confusion caused...)
Other notable updates:
- Simplified the core API's param value getter for obtaining time-based or randomized values (please check docs[1]) - Updated vector param definition - Added a `.configure()` method for the EditArt platform adapter to allow manual selection of adapted params (to override the default auto-selection)[2]
All implementations are WIP (but fully functional, to the best of my knowledge!). If there's demand, I'm considering adding more parameter type adaptations also for the EditArt adapater (e.g. to support vector/XY params, as already done for the Layer adapter...)
Since I've been told "people/artists don't read anymore", tonight I'm starting to record a video walkthrough, wish me luck! :)
I want to give huge thanks to everyone who supported all of us through this, who jumped in and had some really amazing discussions weighing all sorts of interesting trade-offs.
The end result is absolutely not something any one person could've reasonably come up with.
I hope y'all enjoy it <3
As part of this release, several implementations have already launched with full support for v2.0.0, so you can try it now!
There are around 8k .kdl files out on GitHub, which is a lot considering it's usually a config language!
I fully expect this to be the last version of KDL ever released. We really really tried, but I don't think there's anything we can reasonably improve on.
From here on out, the language is in the (stable!) hands of the ecosystem.
Also, we're hoping to have GitHub syntax highlighting support soon!
(Boosts welcome!!)
ALT text detailssyntax-highlighted zellij config ported to 2.0.0 format.
// This config is just like `zellij.kdl`, except it shows what it would look
// like if modifiers were done using `+` instead of spaces (thus needing to be
// quoted).
keybinds {
normal {
// uncomment this and adjust key if using copy_on_select=#false
/- bind Alt+c { Copy }
}
locked {
bind Ctrl+g { SwitchToMode Normal }
}
resize {
bind Ctrl+n { SwitchToMode Normal }
bind h Left { Resize Left }
bind j Down { Resize Down }
bind k Up { Resize Up }
bind l Right { Resize Right }
bind "=" + { Resize Increase }
bind - { Resize Decrease }
}
pane {
bind Ctrl+p { SwitchToMode Normal }
ALT text detailsa section of a syntax-highlighted example KDL document based on a GitHub Actions yaml configuration, ported to KDL 2.0.0.
steps {
step uses="actions/checkout@v1"
step "Install Rust" uses="actions-rs/toolchain@v1" {
profile minimal
toolchain "${{ matrix.rust }}"
components clippy
override #true
}
step Clippy { run cargo clippy --all -- -D warnings }
step "Run tests" { run cargo test --all --verbose }
step "Other Stuff" run="""
echo foo
echo bar
echo baz
"""
}
This proposal could help with the following problem—quoting Tzvetan Mikov (Static Hermes): “Unfortunately, in general it is impossible to compile JS statically to a tiny binary (Wasm or otherwise), because it is impossible statically to know which parts of the JS library are used.” https://x.com/tmikov/status/1869900344286949425
New release of https://thi.ng/genart-api, a modular cross-platform API/SDK for browser-based computational/algorithmic/generative art projects, helping to reduce artists' efforts to adapt work for different art platforms/environments/uses/workflows.
Main new v0.18.0 additions:
- The param editor reference implementation now groups parameters by their declared group and sorts them by given order (both optional) - The `@genart-api/adapter-layer` package supports adaptations/translations for more param types, incl. vectors, which are not yet natively supported by that platform. E.g. vectors will be transparently represented as multiple, separate numeric params on the platform side, but your artwork is blissfully unaware of this and still only would deal with vectors. The platform adapter does all the reconcilation and handling of param changes... - Started adding tests - Updated API docs & readme's
As always, feedback highly appreciated — this project is in active development...
I'm aware, the target audience for this larger project is quite limited, but the benefits are real (and palpable!), not just for artists in this field (but especially for them!)... I'll do my best to illustrate the (recurring) problems being solved here, demystify some of the concepts and squeeze in recording a short(ish) video showing how to develop a small project from scratch using this system/setup and then repurpose it and show related tools still in development...
$ pip3 search something ... RuntimeError: PyPI no longer supports 'pip search' [...]. Please use https://pypi.org/search (via a browser) instead. [...]
Sure, no problem. Let's see …
»JavaScript is disabled in your browser. Please enable JavaScript to proceed.«
Urgh, but okay, #pip is a #Python package manager, they're good guys. Let me just open #NoScript and temporarily allow pypi.org ... oh no, it wants to run #JavaScript from …
there is now another #KDL implementation that supports preserving and managing formatting/comments... and it's in #JavaScript / #TypeScript and supports 2.0!!
- https://thi.ng/ramp has just received a bugfix for ramps with more than 256 keyframes. Thanks to @robertoranon for finding & reporting! 🤩🙏 - https://thi.ng/meta-css also fixes a couple of issues related to using certain characters within template/macro arguments (e.g. `:`, `=`)
Last week, I also added a new feature to https://thi.ng/rstream to provide a 1:N fanout subscription type for reactive tuple values. For example, this is very useful for editing vector values via reactive UI components (using individual components per vector/tuple element)...
- Added platform adapter IDs for use with external editors/tooling - Updated editors[1] to check for platform adapter & API version compatibility, display warnings if needed... - Added/migrated three different seedable PRNG implementations in API core package (SFC32, XorShift128, XsAdd). These are completely independent and can be used by platform adapters and/or artworks (also multiple instances) - Initial release of first platform adapter for an upcoming art platform (currently invite only) - Restructured all example projects - Updated readme & API docs (https://docs.thi.ng/genart-api/core/)
[1] The param editor/sandbox requires your artwork to use the latest version of these packages: `@genart-api/core` and `@genart-api/adapter-urlparams`.
Almost each time I get a Dependabot alert, I've been using it as an opportunity to remove some 3rd party dependency. This doesn't mean my code is more secure (albeit I'm trying), but at least it's under my control, or is replaced with more native/built-in/vetted packages.
Latest case: An alert for a transitive dependency of `express` just caused me to refactor the only one (of 180) example projects in https://thi.ng/umbrella which depended on the latter, replaced with a barebones NodeJS built-in solution (good enough for this use case) and resulting in ~60 less dependencies in total...
I like that @deno_land tries to be an all-in solution. I like that about go as well. Good tooling, rich standard library. What is difficult, though, is that the js ecosystem is so fragmented. For instance, I’m trying to use drizzle ORM with SQLite. That’s far from straightforward. They don’t include examples for Deno. Translating commands to how Deno likes them is a hassle and I run into issues with migrations #development#javascript#deno
- Restructured the project as monorepo, splitting out core API and platform adapter(s) as separate packages - Switched package scope from `@thi.ng` to `@genart-api` to highlight project/platform independence (not directly related with other thi.ng projects). - Published new packages: `@genart-api/core` and `@genart-api/adapter-urlparams` - Moved API docs to https://docs.thi.ng/genart-api/core/ - Added support for n-dimensional vector parameters and added support in the reference platform adapter and in param editor - Updated all examples & parameter editor. The latter is now only compatible with this latest API version (v0.16.0) - Updated docs/readme
If you want to find out more, the project readme has _a lot_ more information. Also feel free to get in touch with any questions/proposals!
Update on #FreeJavaScript: Oracle has filed a notice of appearance, signaling engagement in the JavaScript trademark case. Aside from this, we’ve had no communication. Their response is due by January 4th.
Many very talented software engineers I know well from a previous employer have either just been layed off or are actively looking for a new gig due to these mass layoffs. If you know a company, preferrably in Germany, that is looking for #javascript#typescript developers, please let me know. Please boost for reach! #getfedihired
It just dawned on me that I haven't been mentioning five(!) recent https://thi.ng/genart-api updates, all from the past month... 😱
The latest version (v0.14.0, just released) is largely about an overhaul of messaging related functionality and also addresses use cases related to managing multiple artworks embedded (via `<iframe>`s) in a single document/page (think: online gallery scenarios...)
If you're already using GenArtAPI message/event listeners in your own artwork, you might have to rename some of them. This commit has the important details:
Also, the online parameter editors have been updated and are now only working with the latest version of the API, so be sure to update your artwork projects to stay compatible:
Other recent changes/additions (in no particular order):
- added new message types to poll the artwork/API for current state/info - update message names & naming convention - added ability to configure the API behavior/features (also via messaging) - option to emit frame messages w/ current timing/frame info - message broadcasting to multiple GenArtAPI instances/artworks - inject common defaults for optional settings in param specs - fixed date/datetime param handling (in editor) - updated/fixed time providers - updated debug time provider (w/ FPS visualization overlay) - use gzip compression for image param values (in default platform adapter) - added version info - various documentation updates - (WIP) WASM bindings for Zig-based artworks - (WIP) unpublished progress on real platform adapters
Some of these features are all about enabling new use cases and improving usability of external tooling around artworks adapting GenArtAPI, for example:
- Ability to broadcast start/stop messages to either individual or all artworks embedded in a page - Ability for the param editor to configure the artwork currently being worked on to emit timing & frame information (which then can be integrated in the editor UI without the editor knowing anything else about the artwork) - Enable editors to identify an artwork/project and store param presets grouped by project ID - Allow editors (or other tools) to check the API version used by the artwork by first sending a `genart:get-info` message, then listening for `genart:info` response (then maybe display a warning if version is incompatible) - etc.
If you want to find out more, the project readme has _a lot_ more information. Also feel free to get in touch with any questions!
"It insists that all user problems will be solved if teams just framework hard enough." (article about #javascript) but this THIS is the single one reason for me about #go - a standard library well stocked enough to not need frameworks anymore but instead choosing a small selection of really necessary libraries and a lil' sugar for any given project. I didn't framework hard the last decade - I didn't framework at all. (and its simplicity.) https://infrequently.org/2024/11/if-not-react-then-what/
@slightlyoff I've being doing this for so long (#webdev). I have an inkling that everytime this conversation comes up and the person doing the "front end frameworks are killing us" cautioning - can't or won't actually recommend an alternative - it's because it will never be possible.
Not until the JS baked directly into the browser stops sucking so badly.
It's bandaids on top of wounds on top of bandaids.
We’ve submitted a formal petition to cancel the JavaScript trademark: it is generic, Oracle has abandoned it, and Oracle committed fraud on the USPTO during the last trademark renewal.
Oracle has until January 4th to respond, or the case will go into default, which will result in the trademark being canceled.
Very much liking the succinctness of the JS Compression Streams API[1] and wish I'd known about this a couple of years earlier. Here're some small helpers to compress or decompress a byte array...
I've just also pushed a new version of https://thi.ng/genart-api (v0.11.0) in which the reference implementation platform adapter now uses gzip compression for serializing the data of image maps/parameters (in ~50-60% of the original size)...
- Added null pointer checks & guards in https://thi.ng/wasm-api. This also includes support for structs with fields using Zig-style optional pointers. - Updated the https://thi.ng/wasm-api-bindgen code generator for #TypeScript to produce smaller code for structs using many string fields - Did major ground work on #Zig#WebAssembly bindings of core https://thi.ng/genart-api functionality (see small demo below) - Fixed/updated/simplified time provider logic - Updated the debug time provider with its FPS analytics/visualization overlay, now computing moving min/max and moving average (default period = 200 frames) and the viz is dynamically/smoothly rescaling to current peak - Released new GenArtAPI v0.9.0
As for the Zig/WASM example: This is only interesting from a technical POV, no visuals here! All canvas drawing and parameter declarations/evaluations are done via Zig, using the aforementioned https://thi.ng/wasm-api infrastructure to provide a new API module which can be seamlessly used with the other hybrid WASM API modules, here for DOM creation (https://thi.ng/wasm-api-dom) and to handle Canvas2D drawing (https://thi.ng/wasm-api-canvas).
At the moment, this GenArtAPI WASM module is still a fixed part of this example, but will eventually be extracted & distributed as separate package.
Choose one of the two GUI implementations, then make any parameter changes and you should see the new values applied immediately (btw. the demo is likely not very usable on mobile)...
I'm a bot, now on a new instance at https://front-end.social/! If you're already following, the transition should happen automatically. However, if you have any bookmarked posts, I recommend re-bookmarking the direct links to articles in your browser for safe keeping.
Starting December 15th, the original instance will no longer be active. I'll send a reminder before then.
Really enjoying adding end-to-end tests to Kitten¹ using Playwright² and my own little Kitten controller class for starting/stopping/otherwise interacting with the Kitten server.
Just wrote some that comprehensively test identity creation and authentication for Small Web places:
https://thi.ng/genart-api is already at v0.8.1 now. This latest version includes a new "debug mode" time provider plugin which also collects and computes frame rate statistics (moving average) and injects a canvas visualization overlay (everything configurable). Together with the parameter editor, this is a small, but useful tool to help configuring an artwork and ensure fluid performance on a target device/platform...
https://thi.ng/memoize: Function memoization/caching. Added support for async functions/promises and made existing implementations variadic (and removed fixed arity versions!). This is thanks to a feature request by Hitomi Tenshi...
https://thi.ng/transducers-stats: Functional sequence processing. Added moving minimum/maximum transducers (deque-based to be super efficient) and updated Donchian channel transducer (aka moving min/max bounds) to also benefit from new implementation
There's also ongoing major (re)work of the long-promised 2D/3D mesh implementation. It's still on a private feature branch, but I'm getting closer for initial release...
I got kinda obsessed with mazes recently and made a tool to generate infinite random mazes. I wrote an article about how it works and created animated visualizations of the process.
"What are the effects of component-based architectures? They mean that developers no longer have to know HTML to write HTML. When it comes to accessibility, this is not a good thing. The vast majority of accessibility lives in the markup. Not understanding which elements to use or what is even valid to do in the language is always going to cause accessibility barriers."
Just released #LogTape 0.7.0 with implicit contexts! Now you can automatically include request IDs, user IDs, and more in your logs without passing context manually. Read more about this powerful feature:
👋 I’ve been a developer for about 24 years. The last 10+ I’ve been working in #DevRel roles, currently at LaunchDarkly as a Developer Experience Engineer.
I’m active in the developer community as a speaker, author & organizer. I speak a lot on topics like #WebDev, #JavaScript, #Jamstack & #Serverless. I co-wrote multiple books on Jamstack and run a newsletter on the topic. I organize virtual events on cfe.dev & run the Orlando Devs #meetup.
Thought it might be fun to make a small jsr package that actually has a bit of real-world utility. So here's `isit` as in `isit("Friday") ? "Hooray!" : "Boo!"` which I'll use in our morning work standup bot to send a different Teams meeting link depending on what day it is. Maybe it'll be useful to someone else too. It supports custom Dates and timezone offsets too. Enjoy! https://jsr.io/@phocks/isit
I should probably make a proper #introduction post. So guess now is fine?
Hello! I am Ari Archer. I am an #LGBT 17-year-old #OpenSource#Autistic developer from #Lithuania who likes to mess around with #software, #backend development, and of course my favourite #programming languages: #C (ANSI #C89 is my favourite C standard) and #Python :) I can fuck around in Assembly too, although I tend to think it's not practical in most cases, although I don't do that much low level programming for it to matter, I do enjoy occasional #ProgrammingLanguage development, though.
I have a (shitty) #website on https://ari.lt/ (which I need to re-re-re-write (I need to rewrite it for the 3rd time, the 2nd time was fine I think, but I kinda made it bad now ;-; because it's basically all #JavaScript), I also have a #blog at https://blog.ari.lt/ which I post random #thoughts, #progress, #tutorials, #recipes, etc. on, could I call it #lifestyle content? I don't know. I also like #cats (and I have one named Tina and I love her very much), #cooking, and #researching random things which I yap about to my friends.
I am very pro-#selfhosting and feel like more people should do it, maybe not anything large or mainstream, but at least try to, #learning about things is fun, and self-hosting teaches you a lot, as well as making it easier for people to migrate to #foss easier, which I believe to be a good thing. Most of my beliefs are centred around "by people for people" as in everything should be accessible, open source, and #free as in #freedom.
I hope I enjoy my stay on #fedi these days as I haven't really been on fedi for a while now, in the mean time you can reach me on #email (ari@ari.lt), #matrix (@ari:ari.lt) or #Git/#GitHub (https://ari.lt/gh).
Greetings, Program! I'm Evan (he/him). I live in the #Portland area.
I'm an Engineering Manager with a technical background in #javascript and #frontend, and I believe putting people first is the key to making good software.
I’m a dad to three very energetic young kids, I’m a #coffee enthusiast, I like playing #videogames, taking #photos, and I enjoy #cooking when I can make the time for it.
Who me? Just a #Maker, IT Consultant and "all-around-#nerd".
I grew up watching Saturday morning cartoons, original #StarTrek re-runs, reading #Fantasy & #SciFi (not SyFy), lots of #Lego and eventually graduated to #RPG and #tabletop gaming.
My first computer was a #Commodore Vic-20 - at school, we learned graphical #LOGO on PETS and Apple IIe's... crashed the Unisys ICON network often before getting my first PC - grudgingly - really wanted an #Amiga.
Eventually, it was time for college - I *thought* I would be heavily involved in the physical aspects of technology, circuit design, and hardware engineering - instead, I gravitated to #programming.
At some point, you write something yourself. In this case, a JavaScript solution to unite blog posts with their interactions on the #socialweb and beyond...
- added two list param types (numeric & string) - added support for composite/nested param types, esp. interesting for custom param types declared by artworks and/or platforms - updated the first (of two) GUI param editors in the reference implementation to support composite params - added new example showcasing custom & composite param types (oscillators)
To explain a bit further: The example defines a custom oscillator parameter type, which itself consists of multiple sub-params to configure waveform, frequency, amplitude etc. Using the GenArtAPI messaging protocol, the external param editor (not knowing anything about the artwork or this custom param type) can still provide GUI widgets to customize the 2 oscillators used... Likewise, the artwork is completely decoupled from how those oscillator values are being computed or how they're customized via the editor...
If you've been avoiding #JavaScript & #TypeScript due to the complexity of the #Node.js ecosystem, give #Deno a try. Everything is simplified and you can start coding right away without having to set up a development environment.
If this was built with a framework the framework wouldn't even be loaded yet. This doesn't even lazy load any JS. There is just so little of it that I load it in <head/>. Each stone is an html element AND each stone placement has to calculate quite a bit before it can move on.
Henlo frens, i have completed my basic studies of HTML and CSS with the help of a local school, now i begin studying Javascript.
But between the JS studies, i want to practice my HTML and CSS skills, what would be the best way to do that?
I believe that trying to clone existing websites would be a cool way to upskill. Do you know of any particular website(s) that i should try and clone as a beginner? I have once worked with cloning amazon.com.
What else can i do as well? I want to focus on styling and structure as well.
Lots of new additions & improvements to the https://thi.ng/genart-api proposal, documentation, the reference implementation, examples and param editors this week:
- added new (12th) parameter type: image maps (supporting grayscale or RGB) - added new example project using an image parameter to create artwork - added code example showing how an art platform (or artwork itself) might define & work with a custom parameter type (example: sine oscillator) - added/updated API docs (https://docs.thi.ng/umbrella/genart-api/) - started documenting API states & transitions (diagram still WIP, forthcoming) - initial documentation of message protocol (for communicating w/ parent window and/or external tooling) - simplified the pluggable time provider implementations (for animation) - updated the reference implementation platform adapter to support all built-in param types - major update GUI param editors, now allowing users to dynamically load & customize externally hosted (compatible!) artworks, and also supporting image params, custom color chooser component...
ALT text detailsScreenshot of the linked image map parameter example, showing a sidebar with different parameter controls (low res grayscale image preview, color picker), and the artwork showing the imported image represented as a fine grid of differently sized pink dots on dark blue background
Hello World! Alex Standiford here. I am a web developer at GoDaddy, who travels full-time in one of two RVs with my two kids, two cats, a dog, and my wife. I mostly talk about #travel, #WordPress, #RVlife and bad puns. Looking forward to meeting y’all!
With zero-overhead bindings to V8 APIs, memory safety through Rust’s ownership model, and great docs, it’s battle-hardened and production-ready. From here on, Rusty V8 will follow Chrome versions for predictable upgrades.
#LogTape v0.6.0, a zero-dependency structured logging library for #JavaScript & #TypeScript, has been released. The main changes include:
• Loggers now can override sinks of their ascendants. • Placeholders in message templates now forgive leading and trailing spaces. • Added LogRecord.rawMessage property. • Built-in text formatters now can be customized.
Today's #FediJam update: pixel graphics by @misnina are in, collectible placement is (probably) finalized. I'm very happy with how this looks now! 🙂
1.5 weekends to go before the jam ends, core gameplay and visuals more or less done, lots of auxiliary stuff left: light story content, sound effects, end screen, title screen and menus, options, credits, touch controls, ...
(Marked sensitive in case you'd like to avoid spoilers)
ALT text detailsA blue feather floats across a cloudy sky. A red pinwheel (controlled by the player's mouse cursor movement) propels it around softly. Clusters of silvery letters float in the sky, some of which the feather collects by getting close to them. Everything is rendered in 2D pixel art, except the letters, which are small 3D objects.
‣ Add `process` global variable, remove `window` ‣ Improve dep management ‣ Permission system updates ‣ Many stabilizations ‣ Better CommonJS support ‣ Test documentation with `deno test --doc`
I'm looking for a #JavaScript / #NuxtJS developer to help me extend my FastAPI/NuxtJS template (https://github.com/whythawk/full-stack-fastapi-postgresql) to support #ActivityPub. I'm busy with the #FastAPI server. My objective is an open source starter template for developing full federated apps for creator commercial activity (like a personal Etsy or Amazon site) where creators can sell their work & supporters can follow for new product releases. This is a paid project. Contact me direct. #FediHire
Since there has been a huge influx of new users, I decided to write a new #Introduction and actually pin it to my profile. I'm pushing 50 years old and I live in a Red State that is trying to make me illegal. I'm a #pansexual / #bisexual#transgender woman married to a heterosexual cisgender woman who frequently talks about the current hellscape for people like me in my Toots. I'm #NeuroDivergent / #ND which is probably why all of these sentences start with "I". I've worked in #InfoSec for a little over 20 years. I've had lots of roles in #SecEng, #SecOps, and #ThreatManagement. I taught myself #Perl, #Bash, #SQL, and #PowerShell. I'm decent at #JavaScript. I can read #Python and #Ruby. I enjoy automating things and turning manual processes into scripts. I've been the primary #CareGiver to my wife for 8 years since she developed a chronic condition and went on disability. My hobbies including #writing#paranormal short fiction, journaling my #dreams, and playing #PCGames on my laptop and #SteamDeck. I prefer #StarGate over #StarTrek over #StarWars. Still waiting for Amazon to do something, anything with the Stargate property. While we loved the #ArrowVerse including #Stargirl and #SwampThing, in general we prefer #Marvel over #DC. I'm a fan of #Horror / #HorrorFam, #HorrorMovies and #HorrorBooks, especially the existential dread of #CosmicHorror or #LovecraftianHorror. I tend to sympathize with the nameless terrors. I am not a fan of mindless slashers, unrelenting gore, or torture porn. Over-the-top, egregious gore that crosses into the absurd is fine, though, so I am a Sam Raimi fan, obvs. Also, #HorrorComedies are underappreciated. I'm slowly reconnecting with my #Pagan roots. I knew some stuff about #Tarot and had a friend who as a tree a lifetime ago and I'm trying to rekindle that. We've got #Cats and they are our kids. I also happen to love #Frogs, but we don't have any of those.
Unveiling the core gameplay loop of my #FediJam entry. 😀 Think you can do better than me? You're probably right! Prove it next month!
Note: still placeholder graphics, have not even started on presentation except basic animation. I wanted to get the movement nailed down early since it's so core to the experience. This feels about right.
(Gonna be marking these as sensitive in case people want to avoid spoilers.)
ALT text detailsA red pinwheel, controlled via mouse movement, softly blows a black feather across a cloudy sky which the camera is slowly panning across. Some purple cubes are jiggling in the sky, the feather collects some of them through close contact. The collected cubes shrink and start rotating around the feather.
My name is Austin and I love my family, Sports, Music, and Tech.
I am a software developer at #PayTheory. At my job currently I work primarily with #Javascript, #React, and #Python. I know some #Swift and hope to publish an app in the AppStore in 2023. I am going to try to #BuildInPublic here.
Finally starting on my #FediJam project today. 😀 Because is it a real deadline if you don't start on the thing halfway through? 😇
This is after an hour or two of getting warmed up again in #threejs. Hand-fudged physics, no graphics yet, but you can guess at the basic gameplay concept. I'm having fun so far!
ALT text detailsA gray rectangle floats in a blue void. A red spinning square appears, controlled by mouse movement, moves around the screen and softly pushes the rectangle around like a repelling magnet.
Acerca de mí: #introduction#presentation ¡Hola! Soy Mónica Gómez, también conocida como Autumn64. Soy una estudiante mexicana de Ingeniería en Sistemas Computacionales, soy una mujer transgénero y soy activista por el movimiento del #Software_Libre.
En redes me dedico a la promoción y difusión del Software Libre, así como de sus ventajas técnicas y éticas desde el punto de vista latinoamericano e hispanohablante.
Esta es mi cuenta principal, y además tengo otras cuentas en el #Fediverso. Si quieres verificar que realmente soy quien digo ser, por favor revisa mi clave pública: https://www.autumn64.xyz/src/es/key.html
It has two fun new shape styles, a bunch of added logos (👋 @pixelfed@joinpeertube@Codeberg@forgejo and more), some advanced options for turbo nerds, and irregularly shaped logos now get better cutouts.
I think this covers most of the feature requests I've received. 😀
it's been a while and there's new folks on here so here's my #Introductions post again
Hey there! I'm Aode (or Chad or Tavi or asonix or Arlo or...)! I'm a lion or eevee or other lion or dog or hyena or on the internet on my small personal server on here. pronouns are He/They
I'm a big #WarriorCats fan although I haven't read the most recent series yet (or a couple novellas and super editions before then) but i've read most of the books!!!
There is one thing keeping me from switching to Firefox full time: the Chrome UI sounds extension. It makes a sound every time a new page loads or content updates. It's super helpful as a screen reader user when navigating very complex web apps. I tried repacking it for Firefox, but it won't run without some work. I'm looking at the sourcecode to see if I can make it work, but this is well outside my comfort zone. Anybody have resources for porting extensions from Chrome to Firefox?
I’ve been on here a while but never wrote an #introduction post so here it is.
My name is Mark thought most people call me JR (J.R. not “junior”). I am a believer and follower of Christ. My passion is #software#engineering and I’ve been at it professionally for over 14 years. Though I mostly develop for the web I enjoy working with the #fullstack including the hardware and architecture of it.
haven't done as much coding in d3 as i used to, but i just wanna point out how great it is that we have a data visualisation tool like this that is free and open source. check it out if you haven't already https://d3js.org
I’ve been fascinated by the #web since I first got on the internet when I was a teenager. The idea that anyone could create a website — how cool is that!?
I’ve been a #Mac user even longer (my parents were in education and my mom would bring home her office Mac Classic on the weekends). Being creative with #HyperCard and wanting to make dynamic websites eventually got me into #programming. First with #Perl, later #PHP, and now #JavaScript and #TypeScript. I’ve also had some fun with #C, #ObjectiveC, and #Swift.
For 14 years I worked at a small company that makes the premier CMS for the #AltWeekly press in the US. Now I work on web applications in #React in the far-more corporate world. I also used to co-organize TucsonJS and Tucson React meetups.
I'm a #softwaredev focusing on #javascript & #typescript specifically #deno. Right now, I'm working on a blog called Craig's Deno Diary. I also contribute to a few Deno projects and am taking a break from working in the corporate world.
I have over 20 years of experience in web development, first using Java and recently JavaScript/TypeScript. Before that I was a #journalist for 10 years.
I live in #Maine USA & try to enjoy the beautiful environment here as often as possible.
Some new #passkey capabilities are being added to #Chrome after a careful standardization work by the community. - Hints: allow you to control #authentication UI, especially when you want to focus on security key or cross-device authentication. - Related origin requests: allow passkeys to work on related but different origins. - JSON serialization: simplifies your #JavaScript code with binary encoding and decoding.
There is a fundamental difference between #complexity for the sake of convenience (I can build an entire app quickly. Think #JavaScript framework of the day), vs complexity for the sake of robustness (I can make changes to the app quickly without introducing new bugs. Think #Rust or #Haskell).
When you are not familiar with the tech, both can look the same, but they are not. The latter is actually #simplicity in disguise
I currently work at the Icelandic Met Office as a #GIS Coordinator in #Reykjavik. In general, I help people make maps, find #geodata either with code (#python or #javascript) or with desktop software like #QGIS
I love the outdoors and enjoy hiking, climbing and biking. I've been involved with Icelandic Search & Rescue for many years, both on the frontline (mountain rescue) and as an instructor for new team members.
Father of twins since 2016
ALT text detailsFamily of 4 on a picknick in Iceland
If I had a bajillion monies and didn't need to work I would spend my life as a muse for everyone I meet. I want to help everyone find their passions and do cool things. I like to help. I'm not sure what hashtag to use for that.
Updated internal state handling of the https://thi.ng/parse parser generators & DSL to define parsers. Seeing a 1.2 - 1.6x speedup of parsing performance in example projects (see project readme for links), especially for larger inputs...
Version 0.5.0 of #LogTape, the zero-dependency #logging library for #Deno, #Node.js, #Bun, edge functions, and browsers, has been released! The main additions include:
• Contexts • ANSI color formatter • Comprehensive docs • A few API conveniences
It’s been years since I’ve used NodeJS and was curious about the current situation. Is Deno a thing? I see they backtracked a bit and now have an NPM compatibility layer (although I don’t mind that). And I think I like the direction with JSR.io. Is Bun alright? I’ve seen some comments saying that it was not ready for v1 yet. Is this going to be like an io.js situation and we will all go back to Node eventually?
Hosting on Deno Deploy just got more performant with beta Web Cache API support: 🚀 sub-millisecond read latency 🚅 multi Gbps write throughput 💾 unbounded storage
Deno 1.46 is not only the last 1.x release, but also one of the biggest: - Simpler CLI - Multi-threaded web servers - HTML, CSS, YAML support in `deno fmt` - Better Node/npm compat (support for playwright, google-cloud, etc.) and much more 👇️
The `datetime` attribute of the #HTML `<time>` may seem complicated: it accepts a lot of formats in order to deal with 1) moments 2) durations 3) timezone offsets.
I've rewritten #Fedify several times and in several languages. The first time it was written in #TypeScript, then #Python, then C#, then back to TypeScript. (It was codenamed FediKit at the time of development.) I settled on TypeScript for the following reasons:
• It has a decent JSON-LD implementation. • Lots of people use it. (I wanted Fedify to be widely used.) • It's type-safe enough.
Even if I were to build Fedify again, I would choose TypeScript.
In the next version of #LogTape, a zero-dependency #logging library for #JavaScript & #TypeScript, contexts will be introduced that allow the same set of properties to be shared across multiple log messages. Thanks to @okikio for collaborating on the design! This feature is available for preview in 0.5.0-dev.60+f819929c.
ALT text detailsconst logger = getLogger(["my-app", "my-module"]);
const ctx = logger.with({ userId: 1234, requestId: "abc" });
ctx.info `This log message will have the context (userId & requestId).`;
ctx.warn("Context can be used inside message template: {userId}, {requestId}.");
- Fixed a bug when viewing threads in notification screen. - Implemented setting for CW toots (default collapsed or visible) - Fixed dates - Fixed image viewing - Added help to toot editor - Changed some colors - Updated #curl to 8.9.1 - Added ALT text for image uploads
#LogTape is a logging library for #JavaScript and #TypeScript. It provides a simple and flexible logging system that is easy to use and easy to extend. The highlights of LogTape are:
• Zero dependencies • Designed to be used in libraries as well as apps • Supports virtually every runtime: #Node.js, #Deno, #Bun, edge functions, and browsers • Structured logging • Logger categories (names) are hierarchical • Dead simple sink (destination) interface
This is my 13 year old Acer Aspire One 722-C62kk running the #Linux version of #DOStodon on a current Arch install. I recently learned I can get a new battery for 20€ to revive it. 😊
Hi I'm Daniel, a 37 year old developer and technical lead at @telemetrydeck ! I enjoy long walks along the #datalake, I work in #analytics and #privacy is super important to me! (Which is why I make an analytics service that provably won't collect personal #data). I also love developing in #swift for #iOS and #vapor and I tolerate #javascript :D~
Ich bin zwar noch bis November ausgebucht, aber wie man so schön sagt: Der frühe Vogel fängt den Wurm, also falls jemand für Nov/Dez/Januar ein Projekt in der Pipeline hat und #PHP#Laravel#Svelte#JavaScript#Vue#Livewire Unterstützung braucht, bitte Bescheid sagen!
#Deno and #Bun people are putting an incredible amount of work modernizing server side js.
The energy is reminding me of early day #Python - so many new tools made with proper care behind rather than most of NodeJS ecosystem which is just glued together with band-aids and staples :blobcatgrimacing:
That being said, after working with Deno for the past week it still feels a bit too bleeding edge though it does work with #jupyter!
## Detail The images depict dots representing positions of tones of the Aeolean mode (relative minor) of a #Major#Scale as appears on a standard #guitar#fretboard
The various SVG's show what is meant to be perceived as "the same mode", with select tones missing. It's a basic, "locate what's missing" #Puzzles
### Deficit
I know how to make the SVG "look how" i want enough to satisfy me. I know what I want for the function of the user interaction.
I don't know efficient JavaScript/ #HTML5 to do it
Any libraries that are meant specifically to assist w/ this type of project? There's jQuery UI for example, but I've never messed with it deeply.
Modern #CATMAID enables hundreds of #neuroscience researchers world wide to collaboratively map neuronal circuits in large datasets, e.g., 100 TB or larger, limited only by bandwidth and server-side storage. The goal: to map and analyse a whole brain #connectome.
Running client-side on #javascript and server-side on #django#python#postgresql, it's a pleasure to use–if I may say so–and easy to hack on to extend its functionality with further widgets.
The first minimally viable product was produced in 2007 by Stephan Saalfeld (what we now refer to, dearly, as "Ice Age CATMAID), who demonstrated to us all that the web, and javascript, where the way to go for distributed, collaborative annotation of large datasets accessed piece-wise. See the original paper: https://academic.oup.com/bioinformatics/article-abstract/25/15/1984/210794
PE argument I find irksome: "everyone has js enabled"
Nobody is saying otherwise.
What we are saying is js fails, often, and interactivity should work *before* JS loads (if it even does). That's progressive enhancement. Or 'islands architecture' if you prefer.
fresh #Introduction time because it's been like 2 years since I wrote one!
I'm erin, a transfeminine front end developer (or to steal from @brad_frost front of the front end developer) living in so called Portland, Oregon. I seem to mostly post about mental health, old thinkpads, craft web development, privacy, security, and the death of the world wide web. I post about politics too (sorry about that!). I have a blog at @erin@blog.kvuzet.org and a I post about books I'm reading on bookwyrm at @kvuzet@wyrmsign.org
ok, time for a big old list of tags that I'll probably update later:
Now that our instance has a higher size limit for toots, time for a re-#introduction. This time with more hashtags!
Hi! I'm Jeff. :blobcatwave:
I've been a software engineer since around 1999 I guess. I started with #WebDev back in the early days of applets, DHTML, and Flash. I've since moved on to #FullStack work on just about anything that has a compiler or an interpreter. I've even recently dabbled in #PCB design and #3DPrinting.
My software specialties are in high performance computing #HPC, #GPGPU, and #ComputationalChemistry. Although I usually enjoy any programming problem with a good challenge to it. I spent waaay too much time in school and got all the degrees in computer science. I still work in #academia part-time writing research software.
My favorite programming languages at the moment are #Rust and #Kotlin. Although, I've spent a lot of time writing #Javascript lately. With the right tooling it's not completely terrible.
#c - what if everything was a pointer #lisp - what if everything was a linked list #haskell - what if everything was a pure function #forth - what if everything was a stack #lua - what if everything was a hash map #erlang - what if everything was immutable #prolog - what if everything was a pattern to match #java - what if everything was a class #rust - what if everything was a memory allocation problem #golang - what if everything != nil #javascript - what if everything was everything
#HowToThing#Epilogue#LongRead: After 66 days of addressing 30 wildly varied use cases and building ~20 new example projects of varying complexity to illustrate how #ThingUmbrella libraries can be used & combined, I'm taking a break to concentrate on other important thi.ngs...
With this overall selection I tried shining a light on common architectural patterns, but also some underexposed, yet interesting niche topics. Since there were many different techniques involved, it's natural not everything resonated with everyone. That's fine! Though, my hope always is that readers take an interest in a wide range of topics, and so many of these new examples were purposefully multi-faceted and hopefully provided insights for at least some parts, plus (in)directly communicated a core essence of the larger project:
Only individual packages (or small clusters) are designed & optimized for a set of particular use cases. At large, though, thi.ng explicitly does NOT offer any such guidance or even opinion. All I can offer are possibilities, nudges and cross-references, how these constructs & techniques can be (and have been) useful and/or the theory underpinning them. For some topics, thi.ng libs provide multiple approaches to achieve certain goals. This again is by design (not lack of it!) and stems from hard-learned experience, showing that many (esp. larger) projects highly benefit from more nuanced (sometimes conflicting approaches) compared to popular defacto "catch-all" framework solutions. To avid users (incl. myself) this approach has become a somewhat unique offering and advantage, yet in itself seems to be the hardest and most confusing aspect of the entire project to communicate to newcomers.
So seeing this list of new projects together, to me really is a celebration (and confirmation/testament) of the overall #BottomUpDesign#ThingUmbrella approach (which I've been building on since ~2006): From the wide spectrum/flexibility of use cases, the expressiveness, concision, the data-first approach, the undogmatic mix of complementary paradigms, the separation of concerns, no hidden magic state, only minimal build tooling requirements (a bundler is optional, but recommended for tree shaking, no more) — these are all aspects I think are key to building better (incl. more maintainable & reason-able) software. IMO they are worth embracing & exposing more people to and this is what I've partially attempted to do with this series of posts...
ICYMI here's a summary of the 10 most recent posts (full list in the https://thi.ng/umbrella readme). Many of those examples have more comments than code...
ALT text detailsCover of the book “Exploring JavaScript (ES2024 edition)” by Axel Rauschmayer. It shows a rhinoceros.
ALT text detailsCover of the book “Deep JavaScript” by Axel Rauschmayer. It shows a freediver who swims under water and follows a rope down into the deep.
ALT text detailsCover of the book “Tackling TypeScript” by Axel Rauschmayer. It shows a a pair of boxing gloves.
ALT text detailsCover of the book “Shell scripting with Node.js” by Axel Rauschmayer. It shows a field of light blue hexagonal bars, with three yellow ones in the middle.
My life’s work is building Oolie, our family business and Certified #BCorp helping families sleep better with #organic bedding and baby products. I hope you’ll check us out.
In my former career, I was into online learning, creative coding, and data visualization, even publishing a couple of books. I still love that stuff (#DataVis#Processing#p5js#d3js#JavaScript), but that feels like 1M years ago.
Expect to see posts about everything mentioned above!
I'm an open-source enthusiast and self-hosting masochist. Initially a #JavaScript developer, still doing all things web, big #WebAssembly fan, recovering conference addict. I am a #DevRel focusing on #DevEx & OSS communities in particular. Also a staunch advocate of flexible, async remote work.
ALT text detailsFlaki sitting on a bench in Tallinn with the coastal Noblessner area in the background. He has a white hoodie, jeans and lace-less black shoes, looking directly into the camera a bit squinty. His right hand is held up to the side, where Lumi the young blue merle collie is lying on the bench, sniffing his palm in search of treats. His left hand is full of colorful dog things, including a fox toy and Lumi's bright blue lead. The rest of the picture has a an overall faded, bluish tint and a white border that makes it almost feel like an album cover.
#LogTape is a logging library for #JavaScript and #TypeScript. It provides a simple and flexible logging system that is easy to use and easy to extend. The highlights of LogTape are:
• Zero dependencies • Designed to be used in libraries as well as apps • Supports virtually every runtime: #Node.js, #Deno, #Bun, edge functions, and browsers • Structured logging • Logger categories (names) are hierarchical • Dead simple sink (destination) interface
Here's my #introductions... I'm into #retrocomputing and #retrocomputers, am a #6502 fan, but I like green spaces and days which not overcast, I like science and #sf - mostly #sfbooks and stories - #computerscience, aka #cs or #compsci, I like #brianeno for his music and his thoughtful writings and funny videos, I write just a little code in #python and #javascript and #assembly and generally spend a lot of time on the internet. Isn't the world a lovely place but in a fine old state though?
^ This is useful for when you're using #Javascript's dynamic capabilities with classes and you want to let #Typescript know about what you're doing.
`AddProperties` takes a class as the first argument and returns a class. Instances of the returned class have the properties that you specify in the second argument as well as all the stuff from the original class.
#Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
• Type-safe objects for Activity Vocabulary (including some vendor-specific extensions) • #WebFinger client and server • HTTP Signatures • Middleware for handling webhooks • #NodeInfo protocol • #Node.js, #Deno, and #Bun support • CLI toolchain for testing and debugging
If you're curious, take a look at the Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
😅 So I did not fully appreciate the power of hashtags on this place when I wrote my #introduction, so I'm giving it a second go.
• I'm a front-end web developer in Spokane, WA. I work for Red Hat on Ansible Controller using #react, #javascript, #typescript. I don't write so much #CSS here as I have at previous gigs, but, I'm okay at that too…
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
How did we go back to the world of #javascript being an absolute sausage fest - absolute state of this where there are no women in list until #28 (and then only one) - it's almost exclusively white men
ALT text detailsA screenshot of The State of JS 2023 results - absolutely no women on the list "Which individuals do you read, follow, or just want to highlight in the JavaScript community?" Up to 28
Unicopedia Ægypta is a developer-oriented set of #Unicode utilities related to Egyptian hieroglyphs, wrapped into one single app, built with #Electron.
Why do I like it? – Feels cleaner (subjective!). – Easier to grow standard library (no global name clashes). – Namespace imports are faster than property access.
@tante Yes! Especially on the point of react being used in areas HTML + JS work fine. In my side projects I’ve practically sworn off React. The more I learn about options prebaked into JavaScript, the less I value frameworks for a majority of apps. I can’t imagine how many web apps can be rebuilt using WebComponents and CustomEvents and simple custom state management library with less complexity. Worst case, just use Lit or Enhance. #JavaScript#React#WebComponents
I guess I should have an #introduction on here as well:
I'm a programmer and #FreeSoftware enthusiast. I've been using #Linux as my main desktop and #Emacs as my... everything... since 2008. I started off with a lot of distro hopping, my journey took me through #Ubuntu, #Fedora, #Zenwalk, #Gentoo, and #Exherbo before settling on #ArchLinux, now with #Guix on top.
I love writing software in #Lisp (either #CommonLisp or #Scheme or any other), but I don't get enough of a chance to. Except #EmacsLisp, basically all my personal projects end up being written in that. Other than that I've enjoyed writing things in #CSharp, #PHP, #Python, #JavaScript, #Ruby, #Groovy, and several other languages.
My main account is @ryuslash, this is my account for experimenting with self-hosting.
I’ve moved recently, time for a (re)introduction — and a heartfelt Thank You! to @ben
I am a writer, copywriter, online editor, and I generally write a lot; I design websites with plain HTML/CSS/JS or using WordPress and other CMS; occasionally I work as a speaker, podcast producer, sound designer — to mention the most important bits.
ich bin umgezogen und erst seit ein paar Stunden hier auf dem neuen Server, deswegen eine kurze Vorstellung — und ein herzliches Dankeschön an @ben
Ich bin Texter und Online-Redakteur, schreibe auch sonst viel; ich gestalte Websites in HTML, mit WordPress oder anderen CMS, arbeite außerdem gelegentlich als Sprecher, Podcast-Produzent, Sounddesigner – um mal die wesentlichen Dinge genannt zu haben.
#Introduction Greetings! I'm a #software developer in the world of #dotnet and #JavaScript. Worth mentioning - a degree in game dev and table tennis coaching credentials.
I won a Hackathon, and once increased sales by 300%. In my timeline, you'll mostly find reflections on programming, as it is my bread and butter, as my odyssey into open-source continues.
Here to exchange ideas, learn, and share wisdom. Open for spirited discussions. Always game for a chat, so feel free to reach out.
Hey Fediverse! I plan to make this profile a notebook of #TIL bits about #webdev, #javascript, #software and #hardware. Probably the odd toot about digital privacy, free speech and computer history. Will try to help the community as best as I can!
Je profite de la vague d'arrivage pour faire mon #introduction que je n'ai jamais vraiment faite finalement :)
Je suis dev, principalement web depuis maintenant une douzaine d'années. J'ai commencé avec #PHP et la stack #WAMP comme beaucoup, un petit passage forcé et douloureux par .NET et maintenant principalement du #JavaScript (avec Vue) #NodeJS et un peu de #Mule
Au delà de tout ça, j'aime les jeux vidéos (BotW et TotK sont en haut de ma liste), le #cinéma, la #moto et les bouquins :)
Ahora que parece que la migración a mi instancia se ha completado es el turno de presentarme...
Me gano la vida como programador #Android tanto con #Kotlin como con #Java, aunque también "domino" otros lenguajes como #PHP o #Javascript y me defiendo con #Swift, #C y otros muchos. También me peleo con mi servidor, y poco a poco voy pasándome al #selfhosting.
Me gusta la #música (casi cualquier género), el #cine (sobre todo terror y ciencia-ficción) y las #series (ciencia-ficción mayormente).
I'm also a music nerd and #HotSauce lover and recently got back into the habit of reading #books. #VideoGames are also something that is dear to my heart.
Feel free to reach out if you want to talk about any of these topics. Welcome to the #FediVerse!
So, I'm working on a thing for #rstats 📦 {leafem}... Add a geojson layer to a leaflet map and then add a layer selection drop-down menu referencing that layer. Let's us color our geometries according to selected features. Saves a lot of space as we only need to add geometries once and then have #JavaScript take care of the coloring. See https://twitter.com/TimSalabim3/status/1629180151224213510 for the journey so far.
Narrat 🐀 has been getting a bit of attention again so here's another intro of the engine. I think most people who might be interested in this don't actually know about it so I'm hoping to reach more people for once.
Narrat is a game engine I created to easily make interactive fiction games (narrative RPGs, visual novels etc) for desktop or browser.
I’ve worked on this game engine for some time, mostly to help friends make their games. It’s been used on a few small games, and some bigger ones in progress.
I'm a Product Designer at Netflix where I've most recently been working on design systems, but I’ve worked on multiple aspects of the service in my nearly 10 years there. I’m both a designer and a developer — I mostly work with #HTML, #CSS, and #JavaScript.
I’m also a husband and a father.
I used to live in The Bay (San Francisco) and now I live in The Land (Cleveland).
From 1 January 2023, I plan to #buildInPublic my experimental web framework. My aim is to have a framework that is suitable for real-time MPA while load instantly without any setup or compilation. I will use #nusa hashtag to post my progress 😊
ALT text detailsfile counter.js
```js
import { current } from "nusa/std"
export default class { // counter.js
accessor count = 0
increment() { this.count++ }
set() {
this.count = +current.event.target.value
}
}
```
ALT text detailsfile index.html
```html
<script src=nusa/render-scope async></script>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<render-scope>
<link href=counter.js>
<!-- only fetch/run counter.js when user scroll until this scope -->
<button :: on:click=increment text:= count>0</button>
<input inputmode="numeric" type=number :: value:=count on:change=set>
</render-scope>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<render-scope>
<link href=count-every-1ls.js>
<!-- only fetch/run count-every-1s.js when in view -->
<!-- previous <render-scope> also get updated-every-1.js -->
automatically increment every 1s until it can be divided by 5
<button :: on:click=increment text:= count>0</button>
<input inputmode="numeric" type=number :: value:=count on:change=set>
when it dividable by 5, click to continue to increment on every 1s
</render-scope>
```
ALT text detailsfile count-every-1s.js
```js
import Counter from "./counter.js"
import { iterate } from "nusa/std"
setInterval(() => { // count-every-1s.js
iterate.for(Counter, (index, { count }) => {
if (!(count[index] % 5)) { iterate.skip(); return }
count[index]++
})
}, 1e3)
export { default } from "./counter.js"
```
ALT text detailsVideo of a mouse cursor moving over links. When hovered, the link’s underline turns into a wave. When the cursor leaves, the wave vibrates as a damped standing wave until it decays back to a flat line.
ALT text detailsGraph of modified damped cosine function y(t) = -e^{-5t}\cos(2\pi 8t) + 1
I’m matt and I spend a lot of my time building things that people use on the internet. I’m always down for #Frontend chat on all things #JavaScript, #React, #WebAssembly etc.
I’m part scientist🔭🥼 (in another life), part maker🔩🪛, part runner🏃🏽♀️🏃♂️, part climber🧗🧗♂️… the list goes on.
I’m also super curious about how #ActivityPub works and the #Fediverse, so now that I’ve been afforded some time off I may take a deeper look 👀
#Introduction: I’m Lucas, bi software developer and Wikimedian from Berlin. I like writing tools for #Wikimedia#Toolforge, mainly in #Python, though I’m also working on a #JavaScript library to use the MediaWiki API; on the projects, I’m mainly active on #Wikidata and #WikimediaCommons. I play the #piano and occasionally live-stream that or post recordings. I’m making my way through #Tolkien’s The History of Middle-earth. I speak German, English and some Portuguese. Nice to meet y’all 🙂
Celebrating my past experimental #projects about state machine #DSL that can generate both code and diagram. But alas, I don't have any single project in need that DSL so continuing it is kinda hard. It's written in #Rust but I have 2 other prototype written in #Nim (require compilation) and #Javascript (pure runtime, no compilation).
If anyone want to collaborate or continue the effort, feel free to ask me. I have some stuff in mind about it. https://github.com/DrSensor/scdlang
I'm a software developer in the #boston area that's primarily focused on Web Players. Things like Video.js and media-chrome. I'm also focused on #a11y and accessibility of the players, particularly in the realm of captions, as the current editor of WebVTT and a member of the Timed Text Working Group at the W3C. I also enjoy writing #javascript.
I'm an avid reader, though, mostly consume books as audiobooks. There's a lot of #scifi in there, but also Fantasy, and recently I've been trying to alternate non-fiction in there too. I also watch lots of movies and TV. And not to mention manga and anime.
My name is Stephen Bannasch and I think kindness and curiousity are important.
Used Ruby for all sorts of projects since 2008. Also created very high performance JavaScript model-based visualizations. Recently been digging into machine learning ... which seems both fascinating and creepy. Hardware projects over the years involving sensors and microcontrollers, along with digital and analog design.
Bon. J'ai dû remigrer d'instance pour la 2e fois en 10 jours. Donc revoilà mon #introduction.
Je parle peu et repartage pas mal ce qui me semble intéressant / important. 🌌 J'aime découvrir des choses dans tous les pans scientifiques, particulièrement en #linguistique, #astronomie, #sociologie.
💻 Je code des trucs #JavaScript en faisant gaffe à l'accessibilité et je garde un œil sur le #libre et les questions de #privacy. Et je tripatouille #Linux.
What’s up party people. I’m Ryosuke, I work at #PlayStation prototyping new experiences across console, #VR, and more. Before that I ran a #cannabis publication and studio for over 10 years.
My main hobbies are #classicalguitar and the ancient game #go or #baduk -- I'm 1-5k, always looking for people who want to play in person regardless of level!
Hi, I am known as dunkelstern almost everywhere, in real life just call me “jo”.
I am a backend-developer using #python and #javascript by day, but i am living on github by night too and working on one of those unfinished projects there (#rust, #c, python and #cad)
Hi, ich bin fast überall dunkelstern, im echten leben sagen die leute meistens Jo.
Ich arbeite als backend-entwickler mit #python und #javascript, bin aber auch privat auf github zuhause und kippe dort meine drölf millionen unfertige projekte ab (#rust, #c, python und #cad)
Wenn ich nicht an meinem #smarthome bastel dann wahrscheinlich an irgend nem #3d-drucker oder sonstigem #elektronik gebastel.
Am wochenende findet ihr mich im habitat in augsburg, meinem #makerspace