Great read! This reminds me of a macOS app I made for my wife a few years back. It keeps track of the opening hours of all her favorite shops, and she can click a menu bar icon to see how long until each one closes today. It also warns if it's currently peak/rush hour for the shop, since she prefers to go when it's less crowded.
It's a simple Qt app that uses a text file for data storage. I wrote it after noticing that she had trouble remembering which shops are open when. I asked her what to call it, and she said "Gladiolus, like the flower" so I named it Gladiolus.
I can say for sure I've never had a more appreciative client as a programmer than the one user of Gladiolus :^)
It depends on what you enjoy doing, and how much time you really have.
Good bug reports & reduced test cases are always amazingly valuable. Perhaps you have a home page of your own? You can open it in Ladybird and see if you hit some problems. Maybe we throw a surprising JavaScript exception. Maybe our CSS layout isn't quite right.
If you can then reduce the problem to a minimal HTML/CSS/JS example, that's often enough for someone working on the engine to go ahead and find a fix pretty easily. :)
Over time, my audience grew, and some people really liked my videos, so I first made a Patreon and later a GitHub Sponsors for those who wanted to help me turn it into a full-time job someday.
Tobi (Shopify CEO) has been supporting my open source work via GitHub Sponsors since early 2022, so I reached out to him and said (very paraphrased) "I'm gonna start pushing harder on Ladybird, would Shopify want to be an official sponsor?"
It currently runs on SerenityOS, Linux and macOS. And Windows with WSL (I know, I know..)
We’ve also seen screenshots of Ladybird on FreeBSD, Haiku, and even Android at one point. Those are not maintained though, but we’ll come back to them eventually I’m sure :)
Because now you're holding a reference to `x` which is supposed to be protected by a mutex, even after the mutex is unlocked.
With the lambda-only API, it's much harder to make this mistake, since a temporary reference like this will still go out of scope at the end of the lambda expression.
auto x = state.with([](auto& state) { return state.x; });
Becomes this:
auto x = state.locked()->x;
But it also creates this very accessible footgun:
auto& x = state.locked()->x;
Where it's way too easy to bind a reference to something that should be protected by the lock, but now isn't. So I'm not sure this is a great idea anymore.
AFAIK if you use a templated type for the callback (as you should), it will be inlined by modern compilers at any optimization level other than -O0. :)
That's right! It's a callback to Slackware, which was the first Linux distribution I used as a kid. The release notes for Slackware 4.0 ended with "Have fun! :^)" which I always thought had a great vibe.
I find it neat that the code doesn't have to enumerate all the possible platforms it might be compiled on, and instead just takes something the compiler already provides and tweaks it.
But yes, the "cute" "hack" aspect is the primary endearing factor :^)
This is super exciting! It's been a privilege to watch Linus grow from a C++ noob to a competent browser developer (and TC39 invited expert!) I can't tell you how proud I am of him.
Please consider supporting Linus on this journey! :^)
It's a simple Qt app that uses a text file for data storage. I wrote it after noticing that she had trouble remembering which shops are open when. I asked her what to call it, and she said "Gladiolus, like the flower" so I named it Gladiolus.
I can say for sure I've never had a more appreciative client as a programmer than the one user of Gladiolus :^)