Status update - September 2021
Here's a little of what I've been up to in September.
Last month I tried doing a This-Month-I-Learned list, so I’m going to keep doing that, but I’m also going two write about some other things I’ve been thinking about and doing.
It’s been a month of trial and error. Working on the next version of Protobase, and it’s going slowly but well. When I’m building something new there’s always the temptation to think that it’s too complex, or there’s a shortcut. But in the end, the mountain always looks bigger than it is, and I just need to keep walking. A lot of my feelings match https://scattered-thoughts.net/writing/things-unlearned/ where the author says it better.
Finding the idea that actually works amidst the sea of very similar ideas that don’t work requires staying curious long enough to encounter the fine-grained detail of reality and humble enough to recognize and learn from each failure.
It’s ok to think that things have flaws or could be improved. But it’s a trap to believe that it’s ever the case that a simple solution exists and everyone else is just too enfeebled of character to push the miracle button. All the miracle buttons that we know about have already been pressed.
The mountain isn’t as big as it looks, and there’s no easy way around it.
Building things
As I was debugging a GitHub action the other day I realized that we’re not too
far away from just straight-up sending binaries for services to run instead of
requests. Who needs an HTTP API when you can just tell another service that you
want to run company/my-image:v1.2.3
with some of their data. Hard to tell
whether this is good or bad, or makes programming more or less fun. There’s
never been a shortage of things to build, that’s for sure.
Similarly, is the future of computing emulation? When you can run anything anywhere, does it matter what OS an app is written for? You can run a Game Boy in a browser with WASM. You can do the same with Windows 95. You can run basically anything inside a docker container, or using Virtual Box. You can run x86 instructions on Apple Silicon in real time using Rosetta. So if we’re just mapping memory blocks, are we done with software? Does end-user consumer software sort of end, but we keep selling different interfaces? Could be.
Tools I’d like to have
I really want something like Git for running software. Think of this as the intersection of docker, and image registry, and a storage mechanism for secrets, DNS, and domain configuration. Still thinking this one through, but stitching together all of these through separate services leaves something to be desired in terms of completeness.
iTerm2 has been a part of my toolkit for a long time now, and I love it. But I’d love some sort of fusion terminal-IDE-browser app. iTerm’s tiling, an embeddable browser, and simple ways to render project files and open tabs. Something like that. You can get there with Emacs or VS Code, but it doesn’t sound pleasant.
Other things I’ve learned
Here are some other things I’ve been thinking about lately.
-
The default grafana dashboard for haproxy is nice https://grafana.com/grafana/dashboards/2428. You get a good overview right away with increasing detail as you go down.
-
Haproxy’s stats dashboard isn’t a security risk as far as I know, so I’ve been serving it at a hard-to-guess path. Eg:
/stats-jQfbSdZXaazG83xkPr5xhE9h7xuuWgPL
An informal poll of some other companies tells me this is done by almost every company running HAProxy… -
Haproxy https to http is best done by checking if ssl was terminated. Other methods are prone to looping.
acl is_x_forwarded_ssl hdr(X-Forwarded-Ssl) -i "off" redirect scheme https code 301 if is_x_forwarded_ssl
-
Using Joplin for note-taking at the moment. Joplin uses sqlite, which makes it easy to rename all notes with their notebook prefixed in the title. Eg:
Writing: Title Here
. Simple enough:UPDATE notes SET title = ( ( SELECT title FROM folders WHERE folders.id = notes.parent_id ) || ': ' || notes.title );
-
Some Rust links that I like:
- https://blog.datalust.co/rust-at-datalust-how-we-organize-a-complex-rust-codebase
- https://users.rust-lang.org/t/public-getter-method-vs-pub-field/20147
- https://manishearth.github.io/blog/2015/05/27/wrapper-types-in-rust-choosing-your-guarantees/
- https://stackoverflow.com/questions/41596628/how-to-match-on-data-type-in-rust
- https://doc.rust-lang.org/std/any/struct.TypeId.html
-
The quarterly issue of Excel Pile-On Magazine is busy being printed over at HN https://news.ycombinator.com/item?id=28595155. I’ll write more on this later, but I feel a lot of the comments are missing the point that Excel is a tool for thought as much as anything else.