We've been punching above our weight at @ddosecrets: we're a small transparency team with a shoestring budget, but hosting over 100 TiB of documents, operating search engines for some of those datasets, and fielding data requests from journalists and researchers, all costs money. If you can donate today, or share our fundraiser, your support right now means the world to us.
Here's an example server: https://github.com/julie-ng/nodejs-certificate-auth/blob/master/server/server.js
Seriously, why the hell are we still using username/password when browsers have supported requesting client certificates for years now.
Literally just learned today that it's an API that's supported in all the major browsers already. Maybe because it's at the TLS/Server-side layer instead of inside client-side JS or the HTTP layer?
Only downside is now I need to add this functionality to Agregore. :P
💵 $1,000,000,000,000 💵
If only we could spend a TRILLION dollars every year to fight global heating and promote climate justice. But where would we get that kind of money??
Oh...
Governments Spent Record $1 Trillion Last Year Subsidizing Fossil Fuels
LLM, AI
Been firguring out how to integrate an LLM into my flow. So far I'm thinking of using one of these LLAMA based models running locally. I tried one and it kinda sucks for code generation but at least I can run it entirely locally on my steam deck.
My UX flow is going to focus on using selected text in an X11 session. I'm using nerd-dictation to give prompts to the model, fetch "input" from selected text, then have the genertated "output" fed back over the selected text.
»Today, we find ourselves in a situation in which technology has become conflated with capitalism, which has in turn become conflated with the very notion of progress. If you try to criticize capitalism, you are accused of opposing both technology and progress. But what does progress even mean, if it doesn’t include better lives for people who work? What is the point of greater efficiency, if the money being saved isn’t going anywhere except into shareholders’ bank accounts?»
With local-first apps, users have full control over their data, and it is stored on their own device rather than on remote servers. This reduces the risk of data breaches and unauthorized access to data.
ODD apps are not only local-first, but they are also able to work offline and collaborate across multiple devices. #oddsdk #localfirstcomputing #p2p
Agregore 2.2.0 just got released with improvements to load times and our extension system.
https://github.com/AgregoreWeb/agregore-browser/releases/tag/v2.2.0
You can check out @mauve doing a live toot of their debugging here: https://mastodon.mauve.moe/@mauve/110340934453455969
For anyone curious, here's the diff for the work I was doing: https://github.com/AgregoreWeb/agregore-browser/commit/575528d9e21b84fcfd4798e4eb52c79f157866a2
Love me some deleted code 🥰
I'm especially happy with this file for tracking all the built in extensions. Should make it way easier to customize Agregore for communities.
Also! While I'm at it I've added more mime types to the JSON renderer so now when I view ActivityStream data I can get a nice formatted view with clickable links. 😁
Adding new extensions and updating versions for extensions is now super easy.
All I need to do is add a new entry to a JSON file with a `url` for downloading the zip file for an extension, as well as a `version` string which is used to compare against the manifest on disk.
The URL also has some basic templating where the system will replace occurances of `{version}` with the version number. With this I just need to update the one line to update the version.
AHA! "Fixed" the Ublock Origin issue by reverting to version 1.47.4
1.48.0 added a fancy new thing for rendering icons and it seems my extension system doesn't support whatever this fanciness is.
https://github.com/gorhill/uBlock/releases/tag/1.48.0
Could also be one of the patches since then though. 🤷
Anyway, now I've changed how built in extensions work.
On build I add some zip files for extensions into the browsers binary along with version and name metadata.
On boot it will check if the extensions folder has an older version (or empty) for one of these builtins.
If so it'll extract the zip over top before all the extensions get loaded.
Also extension loading happens in parallel now
As part of this I've done some profiling of the startup time for Agregore (using console logs and my sense of time) and I found that reordering some of the initializing code can drastically improved perceived boot speed.
The main culprit was the `app.setAsDefaultProtocolClient` API. It's probably doing a bunch of sync API calls to the OS which is getting in the way. God I hate sync APIs. :P
I think for one or two protocols it's not a big deal, but in Agregore we're doing like 10 so it adds up.
Occult Enby that's making local-first software with peer to peer protocols, mesh networks, and the web.
Exploring what a local-first cyberspace might look like in my spare time.