HNHacker News
TopNewBestAskShowJobs

slau

2,033 karma · joined December 29, 2014

Freelance cloud consultant. I have a background in telecoms, security, and databases. https://unticks.com
submissionscomments
slau··on Why Dishwashers Are Quietly Disappearing from American Homes
The amount of water required to wash by hand is exorbitant compared to the efficiency of a dishwasher.

Last time I checked, handwashing is 3 times less efficient in water usage than in the best case scenario (for handwashing), and 40 times less efficient in water usage in the worst case scenario.

Plus, even if we were to assume that somehow a human manages to use the same amount of water, then you’re still warming up the water somehow. It doesn’t become magically hot by exiting the tap, so the vast majority of the dishwasher’s electric running cost would now be shouldered by the water heating unit. Except it’s now 3-40x more water that needs to be warmed up.

slau··on Why was Apache Kafka created?
ZMQ is not a managed queue. It’s networking library.
slau··on Is moderate drinking healthy? Scientists say the idea is outdated
I was simply providing a counterpoint to the idea that mocktails contain too much sugar. My point was that (m|c)ocktails in general contain too much sugar, regardless of alcohol content.
slau··on Is moderate drinking healthy? Scientists say the idea is outdated
If you dig a tiny bit into mixology, you'll notice the ludicrous amounts of sugar that goes into cocktails.

An espresso martini has 80% of your daily sugar intake. That's 25g of sugar. Moscow mule 75%, Sangria 70%. All of those in one single serving.

I'd wager most people don't stop at one drink.

Daiquiri has sugar. Espresso martini has sugar syrup. A gimlet has simple syrup. Irish coffee has sugar. Long Island Ice Tea has more sugar syrup than any single liquor. Mai Tai has simple syrup. Mojito has cane sugar.

slau··on Steam games no longer purchasable with PayPal in most countries
I wonder if this is actually more related to some EU lawmakers probing a few big online platforms for the abusive conversion rates they impose. Amazon is guilty of this, all the budget airlines are guilty of this, and so is PayPal.

They “offer” to charge your card in its native currency to avoid exchange rate fees, but they do so with an abusive exchange rate. They also always go out of their way to show the inverse exchange rate that nobody uses, and is hard to evaluate.

I just checked on Amazon, and they now display the “usual” exchange rate (still with an insane rate). So it definitely looks like something is getting tightened in the industry.

slau··on Steam games no longer purchasable with PayPal in most countries
Yes, this is a non-issue as far as I understand it.

I’m in a non-Euro zone country, and I have always used Euros to pay for games. I use a local payment card with a 0% conversion rate.

PayPal really isn’t that big of a deal in most of Europe.

slau··on Apple's Favoritism to Fastmail
I kind of wrote about this: https://sebastian.lauwe.rs/blog/ios-migadu-notifications/

It’s more focused on how to get notifications to work with an email server that does not support XAPPLEPUSHSERVICE, but I also delve into how Apple abandoned the only reference implementation of XAPPLEPUSHSERVICE.

slau··on Why leather is best motorcycle protection [video]
Fully agreed. I t-boned a car that cut me off, doing approximately 60-80 km/h. My shoulder dented the car's roof through the door frame. I went flying through the air and landed on my back, on cement-cast stones protruding slightly from the cement (the decorative edge of the roundabout).

I walked out of the hospital a couple of days later. I wouldn't have been walking then, nor today, if it wasn't for the protective shoulder pads and spine protection in my jacket. It took about 18 months of physiotherapy to stand and walk normally again, but still.

Edit: I realise this is a POV with n=1, but it convinced me.

slau··on Why leather is best motorcycle protection [video]
It’s the same voice for both kids, so yes, but doesn’t mean he didn’t get heckled.
slau··on Why leather is best motorcycle protection [video]
F9 truly has no business being this good. Their previous video [1], about hub-center steering, has an absolutely fantastic oner where Ryan gets heckled by not one but two kids on scooters passing by, and still manages to finish the 3 minute take discussing path dependence and fitting a Robert Frost poem into a motorcycle review video. That segment starts around minute 7.

[1]: https://m.youtube.com/watch?v=JtBgv-SJEQg

slau··on Show HN: QuickTunes: Apple Music player for Mac with iPod vibes
Well, it matters when you have to integrate with APIs and idiosyncrasies of third parties, and whatever draconian DRM they require. It’s obviously not impossible to add support for multiple backends, but from a development effort it definitely matters.

It’s not like streaming platforms are gingerly implementing open and common standards for music streaming. Winamp had support for .m3u and streaming back in ‘04, but we’ve moved on from that.

slau··on AI overviews cause massive drop in search clicks
Yes. That is exactly what my answer demonstrates.
slau··on AI overviews cause massive drop in search clicks
You can opt-in to get an LLM response by phrasing your queries as a question.

Searching for “who is Roger rabbit” gives me Wikipedia, IMDb and film site as results.

Searching for “who is Roger rabbit?” gives me a “quick answer” LLM-generated response: “Roger Rabbit is a fictional animated anthropomorphic rabbit who first appeared in Gary K. Wolf's 1981 novel…” followed by a different set of results. It seems the results are influenced by the sources/references the LLM generated.

slau··on The special hell of Bolt, Europe's Uber clone
Apple Maps, Google Maps, and I’m sure anything else under the sun will tell you specifically which train to take, in which direction. Usually, also with platform information, and in some cases even pricing/ticketing information.

Yes, traveling is a skill. It gets easier (and more comfortable) the more you practice it.

slau··on WireGuard client for macOS doesn't support split tunneling so I made one
Yes, it is wrong. You just misunderstand how routing works.

Say you’re at work, and the office router (192.168.1.1) gives you access to 10.3.0.0/16. This is where your company’s cloud is or whatever. You want all your traffic to go through your home network for whatever convoluted reason, except for the 10.3 stuff.

You just add

PreUp = ip route add 10.3.0.0/16 via 192.168.1.1 dev eth0

And

AllowedIPs = 0.0.0.0/0

(Edit: remember to add a post up)

And bam, you’re done. No crazy allowedip rules. When your computer generates packets to the company cloud, your OS won’t even try to talk to the VPN. Because the route table makes it go somewhere else entirely.

I don’t know if this was the exact use-case you described in your blog, but I’m sure you can figure it out from here.

Oh and this is also fully documented online in many places, including the AllowedIPs Calculator: https://www.procustodibus.com/blog/2021/03/wireguard-allowed...

slau··on WireGuard client for macOS doesn't support split tunneling so I made one
That entire thread is full of people saying it works fine and has been for years.

I think maybe you just misunderstand how the wireguard config works.

slau··on WireGuard client for macOS doesn't support split tunneling so I made one
I’m a bit confused. I’m fairly certain I’m using split tunnelling with macOS on Wireguard, and I’m fairly certain you are doing so as well.

But why are you adding configurations for every website you want to visit to your VPN config? Surely it’s much saner to list the (hopefully static or subnetted) resources in your company, and then let everything else go through your home network?

slau··on Encrypting files with passkeys and age
Previous thread (1 day ago, 1 comment): https://news.ycombinator.com/item?id=44562084
slau··on Systemd has been a complete, utter, unmitigated success
The whole “systemd wars” has made me fall out of love with Linux. I used to run it everywhere. My phone, my computers, my router.

I used to be so, so very passionate. Now, not so much. I still have a few raspberry pis. But, overall, I’m done.

It’s not so much that I can’t be bothered to fight systemd anymore (I was one of those weirdos running void, and trying to keep thing going). It’s that I can’t be bothered to fight for Linux anymore.

slau··on Ask HN: What problem would you solve with unlimited resources?
Climate change, and by extension, unlimited clean energy.

I’ve always loved the Star Trek spin that once you have unlimited energy, a lot of human dynamics cease to be exist. Capitalism is one of them.

slau··on Game publishers respond to Stop Killing Games claim it curtails developer choice
Just open CS2 and go to the community server tab. There’s a little notice telling you that you might be exposed to unmoderated and unsafe content.

Apparently in 2025 corporate lawyers have forgotten how to write a disclaimer. It’s all BS to protect their short term games.

I would spend way more money on games if they didn’t have a ~5 year life span.

slau··on Game publishers respond to Stop Killing Games claim it curtails developer choice
It’s really not a quagmire.

When you EOL the game and release the server, just strip the licensed content. Remove the logos. Nobody gives a flying toss anyway.

People want the community and the GAME. They don’t care whether the actual logo is there.

Heck, if the game connects to a community server, have it hide all licensed content. you’ve satisfied your contractual obligations. Whether people mod the game or not to re-add things has no bearing on you.

slau··on Ask HN: Worth leaving position over push to adopt vibe coding?
With all due respect, and I’m particularly anti-LLM, you sound exactly like someone who has never tried the tech.

You can use LLMs without letting them run wild on the entire codebase. You have git, so you can see every minute change it makes. You can limit what files it’s allowed to change and how much context you give it.

You don’t have to give it root on your machine to make it useful. You don’t have to “Jesus, Take the Wheel”. It is possible to try it out at a smaller scale, even on critical code.

slau··on Border search safe TOTP authenticator app?
Just store the TOTPs you actually care about on a Yubikey. Leave a few “worthless” TOTP in whatever TOTP app you use. Remove the Yubico Authenticator app before crossing the border.
slau··on Ask HN: Who is hiring? (July 2025)
You got the wrong post. This one is for companies that want to hire. You’re looking for the who wants to be hired.
slau··on Ask HN: Freelancer? Seeking freelancer? (July 2025)
SEEKING WORK | Denmark | Remote or Hybrid (Denmark for on-site) CV: Full CV and details on request Email: sl [] unticks.com

LinkedIn: https://linkedin.com/in/sebastianlauwers

Technologies & Skills: Backend software development, architecture, cloud architecture, VPC design, Rust, Python, Pandas, Polars, Big Data pipelines, SQL, AWS, Postgres, Airflow, REST APIs.

I have a significant amount of experience as a tech lead, team lead, VPoE, and CTO. I can easily integrate in teams, I can build teams, I can mentor juniors. I work well in both enterprise and startup environments, and anything in between.

15+ years of experience in pharma, security, database, telephony industries.

slau··on Ask HN: What Are You Working On? (June 2025)
Published here: https://codeberg.org/unticks/comparqter
slau··on Error handling in Rust
There's a bunch of different situations that can be discussed, and it's hard to generalise. However:

Your function typically has a specific intent when it tries to call another function. Say that you have a poorly designed function that reads from a file, parses the data, opens a DB connection and stores the data.

Should I really expect an end-user to understand an error generated by diesel/postgres/wtfdb? No, most likely I want to instruct them to generate debug logs and report an issue/contact support. This is most likely the best user experience for an application. In this case, each "action" of the function would "hide" the underlying error––it might provide information about what failed (file not found, DB rejected credentials, what part of the file couldn't be parsed, etc), but the user doesn't care (and shouldn't!) about Rust type of diesel error was generated.

To answer your question specifically, I might go without something like this:

    #[derive(Debug, Error, Clone)]
    pub enum MyFunctionError {
        #[error("unable to read data from file: {0}")]
        ReadData(String),

        #[error("failed to parse data: {0}")]
        Parse(String),

        #[error("database refused our connection: {0} (host: {1}, username: {2})")]
        DatabaseConnection(String, String, String),

        #[error("failed to write rows: {0}")]
        WriteData(String),
    }
Obviously this is a contrived example. I wouldn't use `#[from]` and just use `.map_err` to give internal meaning to error provenances. `DatabaseConnection` and `WriteData` might have come from the same underlying WTFDbError, but I can give it more meaning by annotating it.

When building a library, however, yes, I most likely do want to use `#[from] io::Error` syntax and let the calling library figure out what to do (which might very well giving the user a userful error message and dumping an error log).

slau··on Error handling in Rust
A sibling reminded me of the blog post that convinced me. Here it is: https://mmapped.blog/posts/12-rust-error-handling
slau··on Gridfinity: The modular, open-source grid storage system
Zach Freedman, the creator of the original Gridfinity, is also an amazing writer and wordsmith. His videos are full of amazing tongue twisters, alliterations and incredible puns.

I wish he’d write books.

Highly recommended: https://m.youtube.com/@ZackFreedman

← PreviousPage 3 of 18Next →