# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 220839
# self = https://watcher.sour.is?offset=219489
# next = https://watcher.sour.is?offset=219589
# prev = https://watcher.sour.is?offset=219389
[47°09′10″S, 126°43′24″W] Transfer 99% complete...
Raw cat
/https://duque-terron.cat/media/photos/IMG_4752.jpeg) #catsoftwtxt
❤️ 🎶: A Handwritten Letter by Jung Seo Joo
no rabbit in that hole.
[47°09′04″S, 126°43′58″W] Transponder still failing -- switching to analog communication
🧮 USERS:1 FEEDS:2 TWTS:1380 ARCHIVED:87754 CACHE:2699 FOLLOWERS:22 FOLLOWING:14
@aelaraji awww :(((
@aelaraji awww :(((
bought the new server that'll replace my optiplex 780 woooo!!! new server is a lenovo thinkstation P520
bought the new server that'll replace my optiplex 780 woooo!!! new server is a lenovo thinkstation P520
He agregado un hilo sobre RISC a nuestro BBJ!
I was this 🤏 close to buying a couple of baby-cactus plants but, I couldn't ... I still have to save up for that _future_ screen printing project. 🥲
Visit the Rabbit Hole - telnet to woofer.v6.rocks:9999
Greetings from Mt. Healthy, Ohio
[47°09′33″S, 126°43′21″W] Transponder malfunction
❤️ 🎶: BamBamBam by RESCENE
[47°09′12″S, 126°43′23″W] Transfer aborted
❤️ 🎶: Because of You (Female ver.)(《我心深触》电视剧插曲) by KLANG
Where has Meduza gone?
No Kings! No Leaders! No Oligarchs!
I just released a hotfix for the Komments plugin you should install asap:- It prevents that malicious characters in the comment text are saved and can lead to problems- It prevents that comments are not saved in certain setups with the new avatar service#komments #getkirby #kirbycmshttps://maurice-renck.de/en/notes/2025/komments-hotfix
mon été est fichu... https://rimworldgame.com/index.php/odyssey/
mon été est fichu... https://rimworldgame.com/index.php/odyssey/
On my blog: Short Fiction — Transgender Athlete Bans https://john.colagioia.net/blog/2025/06/22/title-ix-hope.html #fiction #freeculture #lgbtpridemonth #politics
[47°09′39″S, 126°43′13″W] Bad satellite signal -- switching to analog communication
https://www.teotimepacreau.fr/blog/bonnes-pratiques-pour-generer-un-flux-rss/
[47°09′09″S, 126°43′02″W] Transfer completed
@andros U2FsdGVkX1+wW86OnF/lYcTVjdFNiZVxOk+cLn+R9x4/bYvi6/7CvZo0gZvfUeQDxZpv1hOLg5J5kgSLsnK8bg==
[47°09′18″S, 126°43′39″W] Transfer 75% complete...
think i'm gonna use this license on my git repos going forward. it kicks ass https://anticapitalist.software/
think i'm gonna use this license on my git repos going forward. it kicks ass https://anticapitalist.software/
For Gopher:// exist a lot bunch solutions for Windows, stop raping Internet Explorer :)
🧮 USERS:1 FEEDS:2 TWTS:1379 ARCHIVED:87753 CACHE:2701 FOLLOWERS:22 FOLLOWING:14
#Meta to the #EU: "the focus should be on creating a regulatory infrastructure that ensures any licence that is sufficiently permissive for the user is considered open source, rather than anointing specific licences as “open source”."

Brilliant, sure, let's ignore existing definitions and go with gut feeling (incidently, Meta has a gut feeling generator).

Source: https://ec.europa.eu/info/law/better-regulation/have-your-say/initiatives/14625-Apply-AI-Strategy-strengthening-the-AI-continent/F3563576_en

#OpenSource
#Meta to the #EU: "the focus should be on creating a regulatory infrastructure that ensures any licence that is sufficiently permissive for the user is considered open source, rather than anointing specific licences as “open source”."

Brilliant, sure, let's ignore existing definitions and go with gut feeling (incidently, Meta has a gut feeling generator).

Source: https://ec.europa.eu/info/law/better-regulation/have-your-say/initiatives/14625-Apply-AI-Strategy-strengthening-the-AI-continent/F3563576_en

#OpenSource
#Meta to the #EU: "the focus should be on creating a regulatory infrastructure that ensures any licence that is sufficiently permissive for the user is considered open source, rather than anointing specific licences as “open source”."

Brilliant, sure, let's ignore existing definitions and go with gut feeling (incidently, Meta has a gut feeling generator).

Source: https://ec.europa.eu/info/law/better-regulation/have-your-say/initiatives/14625-Apply-AI-Strategy-strengthening-the-AI-continent/F3563576_en

#OpenSource
https://mcmansionhell.com/post/786540193484341248/mcmansion-hell-urges-all-new-yorkers-to-rank
@andros U2FsdGVkX1/5aYInTCCOWUN6v2vxQ7GpiHsg3ajd5U1dznWOrBNYAnOhyd+s96ckC/pYkSPTu/lZsMPQLmhXsA==
Thanks all 🙏
@lyse lol – I explicitly kept them in there so that the code is easier to understand for non-Rust people 🤪😂
@lyse lol – I explicitly kept them in there so that the code is easier to understand for non-Rust people 🤪😂
[47°09′47″S, 126°43′13″W] Transfer 50% complete...
@prologic Bon voyage! I hope you'll find some well-needed rest.
@movq All the returns tell me that you're not a real Rust programmer. :-D Personally, I would never omit them either. They make code 100 times more readable.
@movq Yeah, not too bad. I completely agree with you on completeness. Also, I hate complexity without having to learn that during on-calls. :-)
Finally, the two drawers are mounted on the workbench. Some kind of a lid board on top to keep the dust out is still missing. I also gotta build the drawer inserts for the saws.

I upcycled decades old table football aluminium pipes to become my handles. The spacers are made from the inner tube. Two minutes of handsanding with 400 grit sandpaper polished it up nicely.

Drawers on the workbench

https://lyse.isobeef.org/tmp/hobelbankschubladen/
[47°09′22″S, 126°43′15″W] Transfer 25% complete...
❤️ 🎶: We Were So Beautiful by J-Cera
❤️ 🎶: 男侠 by 川野夏美
❤️ 🎶: Rest In You by YUJU
❤️ 🎶: NAL BEO RIN NAM JA by Oh YooJin
Ojos dilatándose antes del ataque
#catsoftwtxt
❤️ 🎶: Kotoba by Rimi Natsukawa
Thumbnail novo para a minha página sobre compreensão de listas... #Python

https://abav.lugaralgum.com/material-aulas/Processing-Python-py5/comprehension.html

(preciso dar uma melhoradinha na página, por umas imagens, arrumar links quebrados) ![lista = [ f(x) for x in iteravel if cond(x) ]](https://media.ciberlandia.pt/ciberlandia-media/media_attachments/files/114/721/626/957/717/462/original/c91ee40155f8e9fd.png)
Someone has an iMac? I think they have all gone because of keypad problems.
❤️ 🎶: With Your Love by HYNN
But on PC I use lynx.
I only have internet explorer 6. Therein gopher not blocked.
#ShowYourStripes day, here are mine.

@urlyman@urlyman https://mastodon.social/@urlyman/114720462376167356 ![A bar graph showing temperature change in Portugal. It's growing, and this century constantly in the red (temperatures higher than the 1961-2010 average).](https://media.ciberlandia.pt/ciberlandia-media/media_attachments/files/114/721/159/170/878/963/original/f9e72c6dfcb72e4f.png)
#ShowYourStripes day, here are mine.

@urlyman@urlyman https://mastodon.social/@urlyman/114720462376167356 ![A bar graph showing temperature change in Portugal. It's growing, and this century constantly in the red (temperatures higher than the 1961-2010 average).](https://media.ciberlandia.pt/ciberlandia-media/media_attachments/files/114/721/159/170/878/963/original/f9e72c6dfcb72e4f.png)
#ShowYourStripes day, here are mine.

@urlyman@urlyman https://mastodon.social/@urlyman/114720462376167356 ![A bar graph showing temperature change in Portugal. It's growing, and this century constantly in the red (temperatures higher than the 1961-2010 average).](https://media.ciberlandia.pt/ciberlandia-media/media_attachments/files/114/721/159/170/878/963/original/f9e72c6dfcb72e4f.png)
On my blog: Free Culture Book Club — First Woman — Dream to Reality https://john.colagioia.net/blog/2025/06/21/first-woman-1.html #freeculture #bookclub
[47°09′13″S, 126°43′15″W] Waiting for carrier
❤️ 🎶: 還沒 by Jia Jia
@movq Yeah pretry much 🤣
@prologic 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? 🤔
@prologic 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? 🤔
@movq I'm feeling SO dumb right now 😅 I used to think !! was a sudo argument and never used it out of that context! Thanks for the $(!!) tip 🤘
@kat Always do 🤣
@movq Is this much different to Go's error handling as values though really? 🧐🤣😈
@movq Agree! Good list 👌
(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? 🤔)
(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
>
> 0. You will regret complexity when on-call
> 1. Stop falling in love with your own code
> 2. 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
> 5. Everyone hates code they didn’t write
> 6. Don't use unnecessary dependencies
> 7. Coding standards prevent arguments
> 8. Write meaningful commit messages
> 9. Don't ever stop learning new things
> 10. Code reviews spread knowledge
> 11. Always build for maintainability
> 12. Ask for help when you’re stuck
> 13. Fix root causes, not symptoms
> 14. Software is never completed
> 15. Estimates are not promises
> 16. Ship early, iterate often
> 17. 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.
Saw this on Mastodon:

https://racingbunny.com/@mookie/114718466149264471

> 18 rules of Software Engineering
>
> 0. You will regret complexity when on-call
> 1. Stop falling in love with your own code
> 2. 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
> 5. Everyone hates code they didn’t write
> 6. Don't use unnecessary dependencies
> 7. Coding standards prevent arguments
> 8. Write meaningful commit messages
> 9. Don't ever stop learning new things
> 10. Code reviews spread knowledge
> 11. Always build for maintainability
> 12. Ask for help when you’re stuck
> 13. Fix root causes, not symptoms
> 14. Software is never completed
> 15. Estimates are not promises
> 16. Ship early, iterate often
> 17. 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 {
// (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.)
=
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 {
// (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.)=
[47°09′23″S, 126°43′06″W] Sample analyzing complete -- starting transfer
https://www.middleeasteye.net/news/jailed-female-activists-iran-issue-letter-condemning-israeli-attacks
@movq Ewww 😈
[47°09′21″S, 126°43′33″W] Not enough data -- sampling finished
We really are bouncing back and forth between flat UIs and beveled UIs. I mean, this is what old X11 programs looked like:

https://www.uninformativ.de/desktop/2025%2D06%2D21%2D%2Dkatriawm%2Dold%2Dxorg%2Dapps.png

Good luck figuring out which of these UI elements are click-able – unless you examine every pixel on the screen.
We really are bouncing back and forth between flat UIs and beveled UIs. I mean, this is what old X11 programs looked like:

https://www.uninformativ.de/desktop/2025%2D06%2D21%2D%2Dkatriawm%2Dold%2Dxorg%2Dapps.png

Good luck figuring out which of these UI elements are click-able – unless you examine every pixel on the screen.
@prologic have fun!
@prologic have fun!
@prologic Enjoy your road trip! Have fun!! 🤘
Gone on a road trip. Be back in a week 👋
🧮 USERS:1 FEEDS:2 TWTS:1378 ARCHIVED:87729 CACHE:2694 FOLLOWERS:22 FOLLOWING:14
@bender Ahh I see hmmm I don't know this either 🤣
https://galusik.fr/fridayrockmetal/2025-06-20-frm.m3u Tonight #FridayRockMetal playlist
On my blog: Toots 🦣 from 06/16 to 06/20 https://john.colagioia.net/blog/2025/06/20/week.html #linkdump #socialmedia #quotes #week
#fridayreads #bookstodon ![Foto do livro "Há Mais Coisas no Céu" de John Brunner, um livro da colecção Argonauta (Edição "Livros do Brasil", Lisboa)](https://media.ciberlandia.pt/ciberlandia-media/media_attachments/files/114/717/787/863/389/070/original/a137ae9c0e4dee5f.jpg)
#fridayreads #bookstodon ![Foto do livro "Há Mais Coisas no Céu" de John Brunner, um livro da colecção Argonauta (Edição "Livros do Brasil", Lisboa)](https://media.ciberlandia.pt/ciberlandia-media/media_attachments/files/114/717/787/863/389/070/original/a137ae9c0e4dee5f.jpg)
[47°09′15″S, 126°43′51″W] Re-taking samples
@kat 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. 🤦
@kat 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 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
@aelaraji 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
@thecanine With the teeth this looks like a vampire dog. :-D And I don't get the reference either.
@aelaraji Oh, that's great! I haven't heard about any of them before either. There's also a caveat though, that I ran right into the very first time I tried this in zsh:

$ ls > /dev/null
$ echo $_
--color=tty

Yeah, exactly what you think:

$ which ls
ls: aliased to ls --color=tty

Alt+. is going to be my favorite one! In the above, it would also give me /dev/null, which might be probably more what I would expect.