@sirwumpus@tilde.zone avatar sirwumpus , to random

Dear Cupid,

You kinda suck at HR.

Still a lonely heart looking for work. I know a variety of languages like English, French, #C, , #C#, , or . Been looking more at too. We can always talk(1) over or . Or write(1) little notes to each other.

Surely there must be a job match for me, some place, some where in the . Valentine's Day three days away - share some love.

http://www.snert.com/resume/

@aral@mastodon.ar.al avatar aral , to random

🥳 JavaScript Database (JSDB)¹ version 7.0.0 released

  • Breaking change JSTable.PERSIST event now uses a parameter object with properties for type, keypath, value, change, and table. This should make listening for events on your databases much nicer to author. e.g., a snippet from Catalyst² I’m working on:
const settingsTable = db.settings['__table__']  
const JSTable = settingsTable.constructor

settingsTable.addListener(JSTable.PERSIST, ({ keypath, value }) => {  
 switch (keypath) {  
 case 'servers.serverPoolSize':  
 console.info('New server pool size requested', value)  
 this.updateServerPool()  
 break  
 // etc.  
 }  
})  

This new version of JSDB is not in the latest Kitten³ yet as it is a breaking change and I want to make sure I update my sites/apps first if needed. I should have it integrated tomorrow.

To see the simple use case for JSDB in Kitten (the default untyped database that’s easy to get started with and perfect for quick experiments, little sites, etc.), see: https://kitten.small-web.org/tutorials/persistence/

For a more advanced tutorial for creating your own typed databases in Kitten, see the Database App Modules tutorial: https://kitten.small-web.org/tutorials/database-app-modules/

For another example, see: https://codeberg.org/small-tech/jsdb/#table-events

Full change log: https://codeberg.org/small-tech/jsdb/src/branch/main/CHANGELOG.md#7-0-0-2026-02-10

Enjoy!

💕

¹ https://codeberg.org/small-tech/jsdb#readme
² https://catalyst.small-web.org
³ https://kitten.small-web.org

aral OP ,
@aral@mastodon.ar.al avatar

🥳 New Kitten release

Just released a new version of Kitten that now includes JSDB 7.0.0 with its improved JSTable.PERSIST event.

https://kitten.small-web.org

Note that this is a breaking change. If you’re listening for the old 'persist' event, please update your code.

For more information, please see the changelog: https://codeberg.org/kitten/app/src/branch/main/CHANGELOG.md#breaking-changes

Enjoy!

:kitten: 💕

@aral@mastodon.ar.al avatar aral , to random

So guess who wrote a convoluted date comparison conditional instead of using Temporal.ZonedDateTime.compare() like an intelligent human being and ended up hitting an edge case where future scheduled calls started getting cleaned off the database instead of past ones?

I’ll give you a hint: has two thumbs and his name is Aral 🤦‍♂️

Anyway, just restored things from yesterday’s backup and sent a direct message to everyone scheduled for a Gaza Verified video verification call apologising for the confusion and explaining what happened.

Moral of the story: stick to the Temporal API and use its methods if you’re implementing anything even remotely non-trivial involving dates, especially if there are timezones involved. (You can use a Temporal API polyfill in Node.js – I’ve been using temporal-polyfill.)

Now I’m going to expire for the evening.

💕

@aral@mastodon.ar.al avatar aral , to random

🥳 Multiple major releases today

@small-tech/auto-encrypt v5.0.0 (https://codeberg.org/small-tech/auto-encrypt#readme)
@small-tech/auto-encrypt-localhost v10.0.0 (https://codeberg.org/small-tech/auto-encrypt-localhost/#readme)
@small-tech/https v6.0.0 (https://codeberg.org/small-tech/https/#readme)

These releases bring short-lived certificates, IP Address (IPv4 and IPv6) support, and ACME Renewal Information (ARI) support to Auto Encrypt and @small-tech/https, implement a consistent asynchronous API across all three packages, and include loads of little fixes and code quality improvements.

This brings us very close to getting Web Numbers¹ support implemented natively in Kitten².

OCSP support is removed from Auto Encrypt and Windows support is dropped from all three packages as Microsoft is complicit in Israel’s genocide of the Palestinian people³ and Small Technology Foundation⁴ stands in solidarity with the Boycott, Divestment, and Sanctions (BDS) movement. Furthermore, Windows is an ad-infested and surveillance-ridden dumpster fire of an operating system and, alongside supporting genocide, you are putting both yourself and others at risk by using it.

Enjoy!

💕

🇵🇸 To support families facing genocide in Gaza, consider donating to them via Gaza Verified: https://gaza-verified.org/donate/

¹ https://ar.al/2025/06/25/web-numbers/
² https://kitten.small-web.org/
³ https://www.bdsmovement.net/microsoft
https://small-tech.org/

@aral@mastodon.ar.al avatar aral , to random

🇵🇸 @small-tech/cross-platform-hostname module deprecated

https://www.npmjs.com/package/@small-tech/cross-platform-hostname

The release of version 1.1.0 deprecates and removes support for this small module that normalised hostname reporting between Linux/macOS and Windows.

We no longer support Windows as Microsoft is complicit in Israel’s genocide of the Palestinian people¹ and Small Technology Foundation² stands in solidarity with the Boycott, Divestment, and Sanctions (BDS) movement³.

Windows is an ad-infested and surveillance-ridden dumpster fire of an operating system and, alongside supporting genocide, you are putting both yourself and others at risk by using it.

When supporting Linux/macOS, just use the built-in os.hostname() method which works the same way on both platforms.

¹ https://www.bdsmovement.net/microsoft
² https://small-tech.org/
³ https://www.bdsmovement.net/

@aral@mastodon.ar.al avatar aral , to random

🥳 @small-tech/auto-encrypt-localhost version 9.0.1 released

Automatically provisions and installs locally-trusted TLS certificates for Node.js https servers (including Polka, Express.js, etc.) Unlike mkcert, 100% written in JavaScript with no external/binary dependencies. As used in Kitten¹

https://codeberg.org/small-tech/auto-encrypt-localhost#readme

This is a housekeeping release:

• Add TypeScript type definitions.
• Improve code quality; fix all type warnings.
• Update dependencies and remove all npm vulnerability warnings.

Full change log: https://codeberg.org/small-tech/auto-encrypt-localhost/src/branch/main/CHANGELOG.md

Enjoy! 💕

¹ https://kitten.small-web.org

@aral@mastodon.ar.al avatar aral , to random

🥳 @small-tech/syswide-cas v7.0.2 released

Enables Node.js to use custom Certificate Authorities (CAs) alongside the bundled root CAs.

https://codeberg.org/small-tech/syswide-cas#readme

• Drops legacy Node support
• Is now ESM
• Improved code quality
• Added TypeScript type information

Full change log: https://codeberg.org/small-tech/syswide-cas/src/branch/main/CHANGELOG.md

Enjoy!

💕

@aral@mastodon.ar.al avatar aral , to random

Caught a bug over the holidays so I’m mostly resting, feeling sorry for myself, and taking the time to at least carry out some mindless housekeeping tasks (updating dependencies, etc.) on some of my Node modules.

Released updates to the following packages yesterday:

Tape-based Node.js testing:

• Tap monkey (https://codeberg.org/small-tech/tap-monkey)
• tap-out (https://codeberg.org/small-tech/tap-out)
• esm-tape-runner (no changes; just migrated to Codeberg: https://codeberg.org/small-tech/esm-tape-runner)

Let’s Encrypt:

• Node Pebble (https://codeberg.org/small-tech/node-pebble)

Enjoy! 💕

@thoran@ostatni.ninja avatar thoran , to random Polish

Poprosiłem Copilota o zoptymalizowanie mojego Dockerfile, który służy do budowania aplikacji. Przed zmianami budował się do 2GB, po "optymalizacji" miał 2.1GB. I takie to z AI zabawy xD

@aral@mastodon.ar.al avatar aral , to Testing

🥳 New Node Pebble release (version 5.3.0)

Thanks to the lovely folks at Let’s Encrypt tagging a new release of Pebble last night¹ (version 2.9.0), there’s now a new version of Node Pebble that uses it :)

https://codeberg.org/small-tech/node-pebble

Enjoy! 💕

¹ https://github.com/letsencrypt/pebble/issues/524#issuecomment-3672152945

@aral@mastodon.ar.al avatar aral , (edited ) to random

Node.js devs, so picture this: you run npm install and you get a bunch of packages with audit errors.

The only thing I want to know at that point is what’s the root package that these dependencies belong to? (Running npm audit fix is a last resort as I don’t like it fiddling around with the dependencies of nested packages.)

It’s also not a straightforward thing to do, but it’s nothing jq and a bit of piping can’t fix:

npm audit --json | jq -r '.vulnerabilities[].name' | xargs -n1 npm ls  

If you’re using fish shell, add an abbr(aviation) or an alias to that with a name like npm-audit-tree and you’re golden ;)

abbr --add --global npm-audit-tree 'npm audit --json | jq -r '.vulnerabilities[].name' | xargs -n1 npm ls'  

(I usually prefer abbreviations to aliases as I like to remember/see the actual command being executed.)

Enjoy 💕

@aral@mastodon.ar.al avatar aral , to Testing

Just updated Node Pebble to support latest release version of Let’s Encrypt’s Pebble testing server.

https://codeberg.org/small-tech/node-pebble

Enjoy!

💕

@aral@mastodon.ar.al avatar aral , (edited ) to random

🥳 New Kitten Release

• Reduces minimum Bash version requirement for installing Kitten to Bash 3.2+ (was previously Bash 5+). This removes the requirement for people on macOS to upgrade the ancient version of Bash that Apple ships with their desktop operating system. (If you’re on Linux none of this was ever an issue for you.)¹

• Updates runtime to Node 24.12.0, the latest long-term support (LTS) version.

https://kitten.small-web.org

¹ While it’s easy enough to update your version of Bash on macOS using Homebrew, that only works (as we discovered on Friday https://mastodon.ar.al/@aral/115706233541301655) if you’re running one of the latest three versions of macOS and thus excludes people with perfectly functional older computers. (Don’t get me started on why Apple ships an ancient version of Bash as we’ll go down the rabbit hole of open as in “open for business” vs “free as in freedom” and corporate capture and how capitalism will happily be the end of us if we let it. Aren’t you glad you didn’t get me started?) ;)

@aral@mastodon.ar.al avatar aral , (edited ) to random

So I’m teaching a friend who doesn’t have any development knowledge how to get started with Small Web development and I thought it would be a good opportunity to start creating and sharing the course on the Kitten web site, one lesson at a time.

Here’s the link:

https://kitten.small-web.org/course

It’s a work in progress that I’ll be adding to along with our lessons but the draft of the first one, on setting up your development environment (which I whipped up in the pub last night, so expect typos) is here:

https://kitten.small-web.org/course/setting-up/

Please feel free to follow along and file issues if you have thoughts for improvements, etc.

The Setting Up lesson will actually likely end up being the second one with the first being a theoretical one on Small (peer-to-peer) Web development and how it is similar to and differs from Big (centralised) Web development.

Enjoy!

💕

@aral@mastodon.ar.al avatar aral , to random

I love how simple Kitten’s Streaming HTML workflow makes building features like this, especially when using class-based Kitten pages and components :)

https://kitten.small-web.org

:kitten:💕

Screenshot of code, continuation of the same class, starting with the end of the html() method from the previous screenshot and going till the end of the class (the table[inert] style and the onToggle() method are highlighted: <style> table[inert] { opacity: 0.9; filter: grayscale(100%); } </style> </table> </section> } onToggle () { this.editable = !this.editable console.log(this.editable) this.update() } }](https://s3-eu-central-1.amazonaws.com/mastodon-aral/media_attachments/files/115/701/475/591/066/309/original/0dd9da4ffbc5e31c.png) ![Screenshot of code (the <${TeamSchedule.connectedTo(this)} /> line is highlighted): export default class InterviewsPage extends kitten.Page { html () { const today = db.calendar.today const futureDays = db.calendar.futureDays const pastDays = db.calendar.pastDays return kitten.html <${MainLayout} page='/admin/interviews/'> <h2>Interviews</h2> <${SignUpsSwitch.connectedTo(this)} /> <${InternalNav} /> <${TeamSchedule.connectedTo(this)} /> <h3 id='today'>Today</h3> <if ${today !== undefined}> <then>

Screen capture of the Team schedule interface from the Gaza Verified admin site. It is a table of names and days (Aral, Casey, Joy, Aseel, Fabio And Mondays … Fridays) with checkboxes at each name/day pair. It starts out greyed out. The Unlock to edit button is clicked and the interface comes alive (opacity returns to full and the checkboxes become green and clickable). The person toggles a few checkboxes and clicks the Lock button to lock the interface again and then repeats the process to undo the changes they just made.

ALT
@aral@mastodon.ar.al avatar aral , (edited ) to random

🥳 New Kitten Release

https://kitten.small-web.org

You can now use the simple on: prefix instead of hx-on:htmx: to define inline event handlers for HTMX events¹.

Also, there are three new event shorthands for responding to your Kitten page’s connection lifecycle:

• on:connecting
• on:connect
• on:disconnect

(These expand during render to hx-on:htmx:ws-connecting.window, hx-on:htmx:ws-open.window, and hx-on:htmx:ws-close.window, respectively.)

These are useful when using Kitten’s Streaming HTML workflow.

Full change log:
https://codeberg.org/kitten/app/src/branch/main/CHANGELOG.md#2025-12-10

Enjoy!

:kitten:💕

¹ https://htmx.org/events/
² https://kitten.small-web.org/tutorials/streaming-html/

aral OP ,
@aral@mastodon.ar.al avatar

Another quick release, this one adds Alpine.js support for shorthand event handlers.

Just add a @ before your shorthand event handler names to have them expanded as inline Alpine.js event handlers.

e.g., on:connect@on:connect

Enjoy!

:kitten:💕

@joepie91@slightly.tech avatar joepie91 , to random

I'm picking back up an idea that I'd played with a while ago, and fuck it, I'm just gonna do it, and see what happens and if it works. So!

Want to learn Node.js (plus other webdev stuff where applicable) from an expert? I'll be doing free tutoring sessions weekly. These will be in a group setting (max. 4 slots for now), but otherwise modeled after the 1-on-1 tutoring that I've done professionally in the past.

You choose a project that you want to make (free choice, not from a list), and I help you with it; and hopefully there'll be mutual help within the group too! You will be mostly doing (guided) self-study, and we will have a weekly session where we review the things you got stuck on, and I help you get back on track.

(I have 20 years of software development experience and 5+ years of teaching experience, and I've worked on a very wide variety of things including niche and unmonetizable things, so obscure and/or radical project ideas are not a problem!)

This approach of self-study may sound daunting, but I have found it to work for 100% of my past students, regardless of existing experience or even learning disabilities. That doesn't mean it's easy; it will still be hard work, as learning something new always is, but I will support that process where I can.

There are a couple of ground rules:

  1. Absolutely no "AI" of any kind. Not for writing your code, not for researching topics, not for 'review', not for anything else. I am offering to help you; I am not offering to debate a statistical model built for labour exploitation.
  2. You are expected to be motivated and take the sessions seriously, the same way you would for sessions you'd paid for. I have limited spoons, and I do not want to waste them on people who don't really care. That said, I am very familiar with ADHD and other disabilities - I can accommodate these and they're not an issue, as long as you do your best!
  3. You cannot be a bigot. As an easy test: if the ideas of 'social justice', 'intersectionality', or 'affirmative action' make you uncomfortable, then this is not for you.
  4. Your motivation for these lessons cannot be anything startup-related, in the Silicon Valley sense. I'm not here to help spawn more extractive tech companies. "Learning to find a job" is fine (though keep in mind the IT job market is not great right now).
  5. Leave your contempt at the door. If you "hate JS" and are hoping to be convinced otherwise, you probably have some work to do on yourself first. Language bashing (of any language) is not tolerated in the sessions, and if you constantly push back on advice, you'll probably be asked to leave.

What to expect:

  1. One 3-hour group session each week. Tentatively scheduled for Wednesdays at 19:00 GMT. It's recommended that you are there for the whole session, but not strictly required.
  2. The sessions are text-based, over Matrix. Video/audio calls are not possible due to auditory processing issues on my end.
  3. Free choice of project, whether small or ambitious; we'll work out a path regardless of what you come up with. As long as it's ethical, anyway!
  4. The sessions have no end date; assuming this works out as planned, they will continue indefinitely and you can attend for as long as you need them.
  5. The sessions are free and will remain free. There will not be any upsells, special offers, premium plans, or whatever other hidden bullshit I often see people come up with. I'm not doing this to pay the bills, it's volunteer work!
  6. Your level of experience is not important; I have tutored everyone from beginners to people with a 10+ year career in software development. We work on whatever is the thing that you want to learn!
  7. This is an experiment for me (in a group setting anyway), so there may be rough edges.

What you'll need at a minimum:

  1. A Matrix account and client.
  2. A screenshot tool of some sort.
  3. Very basic programming experience in any language; basically, you should know what things like 'variable', 'loop', and 'function' are, and how a conditional (like an if statement) works. If you've ever written a script for a game or tool, that qualifies!
  4. A code editor that you like working in. Anything with syntax highlighting and a file tree should do.
  5. Preferably some kind of Unix-y environment. In practice, that mostly means Linux, macOS, or Windows+WSL.

Send me a DM to apply; for now I'm sticking to 4 slots since doing this in a group setting is new to me, and marginalized (especially non-white) folks will have priority. Likewise, there is priority for people who intend to use their new skills to support (their) community!

The sessions will start shortly after all slots are full, or if I decide that no more applications are likely, whichever comes first.

@aral@mastodon.ar.al avatar aral , to random

🥳 JavaScript Database (JSDB) version 6.1.4 released:

• Adds TypeScript type definitions

Been meaning to do this for a while and finally got round to it :)

https://codeberg.org/small-tech/jsdb#javascript-database-jsdb

@aral@mastodon.ar.al avatar aral , to random

Ah, the joys of having a built-in native JavaScript database¹ that can persist and load typed JavaScript objects² and an interactive JavaScript shell (REPL)³ in Kitten⁴ :)

:kitten:💕

¹ https://kitten.small-web.org/reference/#database
² https://kitten.small-web.org/tutorials/database-app-modules/
³ https://kitten.small-web.org/reference/#kitten-s-interactive-shell-repl
https://kitten.small-web.org

ALT
@h4ckernews@mastodon.social avatar h4ckernews Bot , to random
@h4ckernews@mastodon.social avatar h4ckernews Bot , to random
@marquisdegeek@ohai.social avatar marquisdegeek , to random

ICYMI, here's a little thing from my 20 years in : https://github.com/MarquisdeGeek/arduino-controller-lib If you want to control
an via the browser, then this is the thing to use. (via ) One
code supports and

@ohiofi@mastodon.social avatar ohiofi , to random

Does anyone use WebHostMost.com? I just heard about it. They have a free tier that doesn’t require credit card info. Can run Node.js, Python apps, PHP.

@jenn @stefan

https://www.webhostmost.com/free-web-hosting

@stuartl@longlandclan.id.au avatar stuartl , to random

Trying out different front-ends for … as I'm finding the stock web client, whilst it does everything I want in a UI I'm happy to use, has a shockingly bad memory leak. If I leave it on the home feed for a day or so, by the end of the day the UI tab is consuming >5GB RAM and pushing everything out into swap.

That's bad on my laptop which has 8GB… it's even worse on the tablet with 4GB.

I gave a try on their hosted instance, looks promising, but when I try to build it on v22 to host it here, the post-install scripts try to feed the NodeJS binary a raw program, and of course it barfs not knowing how to interpret that. Had a look at the Dockerfile for it and the base container, no clues there… so that rules out Elk.

I'm giving a try now. Building it wasn't difficult, however I had to dig a bit down further in the README.md to realise I needed to set some environment variables before calling npm run build (notably PHANPY_WEBSITE="${ABSOLUTE_URL}", or else it won't run when you deploy it).

Not liking the fact that boosting or favouriting is a two-click (three-click for boosts actually) process, but that is my principle gripe for now. Other than that, things seem to be reasonably responsive, so we'll see how this goes. If I can get away from needing to keep top open sorting by resident memory usage and periodically killing the worst offender (which more often than not, is the Mastodon tab)… that's a plus.

@blainsmith@snac.rblgk.sh avatar blainsmith , to random