@lyse@lyse.isobeef.org They are optional dependencies and listed as such:
$ pacman -Qi pinentry
Name : pinentry
Version : 1.3.1-5
Description : Collection of simple PIN or passphrase entry dialogs which
utilize the Assuan protocol
Optional Deps : gcr: GNOME backend [installed]
gtk3: GTK backend [installed]
qt5-x11extras: Qt5 backend [installed]
kwayland5: Qt5 backend
kguiaddons: Qt6 backend
kwindowsystem: Qt6 backend
And itâs probably a good thing that theyâre optional. I wouldnât want to have all that installed all the time.
I was drafting support for showing âapplication iconsâ in my window manager, i.e. the Firefox icon in the titlebar:
Then I realized: Wait a minute, lots of applications donât set an icon? And lots of other window managers donât show these icons, either? Openbox, pekwm, Xfce, fvwm, no icons.
Looks like macOS doesnât show them, either?!
Has this grown out of fashion? Is this purely a Windows / OS/2 thing?
@lyse@lyse.isobeef.org @kat@yarn.girlonthemoon.xyz I spent so much time in the past figuring out if something is a dict or a list in YAML, for example.
What are the types in this example?
items:
- part_no: A4786
descrip: Water Bucket (Filled)
price: 1.47
quantity: 4
- part_no: E1628
descrip: High Heeled "Ruby" Slippers
size: 8
price: 133.7
quantity: 1
items is a dict containing ⊠a list of two other dicts? Right?
It is quite hard for me to grasp the structure of YAML docs. đą
The big advantage of YAML (and JSON and TOML) is that itâs much easier to write code for those formats, than it is with XML. json.loads() and youâre done.
/short/ if it's of this useless kind. Never thought that they ever actually will improve their Atom feeds. Thank you, much appreciated!
@lyse@lyse.isobeef.org I might need that script as well. đđ
Only figured this out yesterday:
pinentry, which is used to safely enter a password on Linux, has several frontends. Thereâs a GTK one, a Qt one, even an ncurses one, and so on.
GnuPG also uses pinentry. And you can configure your frontend of choice here in gpg-agent.conf.
But what happens when you donât configure it? Whatâs the default?
Turns out, pinentry is a shellscript wrapper and itâs not even that long. Here it is in full:
#!/bin/bash
# Run user-defined and site-defined pre-exec hooks.
[[ -r "${XDG_CONFIG_HOME:-$HOME/.config}"/pinentry/preexec ]] && \
. "${XDG_CONFIG_HOME:-$HOME/.config}"/pinentry/preexec
[[ -r /etc/pinentry/preexec ]] && . /etc/pinentry/preexec
# Guess preferred backend based on environment.
backends=(curses tty)
if [[ -n "$DISPLAY" || -n "$WAYLAND_DISPLAY" ]]; then
case "$XDG_CURRENT_DESKTOP" in
KDE|LXQT|LXQt)
backends=(qt qt5 gnome3 gtk curses tty)
;;
*)
backends=(gnome3 gtk qt qt5 curses tty)
;;
esac
fi
for backend in "${backends[@]}"
do
lddout=$(ldd "/usr/bin/pinentry-$backend" 2>/dev/null) || continue
[[ "$lddout" == *'not found'* ]] && continue
exec "/usr/bin/pinentry-$backend" "$@"
done
exit 1
Preexec, okay, then some auto-detection to use a toolkit matching your desktop environment âŠ
⊠and then it invokes ldd? To find out if all the required libraries are installed for the auto-detected frontend?
Oof. I was sitting here wondering why it would use pinentry-gtk on one machine and pinentry-gnome3 on another, when both machines had the exact same configs. Yeah, but different libraries were installed. One machine was missing gcr, which is needed for pinentry-gnome3, so that machine (and that one alone) spawned pinentry-gtk âŠ
@lyse@lyse.isobeef.org The cynic in me says: âItâs not bleeding edge, itâs from 2008!â Thatâs not fair, though, looks like the issue only arose in libinput in 2019. And maybe these weird mice are super rare. Dunno.
@lyse@lyse.isobeef.org The underlines are a bit much, yes. It appears to be related to my font (Helvetica) ⊠Maybe they do some Unicode trickery these days, I donât know. đ«€
@lyse@lyse.isobeef.org Whatâs bleeding edge? The mouse? Yeah, maybe. đ I didnât buy that on purpose and didnât even know hi-res mouse wheels were a thing âŠ
Since Wayland compositors handle input devices on a lower level than X11 window managers, every compositor has to figure out on their own what a âmouse wheel clickâ is:
(I think âWayland compositorâ is a misnomer. They are full-blown display servers that also do compositing, plus Wayland window management, plus X11 window management.)
One can only hope that all this eventually gets moved into the wlroots library. (Iâm not sure if thatâs possible, nor if people would want that.)
I wore a Kubernetes shirt, in public, by accident, and now I feel dirty and ashamed. đą
@kat@yarn.girlonthemoon.xyz I kind of like XML because itâs mostly well-defined and easy for humans to read (unlike YAML, which is a complete mess, imho) ⊠and at the same time, it can get complicated really fast. đ«€ But at least itâs plain-text â thatâs the important part in this case. đ
Xfce does one thing very right: It stores its settings in plain-text XML files. This allows me to easily read, track, and maybe even distribute these settings to other machines.
(Unlike GNOMEâs dconf, which uses some binary file format. Fun fact: The older and now deprecated gconf also used XML files.)
Nuke it from orbit: https://www.aaron.ai/
Nooooooooooooooooooooooooooooooooooooooooooooooooooooooo, the doctors have started using AI voice agents and they understand jack shit. đđđ
@lyse@lyse.isobeef.org Hm, I donât think so, the requested page was a Linux-specific post. đ€ I sometimes wonder if privacy-oriented browsers might do this on purpose, to create garbage data? đ€ No idea.
@lyse@lyse.isobeef.org I honestly wish I could do more than just sit here and wait. Itâs just a matter of time until they remove X.Org from the repos. đ«€ But I really canât dedicate so much time to this âŠ
I give up.
Letâs try again next year. I donât have the stamina. Death by a thousand paper cuts.
Canât set up a meaningful taskbar: https://github.com/labwc/labwc/discussions/2924 (This is not a labwc issue, itâs a generic issue in the broader Wayland ecosystem.)
HTTP referrers are quite broken, arenât they?
Because of that recent storm on my blog, I had a peek at them. Thereâs a lot of garbage in there. For example, https://docs.freebsd.org/en/books/handbook/disks-virtual.html is supposed to refer to one of my blog posts âŠ
Whatâs going on here?
@bender@twtxt.net Even I donât believe in that anymore. :â(
@lyse@lyse.isobeef.org Donât remind me about Morse. I really wanted to learn that and tried so for quite a while, but no success. đą
@aelaraji@aelaraji.com And I read the following funny response to that:
Bluesky: Users verify their age by adding a payment method or uploading a photo ID.
Mastodon: Users verify their age by posting pictures of the vintage computer equipment in their homes.
https://beige.party/@maxleibman/114848276288629121
đ
AI this, AI that.
Tech is no longer interesting. I need to find a new field.
(⊠maybe followed by âtmux Thursdayâ to cool down âŠ)
Thinking about doing âWayland Wednesdayâ. Only use Wayland every Wednesday. Collect bugs, report bugs, fix bugs.
@lyse@lyse.isobeef.org 06.jpg is quite funny. Block the road for 30 minutes! %)
@bender@twtxt.net Hm, it is now. đ€ I should have made a screenshot when I first saw it.
setpriv on Linux supports Landlock.
@prologic@twtxt.net Yeah, itâs not a strong sandbox in jennyâs case, it could still read my SSH private key (in case of an exploit of some sort). But I still like it.
I think my main takeaway is this: Knowing that technologies like Landlock/pledge/unveil exist and knowing that they are very easy to use, will probably nudge me into writing software differently in the future.
jenny was never meant to be sandboxed, so it canât make great use of it. Future software might be different.
(And this is finally a strong argument for static linking.)
Looks like hereâs something wrong with Markdown parsing. đ€ The original twt looks like this:
>This extension was turned off because it is no longer supported
Thanks Google.
This browser was uninstalled because it absolutely sucks!
So only the first line should be a quote.
setpriv on Linux supports Landlock.
Landlock is still young and a bit unpolished, but itâs slowly getting more popular. đ„ł
setpriv on Linux supports Landlock.
Another example:
$ setpriv \
--landlock-access fs \
--landlock-rule path-beneath:execute,read-file:/bin/ls-static \
--landlock-rule path-beneath:read-dir:/tmp \
/bin/ls-static /tmp/tmp/xorg.atom
The first argument --landlock-access fs says that nothing is allowed.
--landlock-rule path-beneath:execute,read-file:/bin/ls-static says that reading and executing that file is allowed. Itâs a statically linked ls program (not GNU ls).
--landlock-rule path-beneath:read-dir:/tmp says that reading the /tmp directory and everything below it is allowed.
The output of the ls-static program is this line:
ârwârâârââââx 3000 200 07-12 09:19 22'491 â /tmp/tmp/xorg.atom
It was able to read the directory, see the file, do stat() on it and everything, the little x indicates that getting xattrs also worked.
3000 and 200 are user name and group name â they are shown as numeric, because the program does not have access to /etc/passwd and /etc/group.
Adding --landlock-rule path-beneath:read-file:/etc/passwd, for example, allows resolving users and yields this:
ârwârâârââââx cathy 200 07-12 09:19 22'491 â /tmp/tmp/xorg.atom
PSA: setpriv on Linux supports Landlock.
If this twt goes through, then restricting the filesystem so that jenny can only write to ~/Mail/twt, ~/www/twtxt.txt, ~/.jenny-cache, and /tmp works.
st tries not to redraw immediately after new data arrives:
https://git.suckless.org/st/file/x.c.html#l1984
The exact timings are configurable.
This is the PR that changed the timing in VTE recently (2023):
https://gitlab.gnome.org/GNOME/vte/-/issues/2678
There is a long discussion. Itâs not a trivial problem, especially not in the context of GTK and multiple competing terminal widgets. st dodges all these issues (for various reasons).
Something happened with the frame rate of terminal emulators lately. It looks like thereâs a trend to run at a high framerate now? Iâm not sure exactly. This can be seen in VTE-based terminals like my xiate or XTerm on Wayland. foot and st, on the other hand, are fine.
My shell prompt and cursor look like this:
$ â
When I keep Enter pressed, I expect to see several lines like so:
$
$
$
$
$
$
$ â
With the affected terminal emulators, the lines actually show up in the following sequence. First, we have the original line:
$ â
Pressing Enter yields this as the next frame:
$
â
And then eventually this:
$
$ â
In other words, you can see the cursor jumping around very quickly, all the time.
Another example: Vim actually shows which key you just pressed in the bottom right corner. Keeping j pressed to scroll through a file means I get to see a j flashing rapidly now.
(I have no idea yet, why exactly XTerm in X11 is fine but flickering in Wayland.)
The WM_CLASS Property is used on X11 to assign rules to certain windows, e.g. âthis is a GIMP window, it should appear on workspace number 16.â It consists of two fields, name and class.
Wayland (or rather, the XDG shell protocol â core Wayland knows nothing about this) only has a single field called app_id.
When you run X11 programs under Wayland, you use XWayland, which is baked into most compositors. Then you have to deal with all three fields.
Some compositors map name to app_id, others map class to app_id, and even others directly expose the original name and class.
Apparently, there is no consensus.
Yeah, little fellow. I also just want to walk away. https://movq.de/v/bef8c35f01/ach.mp4
âđ«©â is my new favorite emoji.
@lyse@lyse.isobeef.org Yeah, if thereâs no stable API, then itâs not a lot of fun ⊠Bah. :|
⊠but you canât set SDL_VIDEODRIVER=wayland globally, because that breaks Wine again âŠ
⊠okay, the SDL backend works if you also set SDL_VIDEODRIVER=wayland.
@lyse@lyse.isobeef.org dmenu is a great example.
There have been several attempts at porting dmenu from X11 to Wayland. Well, not exactly âportingâ it, more like rewriting it from scratch. Turns out: Itâs not that easy.
dmenu is super fast and reliable. None of the Wayland rewrites are (at least none of the popular ones that I know of). They are either bloated and/or slow.
It takes a lot of discipline and restraint to write simple software and not blow up the codebase. This is much harder than people think. Itâs a form of art, really.
@lyse@lyse.isobeef.org I do my timetracking in a little Python script, locally. Every now and then, I push the data to our actual service. Problem solved â but itâs a completely unpopular approach, they all want to use the web site. I donât get it. Then, of course, when itâs down, shit hits the fan. (Luckily, our timetracking software is neither developed nor run by us anymore. Itâs a silly cloud service, but the upside is that Iâm not responsible anymore. đ€·)
Some of our oldschool devs tried to roll out local timetracking once, about 15 years ago. I donât remember anymore why they failed âŠ
This is developed inhouse, Iâm just so glad that weâre not a software engineering company. Oh wait. How embarrassing.
Oh to be anonymous on the internet. That must be nice. đ
⊠but the SDL backend is broken as well, albeit differently âŠ
⊠which is probably a GTK bug.
QEMU on Wayland unusable, because it canât grab the mouse ⊠Iâll add it to my TODO list and investigate/report it eventually.
@prologic@twtxt.net Yeah, this really could use a proper definition or a âmanifestâ. đ Many of these ideas are not very wide spread. And I havenât come across similar projects in all these years.
Letâs take the farbfeld image format as an example again. I think this captures the âspiritâ quite well, because this isnât even about code.
This is the entire farbfeld spec:
farbfeld is a lossless image format which is easy to parse, pipe and compress. It has the following format:
ââââââââââ€ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Bytes â Description â
â âââââââââȘââââââââââââââââââââââââââââââââââââââââââââââââââââââââââŁ
â 8 â "farbfeld" magic value â
ââââââââââŒââââââââââââââââââââââââââââââââââââââââââââââââââââââââââą
â 4 â 32-Bit BE unsigned integer (width) â
ââââââââââŒââââââââââââââââââââââââââââââââââââââââââââââââââââââââââą
â 4 â 32-Bit BE unsigned integer (height) â
ââââââââââŒââââââââââââââââââââââââââââââââââââââââââââââââââââââââââą
â [2222] â 4x16-Bit BE unsigned integers [RGBA] / pixel, row-major â
ââââââââââ§ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
The RGB-data should be sRGB for best interoperability and not alpha-premultiplied.
(Now, I donât know if your screen reader can work with this. Let me know if it doesnât.)
I think these are some of the properties worth mentioning:
- The spec is extremely short. You can read this in under a minute and fully understand it. That alone is gold.
- There are no âknobsâ: Itâs just a single version, itâs not like thereâs also an 8-bit color depth version and one for 16-bit and one for extra large images and one that supports layers and so on. This makes it much easier to implement a fully compliant program.
- Despite being so simple, itâs useful. Iâve used it in various programs, like my window manager, my status bars, some toy programs like âtuxeyesâ (an Xeyes variant), or Advent of Code.
- The format does not include compression because it doesnât need to. Just use something like bzip2 to get file sizes similar to PNG.
- It doesnât cover every use case under the sun, but it does cover the most important ones (imho). They have discussed using something other than RGBA and decided itâs not worth the trouble.
- They refrained from adding extra baggage like metadata. It would have needlessly complicated things.
@prologic@twtxt.net Hm, I wouldnât say that. Go code could fall into that category as well.
Maybe this topic could use a blog post / article, that explains what itâs about. Iâm finding it hard to really define what âsuckless-like softwareâ is. đ€ (Their own philosophy focuses too much on elitism, if you ask me.)
@prologic@twtxt.net Ah, Iâm referring to software thatâs similar to that of suckless.org: Small, minimal codebases, small tools, but still useful. dmenu is probably the best example and also farbfeld.
Hereâs the author of Anubis talking about some of their experiences:
https://xeiaso.net/blog/why-i-use-suckless-tools-2020-06-05/
(You can skip the long config and keybinds part.)
The lack of suckless-like simple, hackable software these days is appalling.
The Linux installation on my main PC turned 14 today:
$ head -n 1 /var/log/pacman.log
[2011-07-07 11:19] installed filesystem (2011.04-1)
@eldersnake@we.loveprivacy.club This wasnât always the case, though. Quake3, Quake4, Unreal Tournament 99 and 2004 are examples of games that used to run very well as native Linux games. But that was 20+ years ago âŠ
@lyse@lyse.isobeef.org (Itâs either that, or the fact that itâs womenâs football and ânobody wants to see that anywayâ.)
In all fairness, GOG says that Forsaken is only supported on Ubuntu 16.04 â not current Arch Linux. If you ask me, this just goes to show that Linux is not a good platform for proprietary binary software.
Is it free software, do you have the source code? Then youâre good to go, things can be patched/updated (that can still be a lot of work). But proprietary binary blobs? Very bad idea.
I bought the âremasteredâ versions of Grim Fandango and Forsaken on GOG, because theyâre super cheap at the moment. Both have native Linux versions.
And both these Linux version crap their pants. đ«€ The bundled SDL2 of Forsaken says it âcanât find a matching GLX visualâ and I couldnât figure out how to fix that. I didnât spend a lot of time on Grim Fandango.
Both work great in Wine. đ€Š
(I do have the original version of Grim Fandango from the 1990ies, but that one does not work so well in Wine. I figured, if itâs so cheap, why not. And I now get to play the english version. đ The german dub is pretty damn good, actually, but I always prefer the original these days.)
@lyse@lyse.isobeef.org I have to say, this sounds much worse than our stuff at work. đ«© (We donât use any Microsoft services, at least not for core tools.)
Okay, now this is a very interesting Rust feature:
https://blog.rust-lang.org/2025/07/03/stabilizing-naked-functions/
This (and inline assembly) makes Rust really interesting for very low-level stuff. đ„ł
It took about a year, I think, but Iâve now finished another run of Tomb Raider I, II, and III. And I have, for the first time, played the two bonus packs âUnfinished Businessâ (for TR I) and âGolden Maskâ (for TR II). Theyâre available as a free download, if you have the original games. (The bonus pack for TR III is not free.)
I just love these games â and the game mechanics. Itâs just the right balance between challenging and relaxing.
What kind of half-assed nonsense is this? They only broadcast half of the current european soccer cup ⊠(Let me guess, Iâm supposed to subscribe to some streaming service if I want to watch every game, right?)
This aggressive auto-logout on my bankâs website âŠ
Dude, you want me to print something, sign it, and scan it back in. This takes forever and Iâll have to re-login a dozen times. Narf.
@lyse@lyse.isobeef.org Uffpuh. Es Wetter spielt verrĂŒckt. đ«€
@prologic@twtxt.net That too, yeah. đ„Žđ©
@prologic@twtxt.net Bah! Why canât we all have mild weather. đ„Č
Is des Àni Hitz!
@aelaraji@aelaraji.com Yay, heat. đ«
TIL: The logo of sudo is a sandwich. đ« https://www.sudo.ws/
Ted Unangstâs snarky (and entertaining) remarks this month:
These are lists in your Inkscape example, right?
The font stuff? Yeah, thatâs a scrollable list where you can select the current font.
Someone did a thing:
https://social.treehouse.systems/@ariadne/114763322251054485
Iâve been silently wondering all the time if this was possible, but never investigated: Keep doing X11 but use Wayland as a backend.
This uses XWaylandâs ârootfulâ mode, which basically just gives you a normal Wayland window with all the X11 stuff happening inside of it:
https://www.phoronix.com/news/XWayland-Rootful-Useful
In other words, put such a window in fullscreen and you (more or less) have good old X11 running in a Wayland window.
(For me, personally, this wonât be the way forward. But itâs a very interesting project.)
@prologic@twtxt.net Heyho, welcome back. đ Did you guys have a nice trip? đ
@lyse@lyse.isobeef.org Probably. :-) I just saw that the account on Yarn is also gone. Maybe it didnât survive the crash earlier this year.
Just realized: One of the reasons why I donât like âflat UIsâ is that they look broken to me. Like the program has a bug, missing pixmaps or whatever.
Take this for example:
Iâm talking about this area specifically:
One UI element ends and the other one begins â no âtransitionâ between them.
The style of old UIs like these two is deeply ingrained into my brain:
When all these little elements (borders, handles, even just simple lines, âŠ) are no longer present, then the program looks buggy and broken to me. And Iâm not sure if Iâll ever be able to un-learn that.
Alright, now for something fun! Taxes! Yay!
@lyse@lyse.isobeef.org Wow. Just like Skyrim! đ
@mckinley@mckinley.ccâs blog appears to have gone stale, hm.
@kat@yarn.girlonthemoon.xyz Oh dear. đ©
@arne@uplegger.eu Stattdessen rutscht er seitlich vom Tisch? đ€Ș
@lyse@lyse.isobeef.org I can confidently say that I donât remember ever having seen fireflys. (Nor Firefly.) đł Iâm most surprised that you could count them. Naively, I would assume that these guys move around a lot and youâd lose track of them?
Weâre entering the âtoo hot to thinkâ-season in 3, 2, 1 ⊠and weâre live!
Welcome to the family, Puffy. đ„łđĄ
Theyâre all talks, not real hands-on trainings like you did.
I love listening to good, well-structured talks. Problem is, not everybody is a good speaker and many screw it up. đ„Ž Iâm certainly not a great speaker, which is why I gravitate more towards âworkshopsâ, in the hopes that people ask questions and discussions arise. Doesnât always work out. đ€Ł At the very least, I almost always have some other person connect to the projector/beamer/screenshare and then they do the stuff â this avoids me being wwwwaaaaaaaaayyyy too fast.
We are usually drowned in stress and tight deadlines, hence events like today are super rare ⊠We used to do it more often until ~10 years ago.
Once a year the security guys organize a really great hacking event, though.
Oh dear, Iâd love to participate in that. đ€Ż That sounds like a lot of fun. (Why donât we do this?!)
@prologic@twtxt.net This person isnât particularly happy with this study:
https://mastodon.social/@grimalkina/114717549619229029
I donât know enough about these things to form an opinion. đ«€ I sure wish it was true, though. đ
I did a âlectureâ/âworkshopâ about this at work today. 16-bit DOS, real mode. đŸ Pretty cool and the audience (devs and sysadmins) seemed quite interested. đ„ł
- People used the Intel docs to figure out the instruction encodings.
- Then they wrote a little DOS program that exits with a return code and they used uhex in DOSBox to do that. Yes, we wrote a COM file manually, no Assembler involved. (Many of them had never used DOS before.)
- DEBUG from FreeDOS was used to single-step through the program, showing what it does.
- This gets tedious rather quickly, so we switched to SVED from SvarDOS for writing the rest of the program in Assembly language. nasm worked great for us.
- At the end, we switched to BIOS calls instead of DOS syscalls to demonstrate that the same binary COM file works on another OS. Also a good opportunity to talk about bootloaders a little bit.
- (I think they even understood the basics of segmentation in the end.)
The 8086 / 16-bit real-mode DOS is a great platform to explain a lot of the fundamentals without having to deal with OS semantics or executable file formats.
Now that was a lot of fun. đ„ł Itâs very rare that we do something like this, sadly. I love doing this kind of low-level stuff.
pledge() and unveil() syscalls:
@lyse@lyse.isobeef.org Multi-Threading. Is. Hard. đ€Ż And yes, that blog is great. đ
Option and error handling. (Or the more complex Result, but itâs easier to explain with Option.)
@lyse@lyse.isobeef.org lol â I explicitly kept them in there so that the code is easier to understand for non-Rust people đ€Șđ
Option and error handling. (Or the more complex Result, but itâs easier to explain with Option.)
@prologic@twtxt.net Iâd say: Yes, because in Go itâs easier to ignore errors.
Weâre talking about this pattern, right?
f, err := os.Open("filename.ext")
if err != nil {
log.Fatal(err)
}
Nothing stops you from leaving out the if, right? đ€
(Of course, if weâre talking about a project youâre doing for a customer and the customer keeps asking for new stuff, then youâre never done, and you have to think ahead and expect changes. Is that what they mean? đ€)
Saw this on Mastodon:
https://racingbunny.com/@mookie/114718466149264471
18 rules of Software Engineering
- You will regret complexity when on-call
- Stop falling in love with your own code
- Everything is a trade-off. Thereâs no âbestâ 3. Every line of code you write is a liability 4. Document your decisions and designs
- Everyone hates code they didnât write
- Donât use unnecessary dependencies
- Coding standards prevent arguments
- Write meaningful commit messages
- Donât ever stop learning new things
- Code reviews spread knowledge
- Always build for maintainability
- Ask for help when youâre stuck
- Fix root causes, not symptoms
- Software is never completed
- Estimates are not promises
- Ship early, iterate often
- Keep. It. Simple.
Solid list, even though 14 is up for debate in my opinion: Software can be completed. You have a use case / problem, you solve that problem, done. Your software is completed now. There might still be bugs and they should be fixed â but this doesnât âaddâ to the program. Donât use âsoftware is never doneâ as an excuse to keep adding and adding stuff to your code.
Okay, hereâs a thing I like about Rust: Returning things as Option and error handling. (Or the more complex Result, but itâs easier to explain with Option.)
fn mydiv(num: f64, denom: f64) -> Option<f64> {
// (Letâs ignore precision issues for a second.)
if denom == 0.0 {
return None;
} else {
return Some(num / denom);
}
}
fn main() {
// Explicit, verbose version:
let num: f64 = 123.0;
let denom: f64 = 456.0;
let wrapped_res = mydiv(num, denom);
if wrapped_res.is_some() {
println!("Unwrapped result: {}", wrapped_res.unwrap());
}
// Shorter version using "if let":
if let Some(res) = mydiv(123.0, 456.0) {
println!("Hereâs a result: {}", res);
}
if let Some(res) = mydiv(123.0, 0.0) {
println!("Huh, we divided by zero? This never happens. {}", res);
}
}
You canât divide by zero, so the function returns an âerrorâ in that case. (Option isnât really used for errors, IIUC, but the basic idea is the same for Result.)
Option is an enum. It can have the value Some or None. In the case of Some, you can attach additional data to the enum. In this case, we are attaching a floating point value.
The caller then has to decide: Is the value None or Some? Did the function succeed or not? If it is Some, the caller can do .unwrap() on this enum to get the inner value (the floating point value). If you do .unwrap() on a None value, the program will panic and die.
The if let version using destructuring is much shorter and, once you got used to it, actually quite nice.
Now the trick is that you must somehow handle these two cases. You must either call something like .unwrap() or do destructuring or something, otherwise you canât access the attached value at all. As I understand it, it is impossible to just completely ignore error cases. And the compiler enforces it.
(In case of Result, the compiler would warn you if you ignore the return value entirely. So something like doing write() and then ignoring the return value would be caught as well.)
We really are bouncing back and forth between flat UIs and beveled UIs. I mean, this is what old X11 programs looked like:
Good luck figuring out which of these UI elements are click-able â unless you examine every pixel on the screen.
@kat@yarn.girlonthemoon.xyz I might give it a shot. đ
Skimming through the manual: I had no idea that keeping the âupâ cursor pressed actually slows you down at some point. đ€Š
@aelaraji@aelaraji.com I use Alt+. all the time, itâs great. đ
FWIW, another thing I often use is !! to recall the entire previous command line:
$ find -iname '*foo*'
./This is a foo file.txt
$ cat "$(!!)"
cat "$(find -iname '*foo*')"
This is just a test.
Yep!
Or:
$ ls -al subdir
ls: cannot open directory 'subdir': Permission denied
$ sudo !!
sudo ls -al subdir
total 0
drwx------ 2 root root 60 Jun 20 19:39 .
drwx------ 7 jess jess 360 Jun 20 19:39 ..
-rw-r--r-- 1 root root 0 Jun 20 19:39 nothing-to-see
@kat@yarn.girlonthemoon.xyz I like the animations in your version much better than the ones from ExtremeTuxRacer. đ And thereâs no little dance at the end of a race!
I also just noticed that the performance issue doesnât affect all games. đ€ Sigh, Iâll just downgrade for the time being. Not in the mood to fiddle with this.
@kat@yarn.girlonthemoon.xyz I guess that qualifies as an âArch momentâ, albeit the first one I encountered. Iâm running this since 2008 and itâs usually very smooth sailing. đ
@lyse@lyse.isobeef.org Yeah, YMMV. Some games work(ed) great in Wine, others not at all. I just use it because itâs easier than firing up my WinXP box. (I donât use Wine for regular applications, just games.)
Speaking of Wine, Arch Linux completely fucked up Wine for me with the latest update.
- 16-bit support is gone.
- Performance of 3D games is horrible and unplayable.
Arch is shipping a WoW64 build now, which is not yet ready for prime time.
And then I realized that thereâs actually only one stable Wine release per year but Arch has been shipping development releases all the time. Thatâs q
Speaking of Wine, Arch Linux completely fucked up Wine for me with the latest update.
- 16-bit support is gone.
- Performance of 3D games is horrible and unplayable.
Arch is shipping a WoW64 build now, which is not yet ready for prime time.
And then I realized that thereâs actually only one stable Wine release per year but Arch has been shipping development releases all the time. Thatâs quite unusual. Iâm used to Arch only shipping stable packages ⊠huh.
Hopefully things will improve again. Iâm not eager to build Wine from source. Iâd rather ditch it and resort to my real Windows XP box for the little (retro)gaming that I do ⊠đ«€
@kat@yarn.girlonthemoon.xyz lol, oof, well, better than nothing. đ„Ž It appears to run quite well. đ€
@prologic@twtxt.net Ahhh, right, my bad, I could have easily found that. đ€Š
Thereâs also a project page which lists some limitations of this study: https://www.media.mit.edu/projects/your-brain-on-chatgpt/overview/
It certainly sounds plausible. âUse it or lose it.â
@prologic@twtxt.net But is there a source for it? Am I too stupid to use that site? đ€Ș
@prologic@twtxt.net ⊠or just bullshit.
Iâm Alex, COO at ColdIQ. Built a $4.5M ARR business in under 2 years.
Some âC-levelâ guy telling people what to do, yeah, I have my doubts.
@prologic@twtxt.net This doesnât cite any sources, might as well be satire. đ€