Hugo Tunius
hugotunius.se · Personal blog · on HN since 2014
Hugo Tunius is a software engineer who writes about app privacy, Flutter, type-driven design, sideloading, and running a cheap static blog.
What HN saysHN commenters link his posts on Flutter Web's design, making invalid state unrepresentable, and the One Cent Blog, and discuss his sideloading argument.
15HN people shared it
5linked it in comments
22stories submitted
2.3Kstory points
4 months agolast shared
2014people per year2026
Most-shared posts
- 1Flutter Web: A Fractal of Bad Design4 people · 128 points · first shared 2020 · 81 comments on HN
- 2The One Cent Blog: Static Web Content on the Cheap4 people · 5 points · first shared 2016 · discussion on HN
- 3An Analysis of Privacy on the App Store3 people · 40 points · first shared 2021 · 20 comments on HN
- 4We should have the ability to run any code we want on hardware we own2 people · 2.1K points · first shared 2025 · 1.2K comments on HN
- 5Making Invalid State Unrepresentable2 people · 2 points · first shared 2020 · discussion on HN
- 6The Sword Juggling Fallacy2 people · 1 points · first shared 2026 · discussion on HN
- 7Switching to Firefox1 people · 7 points · first shared 2017 · 1 comments on HN
- 8You are not the average user1 people · 5 points · first shared 2014 · discussion on HN
- 9Why Svelte Is Like Rust1 people · 3 points · first shared 2020 · discussion on HN
- 10How to hack half of all websites1 people · 2 points · first shared 2019 · discussion on HN
- 11The Stalactite Developer1 people · 2 points · first shared 2020 · discussion on HN
- 12Going Spelunking with Mitmproxy1 people · 2 points · first shared 2019 · discussion on HN
- 13The One Cent Blog1 people · 2 points · first shared 2016 · discussion on HN
- 14Stop Using (Only) GitHub Releases1 people · 2 points · first shared 2025 · discussion on HN
- 15Edge Cached Static Sites on CloudFlare1 people · 2 points · first shared 2020 · discussion on HN
What HN people wrote when they linked it
K0nserv · 2016-07-26
Lovely! Definitely like the style here and the focus on content first. Like other people have said it's similar to Motherfucking Website[1], and a Better Motherfucking Website[2]. I'll need to start including this when I link to those two.
For my website[3] I'm really trying to keep weight on the wire down too so I am opting to skip the custom font and header image. It's quite nice to have 10-15kb pages in the age of the web obesity crises[4]. A header image and a custom font does have a big effect on how personal the content ends up though.
[1] - http://motherfuckingwebsite.com/
[2] - http://bettermotherfuckingwebsite.com/
[3] - https://hugotunius.se
[4] - http://idlewords.com/talks/website_obesity.htm
user_7832 · 2025-09-29
Related thread from a month ago: We should have the ability to run any code we want on hardware we own, link: https://hugotunius.se/2025/08/31/what-every-argument-about-sideloading…
(Discussion link: https://news.ycombinator.com/item?id=45087396)
neurostimulant · 2020-11-06
> No native elements, no browser integration or extensions, interaction with the page, and accessibility. They all would suffer.
Uh, but those things are already happening right now, e.g. Flutter Web UI [1]
[1] https://hugotunius.se/2020/10/31/flutter-web-a-fractal-of-bad-design.h…
wsc981 · 2016-08-08
There's this guide on a "one cent blog"[0] that I've used to create my own website / weblog with a custom domain. It uses Jekyll, CloudFlare and Travis-CI. Probably a bit more work to set up then the tool created by the OP, but also more flexible, I would think. The end result is much the same though. A simple 'git push' is used to publish the blog.
---
[0]: https://hugotunius.se/2016/01/10/the-one-cent-blog.html
chriswarbo · 2025-01-08
Kind of. At a more fundamental level, it's applying the idea that "invalid states should be unrepresentable" (e.g. https://hugotunius.se/2020/05/16/making-invalid-state-unrepresentable.… ) but to our code itself.
For example, consider a simple function to copy files. We could implement it like this:
def copy(fs: Filesystem, in: Path, out: Path) { inH: HandleRead = fs.openRead(in); outH: HandleWrite = fs.openWrite("/tmp/TEST_OUTPUT"); finished: Boolean = false; while (!finished) { match (inH.read()) { case None: finished = true; case Some(data) = outH.write(data); } } inH.close(); outH.close(); } However, there are many ways that things could go awry when writing code like this; e.g. it will write to the wrong file, since I forgot to put the real `out` value back after testing (oops!). Such problems are only possible because we've given this function the capability to call `fs.open` (in many languages the situation's even worse, since that capability is "ambient": available everywhere, without having to be passed in like `fs` above). There are also other capabilities/permissions/authorities implicit in this code, since any call to `fs.open` has to have the right permissions to read/write those files.
In contrast, consider this alternative implementation:
def copy(inH: HandleRead, outH: HandleWrite) { finished: Boolean = false; while (!finished) { match…