HNHacker News
TopNewBestAskShowJobs

rowbin

236 karma · joined November 10, 2022

Leon Becker. Manageable but capable software — tools small enough to understand without giving up on being useful.

Blog: https://blog.leonbecker.de

Stelae, a private WordPress editor that publishes static sites: https://stelae.eu

Code: https://github.com/beleon and https://codefloe.com/beleon

submissionscomments
rowbin··on Zig Zen Update
I'm out of the loop. Is there any context? Can't pick up on what really changed here.
rowbin··on A hosting company auto-installed and activated an AI plugin on 1M+ WP sites
Wow, auto-installing any plugin onto live production sites should never be opt-out. For those managing client sites under approved-plugin policies and PCI compliance this isn't just a minor inconvenience. "We sent an email" is not an alternative to consent, and pointing people to manually uninstall across hundreds of sites is not a good way to handle the situation...
rowbin··on Journey to JPEG XL: open-source experiments shaped the future of image coding
> Safari (2023) led among major browsers, while Firefox and Chrome currently maintain experimental support.
rowbin··on Journey to JPEG XL: open-source experiments shaped the future of image coding
That's rich coming from the company that tried to kill it. The audacity...
rowbin··on Laid off. Broke. Depressed. & idk how to market my SaaS
Sorry to hear that. I feel for you. Getting an SaaS off the ground is hard and there's no guarantee that it will work. I know nothing is ever that easy and circumstances are complex, but my advice would be not to focus on the SaaS. Not that you should abandon it, but it should probably not be your only hope. You can't force an SaaS to work out. Focus on your mental health and the relationship with your family. Focus on job search. Continue with your SaaS but limit the time and money you invest.

I know its never as easy as just do this, this and that and everything will work out fine. I wish you the best.

rowbin··on Missing worker at Los Alamos National Laboratory found dead in remote forest
That is very concerning. Any chance this could be coincidence? Is there anything known that is not speculation?
rowbin··on Stack Overflow Sold to Tech Giant Prosus for $1.8B (2021)
That sounds like a pretty good deal for stack overflow...
rowbin··on The bootstrapper's EU stack for under €10 per month
Interesting, I looked into some of these types of services for my SaaS but used none of the listed providers except Mollie. I landed on IONOS for hosting, Scaleway for transactional mails, mailbox.org for receiving and sending manual mails and statichost.eu for hosting my docs.
rowbin··on Ask HN: Does anyone know what a monad is?
So the answer to your questions:

1. Is answered in the parent comment

2. It's not really about solving problems directly. Its more about a common way to hold meta information about your data. But of course that might help you with approaching similar problems.

3. Thats hard. You dont really think about it that way. Again its not really the type of problems directly. Its more about similar approaches to solving different kinds of problems. So you can use monads for solving basically any problem. But you can also choose to not use monads to solve the problem. This is something you'll need to get a feel for. And it shouldn't be for first line of thought. When solving a problem you might recognize that a certain monad lends itself to solving the problem. But it's not really something you actively go looking for.

rowbin··on Ask HN: Does anyone know what a monad is?
Since the monad structure itself carries some inherent information, that is how "side effect" information can be carried outside of the actual data and be part of the monad structure instead. So e.g. the Maybe monad. It either has data or it does not have data. The information whether carries data or not lives outside the data itself. Or the list monad carries information on how many data points it carries and the order of the data points without that being being part of the actual data it holds.

This is how "side effect" information is carried outside the actual information the monad is carrying. Real side effects like writing to disk however are not real monads. The IO monad pretends to be a real monad but it's not. It just helps with hiding the impurity of IO from the pure parts of Haskell.

So one might think about the IO monad kind of like the list monad where the order of the IO operations is encapsulated. It kind of pretends that the IO part is pure and deterministic when its actually not in order to have a somewhat clean separation between pure and non pure parts of the program.

Hope that helps.

rowbin··on Ask HN: Does anyone know what a monad is?
I'm not a Haskell expert, but I dabbled quite a bit. This is my explanation of what monads are that doesnt rely on math lingo and understanding the maths behind it. I don't fully understand myself but maybe thats actually helpful for trying to explain to someone not familiar with the concept. My understanding relies on concepts used in other programming languages. So depending on how familiar you are with them, this might or might not be helpful for you.

A monad is kind of like a generic class to boxes that adds additional logic to the data it boxes without actually caring about the data itself.

My goto monad for that concept is a linked list and the map operator. So an instance of the linked list might be Node(5) -> Node(7) -> EmptyList. Now let's call map with a function f(x) = str(x) + " * 2 = " + str(2x). This gives us Node("5 2 = 10") -> Node("7 * 2 = 14") -> EmptyList.

Now let's separate the monad from this. The monad is the structure and logic around the data and the function that we provide. The monad doesn't care what data it holds and is doesn't care what function we provide. It only defines the structure and how functions are applied to the data it holds.

rowbin··on Ask HN: What are you working on? (May 2026)
Link for anyone curious: https://stelae.eu
rowbin··on Ask HN: What are you working on? (May 2026)
Working on a tool that lets you author in WordPress as usual (own Docker container, full editor + plugins) but exports the site to static HTML for the public version, so PHP doesn't run in front of readers. Deploy targets are Cloudflare Pages, a Git remote, or statichost.eu. Solo, just launched, currently grinding through hardening. Called Stelae if you want to have a look.
rowbin··on Show HN: Stelae – €19.90/year WordPress, exported to static HTML
Author here. Quick framing for anyone who wants the why before clicking: Stelae is for people who already know WordPress but don't want to run public PHP. WordPress as private editor, static HTML as the public output. €19.90/year, free during beta. Happy to answer questions in the thread.
rowbin··on Show HN: Stelae – €19.90/year WordPress, exported to static HTML
Yeah, I think that's basically right. If you know AWS/S3/CloudFront or Cloudflare Pages or whatever, the raw hosting cost is close to zero. That's not what I'm charging for. It's more the boring workflow around it: give someone a WordPress editor, keep WordPress private, export the static files, handle backups/deploys, and make it one thing instead of a bunch of docs and scripts.

You actually said it yourself in your comment: "not everyone can deal with AWS, nor can everyone edit a website." Stelae is for the second group, the WordPress-editor side, who don't want to run public PHP to publish. The €19.90 isn't margin on the hosting; the hosting is yours, on whatever provider you pick.

rowbin··on Google confirms 'high-friction' sideloading flow is coming to Android
Sideloading is already worse on iOS
rowbin··on ChatGPT discussion: In non-security applications, is MD5 preferable?
You are using the security argument again. It is not used in an adverserial context. You are correct, that this is not secure. And messages can be tampered with. But this is not the application. The threat model of the application is that everything happens in a private context without adversaries. The communication is end-to-end encrypted and every participant of the chat has total control and is allowed to change everything in the chat, even messages from other users. So there is no point in protecting again adversaries that have access have to the secure channel, because they are already allowed to do anything, even if the hash were cryptographically secure, they are allowed to change everything. The integrity is only for synchronization, so that every participant can easily verify the state of the event history up to a specific point.
rowbin··on ChatGPT discussion: In non-security applications, is MD5 preferable?
Interesting, I'd love to see some more opinions on this. I find the instant "MD5 is broken, don't use it advice" harmful. Not all applications are security related or need absolute highest speed. I actually had use cases in multiple hobby projects, but of course that doesn't there are many.

For example in a distributed event based LAN chat, I used MD5 for an "integrity chain". Every new event id is the hash of the old event id + some random bytes. This way you can easily find the last matching event two systems have in common. Just a random id isn't enough, when two instances integrate an event from a third system, while one of the two added a new event just before that.

No security needed, speed doesn't matter much, it is not designed for high throughput. MD5 seems like a very good choice, because it's easy to work with and can be verified on every system.

rowbin··on FyneDesk: A full desktop environment for Linux written in Go
I think they use master for releases only. Development branch is actively worked on and more than 100 commits ahead of master which is totally active. Last full release March 2024 is totally fine. People can always build from develop branch.
rowbin··on Zig's comptime is bonkers good
Thanks for that. I loathe replys like "but lang/framework/... can do/will be able to do something similar/does something else which I like better/...". Well, it's not about that. It's about how easy it is to use, how good it is from preventing you to shoot yourself in the foot, sometimes how performant it is, ...
rowbin··on Firefox will consider a Rust implementation of JPEG-XL
Because of the increased attack surface and maintenance burden. Which is totally understandable. But JPEG-XL should really be supported...
rowbin··on Just disconnect the internet
>> The stronger versions, things from List 1 and List 2, are mostly only seen in defense and intelligence

And I don't think that is enough. I agree that it easier and sufficient for most systems to just be connected over the internet. But health, aviation and critical infrastructure in general should try to be offline as much as possible. Many of the issues described with being offline stem from having many third party dependencies (which typically assume internet access). In general but for critical infrastructure especially you want as little third party dependencies as possible. Sure it's not as easy as saying "we don't want third party dependencies" and all is well. You'll have to make a lot of sacrifices. But you also have a lot to gain when dramatically decreasing complexity, not only from a security standpoint. I really do believe there are many cases where it would be better to use a severely limited tech stack (hardware and software) and use a data diode like approach where necessary.

One of the key headaches mentioned when going offline is TLS. I agree and I think the solution is to not use TLS at all. Using a VPN inside the air-gapped network should be slightly better. It's still a huge headache and you have to get this right, but being connected to the internet at all times is also a HUGE headache.

rowbin··on Austria to 'Super-Speeders': We're Taking Your Car
Why would the police keep the money? It doesn't get to keep other confiscated money, does it? Wouldn't the state be the "default" recipient?
rowbin··on Reddit is taking over Google
IIRC Google used to do that and have a search option to specifically look for discussion type results only
rowbin··on First practical SHA-256 collision for 31 steps. fse2024
But your are going backwards though. You have a sha-256 value and want to find an input with the same result. But this input again has to be a sha-256 result and you need to find an input for that as well, right? This would only work if you have the intermediate sha-256 value, that produces the final sha-256 or you can find a collision that itself is a sha-256 value.
rowbin··on Walk a Terminal File Manager
TL;DR: risk is probably pretty low

I used to struggle with this too, but now I look at it this way: you're always at risk of being breached when connecting to the Internet (zero days in Browser, Router, maybe IoT devices on the local network, supply chain attack of some installed software, router, ...). Everything you add to your system/network adds attack surface. But: somewhat popular github projects are usually low risk, because 1) enough people are looking into it to be reasonably sure there's nothing funny in the code base, 2) it's not big enough to be an instetesting targeted for malicious actors.

I think a big part of why it feels scary is the unpredictability you mention. You don't know how you would be compromised and whether you would even notice. Sure you could get comprised and then spread the infection, but it's extremely hard to build malware like that. The much more likely scenario is the that the malware tries to steal crypto or encrypts your files. The chances that something really bad would happen are very slim (Do you even have large amounts of crypto? Do you not have any backups of important files?). In the end that's just a risk you'll have to live with (when connecting to the Internet) just like you're at risk of getting hit by a car when going outside.

rowbin··on Centimillionaires: Elites with Investable Assets of More Than $100M
Your house was $10,000-$99,999 and now having $1-$9 is a treat??
rowbin··on One game, by one man, on six platforms: The good, the bad and the ugly
I'm counting wine
rowbin··on One game, by one man, on six platforms: The good, the bad and the ugly
Win32 is probably as close as it gets
rowbin··on Raspberry Pi 5 Review: A New Standard for Makers
> needs active cooling

This sounds like a pretty big negative to me

← PreviousPage 2 of 3Next →