Iāve got a prototype of my hardcopy simulator going. Iām typing on the keyboard and the ādisplayā goes to the printer:
https://movq.de/v/56feb53912/s.png
https://movq.de/v/235c1eabac/MVI_8810.MOV.mp4
The biiiiiiiiiig problem is that the print head and plastic cover make it impossible to see whatās currently being printed, because this is not a typewriter. This means: In order to see what I just entered, I have to feed the paper back and forth and back and forth ⦠itās not ideal.
I got that idea of moving back/forth from Drew DeVault, who ā as it turned out ā did something similar a few years back. (I tried hard to read as little as possible of his blog post, because figuring things out myself is more fun. But that could mean I missed a great idea here or there.)
But hey, at least this is running on my Pentium 133 on SuSE Linux 6.4, printer connected with a parallel cable. š
(Also, yes, you can see the printouts of earlier tests and, yes, I used ed(1)
wrong at one point. 𤪠And ls
insisted on using colors ā¦)
Interactive demo of #shapelyās centroid for the triangle :)
import py5
from shapely import Polygon, Point
def setup():
py5.size(400, 400)
py5.stroke_join(py5.ROUND)
def draw():
py5.background(200)
pts = ((100, 100), (300, 100),
(py5.mouse_x, py5.mouse_y))
xs, ys = zip(*pts)
cx = sum(xs) / len(xs)
cy = sum(ys) / len(ys)
tri = Polygon(pts)
py5.no_fill()
py5.stroke_weight(1)
py5.stroke(0, 200, 0)
py5.shape(Point(cx, cy).buffer(5))
py5.stroke(0, 0, 200)
py5.shape(tri.envelope.buffer(2))
py5.shape(tri.envelope.centroid.buffer(5))
py5.stroke_weight(3)
py5.stroke(0)
py5.shape(tri)
py5.fill(0)
py5.shape(tri.centroid.buffer(2))
py5.run_sketch(block=False)
Hereās an interesting thought/angle on this topic:
gemini://gemini.conman.org/boston/2025/08/21.1
A further check showed that all the network blocks are owned by one organizationāTencent [4]. Iām seriously thinking that the CCP (Chinese Communist Party) encourage this with maybe the hope of externalizing the cost of the Great Firewall [5] to the rest of the world.
Sooooooooo, things happened, and I now have a dot matrix printer again. šš
(One of the end goals is to simulate a hardcopy terminal on my old box. Iām waiting for another cable to arrive, I donāt have USB there. And then use ed(1)
like it was meant to be used! š
)
@movq@www.uninformativ.de WE NEED MORE BACKUPS!!!!!!!!!!!1
[47°09ā²28ā³S, 126°43ā²31ā³W] Raw reading: 0x689335B1, offset +/-1
ok i really like XLOV. 1&Only is a great song. so vibe-y and sensual. and they released it in pride month too they Get It https://www.youtube.com/watch?v=NBZgirj_C2Y
@lyse@lyse.isobeef.org @kat@yarn.girlonthemoon.xyz Colorized manpages have been a thing for a very long time:
https://movq.de/v/81219d7f7a/s.png
Problem is, hardly anybody knows this, because you configure this by ⦠drumroll ⦠overwriting TERMCAP entries of less
in your ~/.bashrc
:
export LESS_TERMCAP_md=$'\e[38;5;3m' # Bold⨠export LESS_TERMCAP_me=$'\e[0m' # End Bold
export LESS_TERMCAP_us=$'\e[4;38;5;6m' # Underline⨠export LESS_TERMCAP_ue=$'\e[0m' # End Underline
export GROFF_NO_SGR=1 # Needed since groff 1.23
[47°09ā²35ā³S, 126°43ā²14ā³W] Reading: 1.02000 PPM
@lyse@lyse.isobeef.org āAdvancedā, well, probably more āmatureā. There arenāt a ton of crazy features and that icon thing is the largest code addition in the last 10 years. %)
Speaking of OS/2 ⦠I just realized that Windows 3.x didnāt have icons, either. If Iām not mistaken, this only got added in Windows 95. In other words, OS/2 had this feature before Windows did, because at least OS/2 2.1 from 1993 had icons. Who would have thunk.
(Now I kind of want to know which system really introduced this feature.)
@lyse@lyse.isobeef.org Oh, huh, maybe it was just my GNOME 2 themes back then that didnāt show the icon. š¤
I like the looks of your window manager. Thatās using Wayland, right?
Oh, no. Itās still X11. All my recent Wayland comments resulted from me trying to switch, but I think itās still too early. Being unable to use QEMU (because it canāt capture the mouse pointer) is a pretty big blocker for me. This is completely broken, it just happens to be unnoticeable with modern guest OSes, so itās probably not a priority for devs.
(Not to mention that I would have to fork and substantially extend dwl in order to āreplicateā my X11 WM. And then, after having done that, Iād have to follow upstream Wayland development, for which I donāt have the resources. Things would need to slow down before I can do that.)
all that wasted space of the windows not making use of the full screen!!!1
Heh. Iāve been using tiling WMs for ~15 years now, so itās actually kind of refreshing to see something different for a change. š
Probably close to the older Windowses.
That particular theme is a ripoff of OS/2 Warp 3: https://movq.de/v/6c2a948882/s.png š
We ran some similar brownish color scheme (donāt recall its name) on Win95 or Win98
Oh god. Yeah, I wasnāt a fan of those, either. š„“
@movq@www.uninformativ.de According to this screenshot, KDE still shows good old application icons: https://upload.wikimedia.org/wikipedia/commons/9/94/KDE_Plasma_5.21_Breeze_Twilight_screenshot.png
And GNOME used to have them, too: https://upload.wikimedia.org/wikipedia/commons/9/9f/Gnome-2-22_%284%29.png
I like the looks of your window manager. Thatās using Wayland, right? The only thing on this screenshot to critique is all that wasted space of the windows not making use of the full screen!!!1 At least the file browser. 8-)
This drives me nuts when my workmates share their screens. I really donāt get it how people can work like that. You canāt even read the whole line in the IDE or log viewer with all the expanded side bars. And then thereās 200 pixels on the left and another 300 pixels on the right where the desktop wallpaper shows. Gnaa! Thereās the other extreme end when somebody shares their ultra wide screen and I just have a āregularishā 16:10 monitor and donāt see shit, because itās resized way too tiny to fit my width. Good times. :-D
Sorry for going off on a tangent here. :-) Back to your WM: It has the right mix of being subtle and still similar to motif. Probably close to the older Windowses. My memory doesnāt serve me well, but I think they actually got it fairly good in my opinion. Your purple active window title looks killer. It just fits so well. This brown one (https://www.uninformativ.de/blog/postings/2025-07-22/0/leafpads.png) gives me also classic vibes. Awww. We ran some similar brownish color scheme (donāt recall its name) on Win95 or Win98 for some time on the family computer. I remember other people visting us not liking these colors. :-D
Hereās an example of X11/Xlib being old and archaic.
X11 knows the data type ācardinalā. For example, the window property _NET_WM_ICON
(which holds image data for icons) is an array of ācardinalā. I am already not really familiar with that word and Iām assuming that it comes from mathematics:
https://en.wikipedia.org/wiki/Cardinal_number
(It could also be a bird, but probably not: https://en.wikipedia.org/wiki/Cardinalidae)
We would probably call this an āintegerā today.
EWMH says that icons are arrays of cardinals and that theyāre 32-bit numbers:
https://specifications.freedesktop.org/wm-spec/latest-single/#id-1.6.13
So itās something like 0x11223344
with 0x11
being the alpha channel, 0x22
is red, and so on.
You would assume that, when you retrieve such an array from the X11 server, youād get an array of uint32_t
, right?
Nope.
Xlib is so old, they use char
for 8-bit stuff, short int
for 16-bit, and long int
for 32-bit:
That is congruent with the general C data types, so it does make sense:
https://en.wikipedia.org/wiki/C_data_types
Now the funny thing is, on modern x86_64
, the type long int
is actually 64 bits wide.
The result is that every pixel in a Pixmap, for example, is twice as large in memory as it would need to be. Just because Xlib uses long int
, because uint32_t
didnāt exist, yet.
And this is something that I wouldnāt know how to fix without breaking clients.
@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.
@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.
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
ā¦
[47°09ā²19ā³S, 126°43ā²27ā³W] Reading: 1.34 Sv
[47°09ā²13ā³S, 126°43ā²30ā³W] Raw reading: 0x68806C51, offset +/-1
@movq@www.uninformativ.de I fully agree with you on https://www.uninformativ.de/blog/postings/2025-07-22/0/POSTING-en.html!
Although, in the first screenshot, the window title background is much darker in the new version than the old one!1!1 :-P Kidding aside, the contrast in the old one is still better.
Also, note the missing underlines for the Alt hotkeys now. I just think that the underline in the old one is too thick.
[47°09ā²08ā³S, 126°43ā²36ā³W] Reading: 1.88 Sv
[47°09ā²22ā³S, 126°43ā²17ā³W] Raw reading: 0x687B4271, offset +/-1
[47°09ā²49ā³S, 126°43ā²27ā³W] Reading: 1.87 Sv
@lyse@lyse.isobeef.org Ja, eine kleine Inventur vorab kann auch nicht schaden. Der Bestand an Erdankern, Heringen und Gaskartuschen ist durch mich die Tage schon wieder aufgestockt worden.
Wo das Gas bleibt weiĆ ich. Warum die Befestigungen immer weniger werden, obwohl wir durchzƤhlen (!), ist mir unbekannt. Vielleicht sind wir im Zahlenraum von 1 bis 20 einfach nur noch sehr unsicher. š¤
[47°09ā²35ā³S, 126°43ā²36ā³W] Reading: 1.44000 PPM
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.
[47°09ā²50ā³S, 126°43ā²12ā³W] Reading: 1.94 Sv
@movq@www.uninformativ.de Yeah, itās a shitshow. MS overconfirms all my prejudices constantly.
Ignoring e-mail after lunch works great, though. :-)
Our timetracking is offline for over a week because of reasons. The responsible bunglers are falling by the skin of their teeth: https://lyse.isobeef.org/tmp/timetracking.png
- The error message neither includes the timeframe nor a link to an announcement article.
- The HTML page needs to download JS in order to display the fucking error message.
- Proper HTTP status codes are clearly only for big losers.
- Despite being down, heaps of resources are still fetched.
I find it really fascinating how one can screw up on so many levels. This is developed inhouse, Iām just so glad that weāre not a software engineering company. Oh wait. How embarrassing.
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)
[47°09ā²32ā³S, 126°43ā²31ā³W] Raw reading: 0x686A1EF1, offset +/-1
Sem palavras pra descrever esta baixeza de artigo:
é citado um único estudo baseado em testemunhos de alunos (ficam de fora pais e profs), um estudo qualitativo por isso não generalizÔvel. Mm assim, os autores do artigo copiam as conclusões do estudo, e o Público tb parece estar ok com artigos decalcados
os autores do artigo são consultores que dão formação a pais e educadores sobre problemas do digital nas crianças, por isso basear opinião apenas num estudo q os ignora é ainda mais wtf
argumento de q crianças têm acesso a dispositivos fora da escola é parvo - tb têm acesso a tabaco e Ôlcool, por isso tb os devemos permitir na escola? come on
e Ć© muito conveniente clamar pela regulamentação das redes sociais sem especificar a forma (proibir anĆŗncios? introduzir idades mĆnimas? nĆ£o sabemos).
No final é o costume, os pais e profs que se desenmerdem, a responsabilidade é deles e não das empresas que criam mecanismos de viciação, claro
[47°09ā²51ā³S, 126°43ā²21ā³W] Reading: 1.91000 PPM
[47°09ā²37ā³S, 126°43ā²07ā³W] Reading: 1.99000 PPM
[47°09ā²30ā³S, 126°43ā²18ā³W] Reading: 1.61000 PPM
[47°09ā²21ā³S, 126°43ā²14ā³W] Reading: 1.25000 PPM
Weāre entering the ātoo hot to thinkā-season in 3, 2, 1 ⦠and weāre live!
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.
[47°09ā²23ā³S, 126°43ā²34ā³W] Reading: 1.72 Sv
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.
@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
[47°09ā²47ā³S, 126°43ā²52ā³W] Reading: 1.68 Sv
@prologic@twtxt.net Iām trying to call some libc functions (because the Rust stdlib does not have an equivalent for getpeername()
, for example, so I donāt have a choice), so I have to do some FFI stuff and deal with raw pointers and all that, which is very gnarly in Rust ā because youāre not supposed to do this. Things like that are trivial in C or even Assembler, but I have not yet understood what Rust does under the hood. How and when does it allocate or free memory ⦠is the pointer that I get even still valid by the time I do the libc call? Stuff like that.
I hope that I eventually learn this over time ⦠but I get slapped in the face at every step. Itās very frustrating and Iām always this š¤ close to giving up (only to try again a year later).
Oh, yeah, yeah, I guess I could ājustā use some 3rd party library for this. socket2 gets mentioned a lot in this context. But I donāt want to. I literally need one getpeername()
call during the lifetime of my program, I donāt even do the socket()
, bind()
, listen()
, accept()
dance, I already have a fully functional file descriptor. Using a library for that is total overkill and Iād rather do it myself. (And look at the version number: 0.5.10
. The library is 6 years old but theyāre still saying: āNah, weāre not 1.0 yet, we reserve the right to make breaking changes with every new release.ā So many Rust libs are still unstable ā¦)
⦠and I could go on and on and on ⦠š¤£
So I was using this function in Rust:
https://doc.rust-lang.org/std/path/struct.Path.html#method.display
Note the little 1.0.0
in the top right corner, which means that this function has been āstable since Rust version 1.0.0ā. Weāre at 1.87 now, so weāre good.
Then I compiled my program on OpenBSD with Rust 1.86, i.e. just one version behind, but well ahead of 1.0.0.
The compiler said that I was using an unstable library feature.
Turns out, that function internally uses this:
https://doc.rust-lang.org/std/ffi/struct.OsStr.html#method.display
And that is only available since Rust 1.87.
How was I supposed to know this? š¤Øš«©
[47°09ā²13ā³S, 126°43ā²20ā³W] Raw reading: 0x684880B1, offset +/-1
[47°09ā²10ā³S, 126°43ā²06ā³W] Reading: 1.64000 PPM
Current toy project: an image feed generated by mk(1). Still some edges to clean up but itās nice: http://a.9srv.net/img/_readme.html
[47°09ā²01ā³S, 126°43ā²54ā³W] Reading: 1.10 Sv
[47°09ā²50ā³S, 126°43ā²21ā³W] Reading: 1.61 Sv
@nghialele@nghia.im Man, I wish I could watch Formula 1 on a regular basis again, but it has become expensive as fuck here. š«¤
This is my highlight, really, havenāt seen this in action in a loooooooong time:
[47°09ā²56ā³S, 126°43ā²42ā³W] Reading: 1.53 Sv
Maybe youāll enjoy this as well:
I still have one of my first modems, a Creatix LC 144 VF:
I think this was the modem that I used when I first connected to the internet, but Iām not sure.
I plugged it in again and it still works:
The firmware appears to be from 1994, which sounds about right. I donāt think we had internet access before that. We certainly did use local mailboxes, though. (Or BBSās, as you might call them.)
I now want to actually use that modem again. For the moment, I can only use a phone to dial into it, I lack a second modem to actually establish a connection. Hereās a video:
Not spectacular, but the modem does answer after me entering ATA
.
I bought another cheap old modem on eBay and am now waiting for it to arrive. Once itās here, I want to simulate an actual dial-up session, hopefully from OS/2 or Windows 3.x.
[47°09ā²25ā³S, 126°43ā²37ā³W] Reading: 1.51000 PPM
One of the nicest things about Go is the language itself, comparing Go to other popular languages in terms of the complexity to learn to be proficient in:
- Go:
25
keywords (Stack Overflow); CSP-style concurrency (goroutines & channels)
- Python 2:
30
keywords (TutorialsPoint); GIL-bound threads & multiprocessing (Wikipedia)
- Python 3:
35
keywords (Initial Commit); GIL-bound threads,asyncio
& multiprocessing (Wikipedia, DEV Community)
- Java:
50
keywords (Stack Overflow); threads +java.util.concurrent
(Wikipedia)
- C++:
82
keywords (Stack Overflow);std::thread
, atomics & futures (en.cppreference.com)
- JavaScript:
38
keywords (Stack Overflow); single-threaded event loop &async/await
, Web Workers (Wikipedia)
- Ruby:
42
keywords (Stack Overflow); GIL-bound threads (MRI), fibers & processes (Wikipedia)
@movq@www.uninformativ.de i feel like when i read go code iām reading some algebra shit where every part is 1-5 letters long and then thereās weird symbols like :=
and itās just infinitely harder for me to parse and infer meaning from lol. itās such a me problem
This is one of my attempts:
$ go build ./cmd/xor/... && ./xor
Generation 95 | Fitness: 0.999964 | Nodes: 9 | Conns: 19
Target reached!
Best network performance:
[0 0] ā got=0 exp=0 (raw=0.000) ā
[0 1] ā got=1 exp=1 (raw=0.990) ā
[1 0] ā got=1 exp=1 (raw=0.716) ā
[1 1] ā got=0 exp=0 (raw=0.045) ā
Overall accuracy: 100.0%
Wrote best.dot ā render with `dot -Tpng best.dot -o best.png`
[47°09ā²27ā³S, 126°43ā²08ā³W] Reading: 1.15000 PPM
fit 1 $ spin (saw 0.1 * sign fxy) $ rect 0 1 - rect 0 0.99 >> add;
#punctual #livecoding #creativecoding #videoart
[47°09ā²29ā³S, 126°43ā²22ā³W] Reading: 1.45 Sv
[47°09ā²01ā³S, 126°43ā²44ā³W] Reading: 1.09000 PPM
[47°09ā²49ā³S, 126°43ā²54ā³W] Raw reading: 0x682A2E32, offset +/-1
@bender@twtxt.net Just to save some unnecessary und useless network traffic. :-) So that I can download more 1080p videos!!1
[47°09ā²13ā³S, 126°43ā²49ā³W] Reading: 1.48 Sv
1 RPM
. This is a rather aggressive rate limit actually. This basically makes Github inaccessible and useless for basically anything unless you're logged in. You can basically kiss "pursuing" casually, anonymously goodbye.
@bender@twtxt.net 5, 4, 3, 2, 1 š¤£
@bender@twtxt.net Basically the way Iām reading this is 1 RPM
. This is a rather aggressive rate limit actually. This basically makes Github inaccessible and useless for basically anything unless youāre logged in. You can basically kiss āpursuingā casually, anonymously goodbye.
Imagine if I imposed that kind of rate limit on twtxt.net?! š¤£
[47°09ā²09ā³S, 126°43ā²53ā³W] Reading: 1.45 Sv
The album I got by accident is starting to grow on me. Not that bad. š¤ Itās Dredg ā El Cielo, btw: https://www.youtube.com/watch?v=e4JB8rmXaO8&list=PLRASiMqDV8psZSFQi7nUX4p0R8oRHbUy_&index=1
@bender@twtxt.net Iām not sure this is accurate, if you lookup mine:
$ whois shortcircuit.net.au 2>&1 | grep -i creat
created: 1986-03-05
I think this has to be the registrarās creation date no? š¤
[47°09ā²55ā³S, 126°43ā²06ā³W] Reading: 1.16000 PPM
[47°09ā²23ā³S, 126°43ā²05ā³W] Reading: 1.10000 PPM
And on a similar note, cross-post from Mastodon:
What I love about HTML and HTTP is that it can degrade rather gracefully on old browsers.
My website isnāt spectacular but I donāt think it looks horrible, either. And itās still usable just fine all the way down to WfW 3.11:
Itās not perfect, but itās usable. And that makes me happy. Almost 30 years of compatibilty.
The biggest sacrifice is probably that I donāt enforce TLS and that HTTP 1.0 has no Host:
header, so no vhosts (or rather, everything must come from the default vhost). (Yes, some old browsers send Host:
, even though they predate HTTP 1.1. Netscape does, but not IBM WebExplorer, for example.)
(On the other hand, it might completely suck on modern mobile devices. Dunno, I barely use those. š¤Ŗ)
[47°09ā²14ā³S, 126°43ā²17ā³W] Reading: 1.12 Sv
morning yarnverse (itās 1:30pm here i slept in). iām already bored
Iāve just released version 1.0 of twtxt.el (the Emacs client), the stable and final version with the current extensions. Iāll let the community maintain it, if there are interested in using it. I will also be open to fix small bugs.
I donāt know if this twt is a goodbye or a see you later. Maybe I will never come back, or maybe I will post a new twt this afternoon. But itās always important to be grateful. Thanks to @prologic@twtxt.net @movq@www.uninformativ.de @eapl.me@eapl.me @bender@twtxt.net @aelaraji@aelaraji.com @arne@uplegger.eu @david@collantes.us @lyse@lyse.isobeef.org @doesnm@doesnm.p.psf.lt @xuu@txt.sour.is @sorenpeter@darch.dk for everything you have taught me. Iāve learned a lot about #twtxt, HTTP and working in community. It has been a fantastic adventure!
What will become of me? I have created a twtxt fork called Texudus (https://texudus.readthedocs.io/). I want to continue learning on my own without the legacy limitations or technologies that implement twtxt. Itās not a replacement for any technology, itās just my own little lab. I have also made a fork of my own client and will be focusing on it for a while. I donāt expect anyone to use it, but feedback is always welcome.
Best regards to everyone.
#twtxt #emacs #twtxt-el #texudus
E nĆ£o Ć© que os finórios do Airbnb conseguiram encaixar um artigo no PĆŗblico como āopiniĆ£oā?
@movq@www.uninformativ.de If weāre focusing on solving the āmissing rootsā problems. I would start to think about āclient recommendationsā. The first recommendation would be:
- Replying to a Twt that has no initial Subject must itself have a Subject of the form (hash; url).
This way itās a hint to fetching clients that follow B, but not A (in the case of no mentions) that the Subject/Root might (very likely) is in the feed url
.
7
to 12
and use the first 12
characters of the base32 encoded blake2b hash. This will solve two problems, the fact that all hashes today either end in q
or a
(oops) š
And increasing the Twt Hash size will ensure that we never run into the chance of collision for ions to come. Chances of a 50% collision with 64 bits / 12 characters is roughly ~12.44B Twts. That ought to be enough! -- I also propose that we modify all our clients and make this change from the 1st July 2025, which will be Yarn.social's 5th birthday and 5 years since I started this whole project and endeavour! š± #Twtxt #Update
@eapl.me@eapl.me I honestly believe you are overreacting here a little bit 𤣠I completely emphasize with you, it can be pretty tough to feel part of a community at times and run a project with a kind of ādemocracyā or āvote by committeeā. But one thing that life has taught me about open source projects and especially decentralised ecosystems is that this doesnāt really work.
It isnāt that Iāve not considered all the other options on the table (which can still be), itās just that Iāve made a decision as the project lead that largely helped trigger a rebirth of the use of Twtxt back in July 1 2020. There are good reasons not to change the threading model right now, as the changes being proposed are quite disruptive and donāt consider all the possible things that could go wrong.
We havet an AI assistant at work, new version came out today ānearby restaurant recommendationsā mentioned. Gotta try that!
Ask it where I can get a burger, knowing thereās 3 spots that had it on the menu, AI says thereās none. Ask it to list all the restaurants nearby it can check⦠it knows 3, of the 10 or so around, but 1/3, even has a burger, on the menu.
Ask it to list the whole menu at restaurant 1: it hallucinates random meals, none of which they had (I ate there).
Restaurant 2 (the one most people go to, so they must have at least tested it with this one): it lists the soup of the day and ¾ meals available. Incomplete, but better than false.
Restaurant 3: it says āfoodā and gives a general description of food. You have to be fucking kidding me!
āBuT cAnInE, tHe A(G)i ReVoLuTiOn Is NoWā
I just fixed a bug in ttās reply to parent feature. Previously, when the message tree looked like the following
Message
āā“Reply 1
ā āā“Subreply
āā“Reply 2
and āReply 2ā was selected, pressing A
to reply to the parent should have picked āMessageā. However, a reply to āReply 2ā was composed instead. The reason was a precausiously introduced safety guard to abort the parent search which stopped at āSubreplyā, because its subject didnāt match āReply 2āās. It was originally intended to abort on a completely different message conversation root. Just in case. Turns out that this thoght was flawed.
Fixing bugs by only removing code is always cool. :-)
Can you automate the drawing with a script? On X11, you can:
#!/bin/sh
# Position the pointer at the center of the dot, then run this script.
sleep 1
start=$(xdotool getmouselocation --shell)
eval $start
r=400
steps=100
down=0
for step in $(seq $((steps + 1)) )
do
# pi = 4 * atan(1)
new_x=$(printf '%s + %s * c(%s / %s * 2 * (4 * a(1)))\n' $X $r $step $steps | bc -l)
new_y=$(printf '%s + %s * s(%s / %s * 2 * (4 * a(1)))\n' $Y $r $step $steps | bc -l)
xte "mousemove ${new_x%%.*} ${new_y%%.*}"
if ! (( down ))
then
xte 'mousedown 1'
down=1
fi
done
xte 'mouseup 1'
xte "mousemove $X $Y"
Interestingly, you can abuse the scoring system (not manually, only with a script). Since the mouse jumps to the locations along the circle, you can just use very few steps and still get a great score because every step you make is very accurate ā but the result looks funny:
š„“
This is something for @movq@www.uninformativ.de and old OS hobbyists alike: FreeDOS 1.4! Get it while itās hot!
Regex Isnāt Hard - Tim Kellogg š this is a pretty good conscience article on regexes, and I agree, regex isnāt that hard⢠ā However I think I can make the TL;DR even shorter š
Regex core subset (portable across languages):
Character sets
⢠a matches āaā
⢠[a-z] any lowercase
⢠[a-zA-Z0-9] alphanumeric
⢠[^ab] any char but a or b
Repetition (applies to the preceding atom)
⢠? zero or one
⢠* zero or more
⢠+ one or more
Groups
⢠(ab)+ matches āabā, āababā, ā¦
⢠Capture for extract/substitute via $1 or \1
Operators
⢠foo|bar = foo or bar
⢠^ start anchor
⢠$ end anchor
Ignore nonāportable shortcuts: \w, ., {n}, *?, lookarounds.
#event:abc123 RSVP: yes +1
Hmmm thereās a bug somewhere in the way Iām ingesting archived feeds š¤
sqlite> select * from twts where content like 'The web is such garbage these days%';
hash = 37sjhla
feed_url = https://twtxt.net/user/prologic/twtxt.txt/1
content = The web is such garbage these days š Or is it the garbage search engines? š¤
created = 2024-11-14T01:53:46Z
created_dt = 2024-11-14 01:53:46
subject = #37sjhla
mentions = []
tags = []
links = []
sqlite>
@prologic@twtxt.net @bmallred@staystrong.run Ah, I just found this, didnāt see it before:
https://restic.net/#compatibility
So, yeah, they do use semver and, yes, theyāre not at 1.0.0 yet, so things might break on the next restic update ⦠but they āpromiseā to not break things too lightheartedly. Hm, well. š Probably doesnāt make a big difference (they donāt say ādonāt use this software until we reach 1.0.0ā).
AS136907 HWCLOUDS-AS-AP HUAWEI CLOUDS
@prologic@twtxt.net This shi_ is as fun as it is frustrating! š the bot is poking at me from a different ASN now, Alibabaās.
- Short term solution: Iāve geo-locked my Timeline instance since Iām the only one using it (and I only do so for reading twts when Iām away from terminal).
- Long term: I took a look at your Caddy WAF but couldnāt figure things out on my own; until then, Iāll be poking at Caddy-Defender, maybe throw in a Crowdsec for lols⦠#FUN
@david@collantes.us If I run
printf '%s\n%s\n%s' 'https://aelaraji.com/twtxt.txt' '2025-04-16T22:49:11+00:00' "Am I tripping or `rsync` is actually THIS effing faster than `scp`!!? š«Ø" | b2sum -l 256 | awk '{ print $1 }' | xxd -r -p | base32 | tr -d '=' | tr 'A-Z' 'a-z' | tail -c 8
I have xqfsv6a
. It is raw text
But⦠If I change de date to 2025-04-16T22:49:11Z
I have si4er3q
.
Even though I really do like the shell, I always use Dolphin to mount my digicam SD card and copy the photos onto my computer. I finally added a context menu item in Dolphin to create a forest stroll directory with the current date in order to save some typing:
The following goes in ~/.local/share/kservices5/ServiceMenus/galmkdir.desktop:
[Desktop Entry]
Type=Service
X-KDE-ServiceTypes=KonqPopupMenu/Plugin,inode/directory
Actions=Waldspaziergang;
[Desktop Action Waldspaziergang]
Name=Heutigen Waldspaziergang anlegenā¦
Icon=folder-green
Exec=~/src/gelbariab/galmkdir "%f"
In order to update the KDE desktop cache and make this action menu item available in Dolphin, I ran:
kbuildsycoca5
The referenced galmkdir
script looks like that:
#!/bin/sh
set -e
current_dir="$1"
if [ -z "$current_dir" ]; then
echo "Usage: $0 DIRECTORY" >&2
exit 1
fi
dir="$(kdialog \
--geometry 350x50 \
--title "Heutigen Waldspaziergang anlegen" \
--inputbox "Neues Verzeichnis in ā$current_dirā anlegen:" \
"waldspaziergang-$(date +%Y-%m-%d)")"
mkdir "$current_dir/$dir"
dolphin "$current_dir/$dir"
This solution is far from perfect, though. Ideally, Iād love to have it in the āCreate Newā menu instead of the āActionsā menu. But that doesnāt really work. I cannot define a default directory name, not to mention even a dynamic one with the current date. (I would have to update the .desktop file every day or so.) I also failed to create an empty directory. I somehow managed to create a directory with some other templates in it for some reason I do not really understand.
Letās see how that works out in the next days. If I like it, I might define a few more default directory names.
@andros@twtxt.andros.dev how often do you send a private message on the Fediverse? How often do you send PGP/SMIME encrypted emails? Are there other tools that are more suitable for the task? If implementing direct/private messages on twtxt
scratches an itch (you know, that hobbyist itch we all get from time to time), then donāt give up so easily. Worse comes to worse, and your feed becomes too noisy, people can simply unfollow/mute.
I really donāt care about direct messages here, but I might be on that bottom 1%!
Yeah same order of magnitude š No relation mice other than the recent study that precisely measured the number of cells and connections in 1 cubic mm of brain tissue.
AI problems, top to bottom:
1: Open AI nerds, believe fine tuning a language model algorithm, will eventually produce an AGI god.
2: Subpar artists and techbros who canāt code, convinced AI image bashing and vibe coding, will help convince the dumber parts of Internet, they are a real deal.
3: Parasites, using AI to scam people, because they just want passive income, selling crap, made by an automated process.
Side: Adobe&co, killing Flash/old web, pricing new artists and developers out, to face learning curves of free tools, or use AI, peddled as solution.
[47°09ā²52ā³S, 126°43ā²27ā³W] Raw reading: 0x67F966B2, offset +/-1
@anth@a.9srv.net Hahaha, for a second I thought that you implemented word splitting according to Swiss (.ch
) rules. :-D
Btw, both manpage links string(2)
and getields(2)
(itās missing an f
) point into nothingness: http://a.9srv.net/src/wordwrap.2.html
I canāt help but notice line 9: http://a.9srv.net/src/wordwrap.c
And I reckon your finger slipped one key to the right for quore
: http://a.9srv.net/src/litclock.1.html
Cool stuff! :-)
@prologic@twtxt.net Iām not sure if thatās an intended behaviour but twtxt.net
ās home page doesnāt load more than 13 twts, no more pagination/infinite scrollingā¦
Page 1/1 of 13 Twts
[47°09ā²52ā³S, 126°43ā²01ā³W] Reading: 1.36000 PPM
[47°09ā²07ā³S, 126°43ā²46ā³W] Reading: 1.67 Sv
hello friends i spent a couple hours today using a random string generator by charm CLI called hotdiva2000 to make a script that 1) generates a static index.html page 2) the page is a prompt generator where all the prompts are from hotdiva2000!!!!!
this makes more sense if you look at it check it out
@kat@yarn.girlonthemoon.xyz Itās very well hidden, it took me a while to find that. Go to āSettingsā in the menu bar up top ā āProfile and Privacyā (already selected) ā on the right at āUser Infoā ā ā1 Mutedā ā click the link with the minus in the circle at the message you want to unmute.
./yarnc debug <your feed url>
:
OH wait! š³ Why am I storing the timestamp as created = 2025-04-07T19:59:51Z
?! š± @movq@www.uninformativ.deās feed shows:
2025-04-07T19:59:51+00:00 I wonder if my current Linux installation will actually make it to 20 years:
$ head -n 1 /var/log/pacman.log
[2011-07-07 11:19] installed filesystem (2011.04-1)
Itās not toooo far into the future.
It would be crazy ⦠20 years without reinstalling once ⦠phew. š„“
Hmmmm
@movq@www.uninformativ.de Not according to the output of ./yarnc debug <your feed url>
:
znf6csa 2025-04-07T19:59:51+00:00 I wonder if my current Linux installation will actually make it to 20 years:
$ head -n 1 /var/log/pacman.log
[2011-07-07 11:19] installed filesystem (2011.04-1)
Itās not toooo far into the future.
It would be crazy ⦠20 years without reinstalling once ⦠phew. š„“
Doesnāt look like it Hmmm
sqlite> select * from twts where content LIKE '%Linux installation%';
hash = znf6csa
feed_url = https://www.uninformativ.de/twtxt.txt
content = I wonder if my current Linux installation will actually make it to 20 years:
$ head -n 1 /var/log/pacman.log
[2011-07-07 11:19] installed filesystem (2011.04-1)
Itās not toooo far into the future.
It would be crazy ⦠20 years without reinstalling once ⦠phew. š„“
created = 2025-04-07T19:59:51Z
subject = (#znf6csa)
mentions = []
tags = []
links = []