HNHacker News
TopNewBestAskShowJobs

snorremd

648 karma · joined April 21, 2016

[ my public key: https://keybase.io/snorremd; my proof: https://keybase.io/snorremd/sigs/RMlpyZzus8WnfpnjPjplPvhTa_TxyyAk1mx7lGDFo1Y ]
submissionscomments
snorremd··on Among European Companies That Use a CDN, Nearly 9 in 10 Use Cloudflare
Currently I don’t use any CDN. I just host everything on Scaleway on VMs and serverless. Works pretty well for my use, but I imagine latency is bad for South Americans. I’ve looked into Bunny and I think that is the closest you get to Cloudflare’s offerings.
snorremd··on Among European Companies That Use a CDN, Nearly 9 in 10 Use Cloudflare
Before I went European sovereign for my own personal stack I used Cloudflare for hosting static and somewhat dynamic websites and it has become really nice the later years. There is almost no mention of "regions" in Cloudflare. Your content and code runs globally by default. With traditional clouds you need to think about how you distribute your application. At least that is my experience. Maybe they provide global CDN for global distribution of static content. But serverless containers and databases more or less run in a single region by default. And if you wish to distribute stuff it is on you to plan the architecture behind that.

Now stuff like Cloudflare D1, the distributed SQLite based database, have its limitations. Writes are directed to a specific datacenter/region behind the scenes, so some regions might get slower writes. But this is basically something that happens behind the scenes and just works. You need to think about where your primary base of customers live when you create the database, after that you don't think about regions. R2 (S3 compatible storage) just works globally as well.

A lot of what Cloudflare offers now feels like magic in a good way. I realize they don't have everything AWS, Google Cloud and Azure have. But they have enough that you can build serious systems on top of their infrastructure. They are no longer just a CDN/proxy provider. And their offering is seriously cheap.

snorremd··on GPS and the Lost Art of Getting Lost
One of my best experiences in Prague back around 2010 was when I had no Google Maps, tried navigating with a hotel pamphlet map, and promptly lost my way towards the student culture house I was trying to find.

Ended up asking some locals where I was, and amused they assured me I was way outside the map and had gone east instead of north. I did not want to backtrack so I asked if there was any nice places to get a beer nearby and they pointed me towards a beer garden. Those were some of the nicest Pilsner Urquells and Staropramens I had during my visit. No tourists to be seen, and good vibes all around.

Nowadays I mostly navigate with GPS and rarely just happen on random places like that. I guess we lose some of the discovery when you always know where you are going.

snorremd··on Tracking down the 16-year-old WAL-reset SQLite bug
You might already know and used "for some reason" as sarcasm. For those that do not: Zoom did the usual aqui-hire. They needed to show their enterprise customers they were taking e2e encryption seriously, so they bought out the guys who did exactly that kind of encryption with Keybase.

A shame really, because Keybase was kind of unique in the way the facilitated social proof of identity tied to cryptographic keys. A shame though that they never found a really sustainable business model. When they turned to crypto currency towards the end of their independent run I knew it probably wouldn't last.

snorremd··on Removing React.js from the codebase and adapting Htmx for UI interactivity (2023)
Indeed. In a publishing (Wordpress) like solution maybe you would use HTMX for the user facing parts and React or something similar for the more interactive admin parts. Then you don't need to bother with server side rendering for the admin bits, which at least I think simplifies React a great deal. It's not that the JS fullstack frameworks doesn't handle server side rendering and routing for you, but they feel very much like black box magic to me. Especially the new fangled React Server Components with the whole serialization and streaming model.

Good old server side rendering is simple in Rich Hickey's "Simple Made Easy" way. You can build more complex logic on top of a standard server rendered model, but the base model is mostly dead simple to reason about. I like that. I've built web "apps" in AngularJS, React, Reagent (ClojureScript) and Next. So I'm not coming at this from a grumpy "backender" position. I'm coming at this from having done lots of frontend stuff and finding the frameworks becoming increasingly complex beneath the surface. It feels like they are targeting the "easy" in Rich Hickeys parlance in the sense that you don't have to write a lot of code to make something fancy. But reasoning about the behavior and what actually happens in the framework when something doesn't work is increasingly difficult.

Edit: And maybe this is a "skill issue". If you just learn the framework and library well enough you'll get by much better. But I tend to not want to bind myself to any single framework too much. So simple frameworks that don't churn too much is better for me.

snorremd··on Removing React.js from the codebase and adapting Htmx for UI interactivity (2023)
I don't necessarily disagree that there comes a point at which you are working more against HTMX than with it. I think rather than measuring that contention point between HTMX and SPA/MPA in terms of interactivity I'd measure it in the amount of client side state and logic needed. If you need a bunch of client side state and logic, for example a digital audio workstation, then a SPA would definitely be the appropriate pattern.

But interactivity in largely content-driven sites doesn't necessarily preclude HTMX. You can do a bunch of fancy interactive stuff with HTMX and some minimal JS. Drag and drop sort is a tiny drop-in JS snippet. Skeleton loaders and spinners are supported out of the box in HTMX as is infinite scroll as others pointed out.

I'm not saying Next.js, Solid Start, Remix, Nuxt or some other hybrid server and client rendered model doesn't work for forum software. Or that even client only rendering can be a valid approach if you accept the trade-offs (no curl-ability). People should use whatever they feel productive building with.

But if your backend is already a non-JavaScript server rendered framework like Django then HTMX makes a ton of sense to add some interactivity.

snorremd··on Removing React.js from the codebase and adapting Htmx for UI interactivity (2023)
I think HTMX is a great fit for forum software. Forum websites mostly deliver non-interactive content in the form of text and maybe some audio, video, or image content. All of this can be represented as HTML and CSS.

With HTMX you can do partial rendering and live updates via server-sent events. This gets you most of the way to the "client side" feel where things load dynamically based on user actions.

The only properly dynamic SPA-like feature in a forum I can think of is a WYSIWYG editor, but that you can build as a web component. Maybe a flexible highlight and quote system would be a bit difficult in pure HTMX (think of the comment functionality in Medium posts). So you'd want to build a few things in client side JS. But the main experience could very well be built with HTMX.

snorremd··on Framework downgrades RAM configurations on pre-orders due to price hikes
I'm still considering whether to cancel or simply make do with 32GB memory. I initially ordered 64GB as I'd like to not worry about memory usage all that much. But getting the 32GB option for the original price (before price increase) seems like a reasonable solution to me. I can always upgrade later. I feel more sorry for those now bumped down from 32 to 16 GB. The latter is barely usable as an enthusiast dev PC these days.

It is unfortunate that Framework has sold priced pre-orders for batches they haven't secured supplier contracts for. Or maybe they did, but the supplier decided to void their contract releasing the same product for twice the amount. Hard to know what goes on inside these companies. In any case the AI bubble is doing a number on consumer market hardware.

I want to support Framework's mission, but this is a crappy situation all around. Definitely a mark on Framework's reputation, and also annoying for those who know need to dish out more money or not get the product they were promised at the price-point that was indicated at purchase.

snorremd··on A Road to Lisp: Which Lisp
As a former Clojure dev (now just using Clojure in my spare time) I love Babashka. Michiel Borkent really nailed it with sci (Small Clojure Interpreter) and Babashka. Running a custom Clojure interpreter in a GraalVM compiled Clojure app is quite clever.

Now there are of course limitations to what you can do in terms of not supporting Java reflection or the full Clojure compiler. But I've made some nifty small scripts and convenience helpers with it. And the dev experience of making these scripts is so much nicer than trying to write bash scripts. The Clojure edn syntax is super simple, and the REPL connected editor let me rapidly test parts of the code just like with full Clojure apps.

I don't have experience with other lisps, but I can vouch for Clojure being very nice. The community was welcoming and friendly to newcomers when I started learning, I hope it still is. One thing I love about the Clojure ecosystem and community is the effort taken to never break libraries. I've looked at libraries I used some ten years ago, and the API is still compatible with code I wrote back then. There is very little churn. Maybe this is because the language is largely untyped and editors only partially check "types". Having breakages in libraries you consume once every couple of months would get really tiring in Clojure land. I'd imagine the same problems would present themselves in Common Lisp and others.

snorremd··on Bluesky Trademarks ATProto
Did they actually create the org yet? I saw the news you are linking that they were going to start the process. But I've seen no follow up news about the organization actually being here and the ownership of the PLC directory having been transferred.
snorremd··on Bluesky Trademarks ATProto
The PLC governance not having been moved yet is my one main gripe against ATProto/Atmosphere now. There is so much being built on top of this protocol, and I truly believe it has the chance to make the social web more decentralized while keeping everything connected. The PLC being controlled by one major commercial entity allows them to pull the plug so to speak. Say someone is sanctioned by the US, what stops Bluesky from pulling the plug on their DID thereby blocking and censoring this person from the network all together.

Half the point of ATProto is that identities are used across a host of apps, and therein lies a big vulnerability. If identities are not truly independent of centralized infrastructure, then you are vulnerable to losing access to a number of apps at once similar to Google services black hole if your Google account is banned (not to mentioned anywhere you've logged in with SSO).

It would be much better if the PLC was somehow decentralized itself. Barring that it should at least be finally spun out as the independent Swiss organization they've talked about for some time now. The organization could form a board with interested parties to set the future of PLC development if needed.

As for PDS migration, there are good options if you are migrating away from Bluesky. There are lots of GUI tools that work well now like https://pdsmoover.com/moover, Eurosky has https://move.eurosky.tech/, etc. It would be cool though if Bluesky actually linked to the other big PDS-providers on the Bluesky sign-up page to actually promote decentralization. But I guess it is hard to vouch for other services.

I still think the future of ATProto is bright, but there are definitely some obstacles before I'm comfortable with the whole setup. The network needs more decentralization in the PDS-layer, and the PLC needs to spin out in the separate governance organization pronto.

snorremd··on How to build a circular LCD clock
Indeed. Don't be dissuaded by Hacker News commenters. All the naysayers here doesn't seem to have published their own blog posts about how they built circular LCD clocks with Arduino ESP32 and low level programming or whatever they fancy as "good enough".

Browser based rendering that allows people to easily make new watch faces with JS and SVG is a perfectly reasonable platform for a nifty project like this. I think your watch faces look neat.

snorremd··on Vite+ Beta
> I hope these folks manage to get a bunch of money and can fund the continued development for at least the next decade.

I believe VoidZero has been acquired by Cloudflare [1], so money should not be an issue. Question is if Cloudflare will be willing to continue letting these people work on Vite and Vite+ features that benefit all cloud platforms, not just Cloudflare.

1. https://blog.cloudflare.com/voidzero-joins-cloudflare/

snorremd··on Cloudflare launched self-managed OAuth for all
WebFinger + self-hosted Oauth provider is indeed nice. Unfortunately not widely available.
snorremd··on Calvin and Hobbes and the price of integrity
The three volume hard-book bound set is one of my favorite possessions. It has been a little while since I read them, but I must have read them cover to cover twice. The print quality and feeling of the hefty books makes them feel like really high end comics in the material sense. I really respect Watterson in keeping the comic pure in the sense that the characters only exist in that one medium.
snorremd··on Let's talk about EU Sovereignty (2025)
This. I'm presently running serverless containers, serverless jobs, managed container registry, managed database, virtual private network, IAM policies, DNS, managed Grafana and object storage on Scaleway for a project I'm working on. Doesn't get more cloud than that.

Sure, Scaleway still lags behind the big three cloud providers in the US. But the US providers have a lot more money and been around much longer. Scaleway is quickly expanding its feature set though. They've recently introduced managed Clickhouse and OpenSearch among other things.

snorremd··on Norway's 2 petabytes of Huawei flash storage and LLM training
Exactly. Nasjonalbiblioteket (National Library of Norway) has centuries of written material (Bokmål, Nynorsk and some Sami) and decades of audio and video material featuring varied dialects from all over the country. I believe training models that encompass this information can help in preserving both our language, history, and culture for future generations that increasingly turn to AI to get their information.
snorremd··on David Attenborough's 100th Birthday
The sad thing is Attenborough has lived to see the destruction of nature he loved so much. His constant warnings have gone mostly unheard. In some ways I think excellent nature programming like his own Nature is doing a disservice by making it seem like there's lots of wild nature left.

I wish humans would come together to re-wild more of the earth. Restoring wild nature and cutting emissions is the only way to really restore natural ecosystems. We're nowhere close to doing that.

snorremd··on Windows quality update: Progress we've made since March
Regularly being presented with a "Set up Windows" after boot forcing you to click "no thanks" on a bunch of Microsoft services is exactly the kind of thing that irritates me. I've politely declined their services about 10 times already, make it stop!

When I get tired of Battlefield 6 I'm likely going full Linux. It is simply not worth putting up with Microsoft Windows for gaming. More and more games seem to work either directly on Linux or at least via things like Proton (courtesy Valve Software).

snorremd··on Ghostty is leaving GitHub
Interestingly ATProto uses Merkle Search Trees to store data as commits, so in some respects it is similar to git. It even signs each commit (say you post an issue record to your ATProto personal data server) it is inserted into your merkle search tree based on content and id hashing rules, and then the new root node in the tree is signed so you can verify its integrity.

Now there is absolutely a benefit to co-locating issues and PRs with your code in the same git repo. In a way it becomes much simpler to move your entire repository and all activity when everything is in the same .git folder.

With Tangled your code is stored in your code repository and issues and PRs in your data repository. On the other hand the ATProto stuff is what means your project becomes discoverable and that other users in the network automatically can interact with your repository (likes, issues, etc).

snorremd··on Ghostty is leaving GitHub
I kept a Docker install of GitLab running for many years at my first full time employer out of university back in 2014 to 2020. It was really not too difficult. Every once a while they would release a major version that required a migration or config update, but mostly the updates were a docker compose pull and docker compose up away. At our single company scale with only some 25 developers max (don't remember exactly anymore) a self-hosted instance on a moderate VM was super stable and quite boring. And boring is often good. It might be that hosting GitLab for much bigger organizations is a different beast!

I remember that the first instance of their CI solution was a separate server/service that coordinated CI jobs on runners. That was a bit cumbersome. But then they integrated the CI coordination into the main server and you only needed to figure out the CI runner part.

Today I would likely have gone for Forgejo with runners for such a small company if I were to self-host. Less moving parts and smaller footprint.

snorremd··on End of an era for me: no more self-hosted git
I've recently been setting up web servers like Forgejo and Mattermost to service my own and friends' needs. I ended up setting up Crowdsec to parse and analyse access logs from Traefik to block bad actors that way. So when someone produces a bunch of 4XX codes in a short timeframe I assume that IP is malicious and can be banned for a couple of hours. Seems to deter a lot of random scraping. Doesn't stop well behaved crawlers though which should only produce 200-codes.

I'm actually not sure how I would go about stopping AI crawlers that are reasonably well behaved considering they apparently don't identify themselves correctly and will ignore robots.txt.

snorremd··on Matrix messaging gaining ground in government IT
When me and a bunch of friends and acquaintances switched away from Slack a little under a year ago (I think) we looked into Matrix. One of the primary requirements was that even our non-technical friends should be able to use it.

At the time Matrix/Element had recently launched their Matrix 2.0 efforts and I tried setting up the whole stack without resorting to their all in one shell-script meant for non-production use. I did not mind hosting four different servers (Synapse, Matrix Auth Service (MAS), Call, etc), but did find the integration and config job a bit tedious. The main blocker though was the lack of an invite-system in the new Matrix Auth Server. Also the fact that the Element X app uses a new Livekit based call server while other clients/apps use a different approach is also something not great.

We ended up going for Mattermost. One service easily hosted with Docker. One app, and easy invites. While I think federation would be cool, right now Mattermost was a bit simpler to get up and running.

Element seems more focused on enterprise and government contracts than self-hosters. I think this is fine, they need to pay their bills. But Matrix 2.0 for self-hosters might need a better story right now.

snorremd··on Cloudflare acquires Astro
I'm in the same boat as you. I've built a personal home page with Astro and hosted it on Cloudflare. It has been really cheap, only paying for worker subscription at 5 dollars per month. The site has been running non-stop essentially without downtime. And as you say the user experience of Astro's static HTML, css and minimal JS output on Cloudflare edge CDN network is really good.

But with the events of the world being what they are I have been considering moving my Astro page to BunnyCDN and thus Europe (where I live). The only Cloudflare specific feature I've used is D1 database so migrating now shouldn't be too difficult. I really hope Cloudflare does not make it difficult to use Astro on other providers, either intentionally or by accident. Next.js for a long time was essentially a framework that only ran great on Vercel, and using other providers was asking to become a second citizen. I believe it is somewhat better now with proper provider plugin system, but still.

Astro has been great and I understand they need to find a way to economically sustain their business. Joining a big company like Cloudflare is one way to do that. I can't complain too much never having opted to use Astro's commercial offerings. So I only hope they keep Astro open. I'm building a new product on top of Astro now and would hate to see it become a Cloudflare-only product.

Congratulations to the Astro team!

snorremd··on Gpg.fail
I’ve ended up the same place as you. I had previously set up my gpg key on a Yubikey and even used that gpg key to handle ssh authentication. Then at some point it just stopped working, maybe the hardware on my key broke. 2FA still works though.

In any case I figured storing an SSH key in 1Password and using the integrated SSH socket server with my ssh client and git was pretty nice and secure enough. The fact the private key never leaves the 1Password vault unencrypted and is synced between my devices is pretty neat. From a security standpoint it is indeed a step down from having my key on a physical key device, but the hassle of setting up a new Yubikey was not quite worth it.

I’m sure 1Password is not much better than having a passphrase-protected key on disk. But it’s a lot more convenient.

snorremd··on Try Switching to Kagi
I love that Kagi puts the "monetization" icon right next to results so I can avoid navigating to them. This means I'm much less likely to click on Medium.com links and other monetized blogs and sites. Often times the good content is on some personal website where the creator doesn't really care about earning money off it.

Another neat feature is the possibility to rank results or block them manually so you can lower visibility of certain sites. Really help push the scammy sites down.

Compare this to Google Search where the first half page is paid results (ads) and the rest of the results are of dubious quality. And you don't really have much of a way to influence your search results.

snorremd··on European Cloud, Global Reach
Scaleway is indeed the closest thing we have to AWS, Google Cloud and Azure by a European company. They are fast building out a comprehensive managed cloud with IAM, managed databases, containers, etc. I do hope they succeed. I've only used them for hobby projects, so my experience is limited to lighter workloads. But the UI is pretty good, and they have APIs and CLI for all operations.
snorremd··on SQL style guide by Simon Holywell
This. Relying on developers manually trying to follow a style guide is a recipe for not having a consistent style. Instead something like pgFormatter should be used. I'm not sure what the state of SQL formatters and IDE support is these days. Not sure how many command based options there are.

And people who use things like Datagrip or other IDEs will probably format with their IDE's preferences unless there is a plugin for things like pgFormatter. This works well if there is a company mandated editor/IDE, but not so well when you have developers across various editors and IDEs.

snorremd··on Restic: Backups done right
A killer feature rustic has over restic is built-in support for .gitignore files. So all your dependencies and build output is automatically ignored in your backups.
snorremd··on BorgBackup 2.0 supports Rclone – over 70 cloud providers in addition to SSH
I see they have gotten support for S3 (and other storage providers) via OpenDal. Might need to revisit rustic for my backup needs then! I once started looking at what it would take to build a GUI using Tauri (Rust backend <-> JS/Web frontend), but didn't have time to figure out the APIs.

What I really like about Rustic is that it understands .gitignore natively so you can backup your entire workspace without dragging a lot of dependencies, compiled binaries, and other unnecessary data with you into your backups.

Page 1 of 6Next →