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 âŠ)
@prologic@twtxt.net Yes, this is another instance of restricting âpersonalâ computing. You wonât be able to install arbitrary software anymore (âsideloadingâ, as they call it).
Itâs not unique, itâs not new. Boiling the frog alive.
Weâre heading towards this: https://www.gnu.org/philosophy/right-to-read.html
#Pyxel is a retro inspired #GameEngine for #Python, itâs very impressive!
Itâs not hard to generate a static HTML page that loads your game to run on the browser with #pyodide (WASM). And it comes with an assets editor and a #chiptune making tool.
Please enjoy this horrible madness: https://userinyerface.com/game.html
In order to publish my personal projects/pages (and most of my teaching materials, hundreds of pages) on #Codeberg, I need to convert #markdown files into #HTML and sprinkle some CSS & JS from a layout template, like #GitHubâs Pages #Jekyll does, but I dread the complexity of installing and tending to Jekyll or Hugo or other static site generators, and I canât even imagine going near Forejo Actions or any sort of CI intergration.
Should I be brave and do the Jekyll /static generator thing? Any other ideas for poor, overworked, stressed out, clumsy people? :(
Okay, often times, these âemployer gimmicksâ are just silly, but this one did make me laugh:
A cargo train ripped off several hundred meters of catenary and during construction they found a WW2 bomb. If I had gone to the office today, I would not have made it home for two reasons. https://www.swr.de/swraktuell/baden-wuerttemberg/stuttgart/bombenfund-in-stuttgart-untertuerkheim-100.html
DeprecationWarning: 'mode' parameter is deprecated and will be removed in Pillow 13 (2026-10-15)
img1 = PIL.Image.fromarray(my_array, mode="RGB")
So I went to see the documentation:
https://hugovk-pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.fromarray
And came out empty handed, that is, couldnât understand what to do instead :(
And the plot thickens:
https://github.com/python-pillow/Pillow/pull/9063
(@py5coding I guess youâll want to check this out at some point. py5_tools.animated_gif uses this)
DeprecationWarning: 'mode' parameter is deprecated and will be removed in Pillow 13 (2026-10-15)
img1 = PIL.Image.fromarray(my_array, mode="RGB")
So I went to see the documentation:
https://hugovk-pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.fromarray
And came out empty handed, that is, couldnât understand what to do instead :(
And the plot thickens (this affects many projects, there are some workarounds, but some argument about ârevertingâ this change allowing some âmodeâ on import):
https://github.com/python-pillow/Pillow/pull/9063
(@py5coding@py5coding I guess youâll want to check this out at some point. py5_tools.animated_gif uses mode=âRGBâ)
#Pillow #PIL #Python
On Image.fromarray()
:
DeprecationWarning: 'mode' parameter is deprecated and will be removed in Pillow 13 (2026-10-15)
img1 = PIL.Image.fromarray(my_array, mode="RGB")
So I went to see the documentation:
https://hugovk-pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.fromarray
And came out empty handed, that is, couldnât understand what to do instead :(
And the plot thickens (this affects many projects, there are some workarounds, but some argument about ârevertingâ this change allowing some âmodeâ on import):
https://github.com/python-pillow/Pillow/pull/9063
(@py5coding@py5coding I guess youâll want to check this out at some point. py5_tools.animated_gif uses mode=âRGBâ)
@kat@yarn.girlonthemoon.xyz On the one hand, all these programs have a very long history and the technology behind manpages is actually very powerful â you can use it to write books:
https://www.troff.org/pubs.html
I have two books from that list, for example âThe UNIX programming environmentâ:
https://movq.de/v/c3dab75c97/upe.jpg
Itâs a bit older, of course, but it looks and feels like a normal book, and it uses the same tech as manpages â which I think is really cool. đ
Itâs comparable to LaTeX (just harder/different to use) but much faster than LaTeX. You can also do stuff like render manpages as a PDF (man -Tpdf cp >cp.pdf
) or as an HTML file (man -Thtml cp >cp.html
). I think I once made slides for a talk this way.
On the other hand, traditional manpages (i.e., ones that are not written in mandoc) do not use semantic markup. They literally say, âthis text is bold, that text over here is italicsâ, and so on.
So when you run man foo
, it has no other choice but to show it in black, white, bold, underline â showing it in color would be wrong, because thatâs not what the source code of that manpage says.
Colorizing them is a hack, to be honest. Youâre not meant to do this. (The devs actually broke this by accident recently. They themselves arenât really aware that people use colors.)
If mandoc and semantic markup was more commonly used, I think it would be easier to convince the devs to add proper customizable colors.
psst iâll be at my local event for HTML day!!! iâm very excited but very nervous, i donât even know what iâll be working on! but iâll figure it outâŠ
#GitHub #GitHubPages #fail This is driving me madâŠ
Images randomly deciding not to load on all my pages.
Is it just me? Is it my browserâs fault? Is it just in Brazil?
I was working on this #shapely + #trimesh page⊠and I can only see the last image (the animated gif)!
https://abav.lugaralgum.com/material-aulas/Processing-Python-py5/shapely-e-trimesh.html
#GitHub #GitHubPages #fail This is driving me madâŠ
Images randomly deciding not to load on all my pages.
Is it just me? Is it my browserâs fault? Is it just in Brazil?
I was working on this #shapely + #trimesh page⊠and I can only see the last image (the animated gif)!
https://abav.lugaralgum.com/material-aulas/Processing-Python-py5/shapely-e-trimesh.html
Update: On this exact page I have bungled the image URLs (I blame Marktext for being stupid and not using a relative reference). But I swear loading problems have been going on other well formed pages.
mandoc is nicer to read/write than the man
macro package and, most importantly, itâs semantic markup.
HTML output is a bit broken in GNU groff, though (OpenBSD on the left, GNU on the right):
https://movq.de/v/f1898e648f/s.png
đ€
Still, Iâm inclined to convert my manpages to mandoc.
@bender@twtxt.net I think itâs actually a new XEP proposal ( https://xmpp.org/extensions/xep-0084.html#proto-info ), but itâs still a bit unclear. Sorry for the late and vague response, Iâm still trying to test it and see what itâs even about, didnât yet find a server, that supports it.
In 1996, they came up with the X11 âSECURITYâ extension:
https://www.reddit.com/r/linux/comments/4w548u/what_is_up_with_the_x11_security_extension/
This is what could have (eventually) solved the security issues that weâre currently seeing with X11. Those issues are cited as one of the reasons for switching to Wayland.
That extension never took off. The person on reddit wonders why â I think itâs simple: Containers and sandboxes werenât a thing in 1996. It hardly mattered if X11 was âinsecureâ. If you could run an X11 client, you probably already had access to the machine and could just do all kinds of other nasty things.
Today, sandboxing is a thing. Today, this matters.
Iâve heard so many times that âX11 is beyond fixable, itâs hopeless.â I donât believe that. I believe that these problems are solveable with X11 and some devs have said âyeah, we could have kept working on itâ. Itâs that people donât want to do it:
Why not extend the X server?
Because for the first time we have a realistic chance of not having to do that.
https://wayland.freedesktop.org/faq.html
Iâm not in a position to judge the devs. Maybe the X.Org code really is so bad that you want to run away, screaming in horror. I donât know.
But all this was a choice. I donât buy the argument that we never would have gotten rid of things like core fonts.
All the toolkits and programs had to be ported to Wayland. A huge, still unfinished effort. If that was an acceptable thing to do, then it would have been acceptable to make an âX12â that keeps all the good things about X11, remains compatible where feasible, eliminates the problems, and requires some clients to be adjusted. (You could have still made âX11X12â like âXWaylandâ for actual legacy programs.)
@prologic@twtxt.net what a great world we live in! No wonder they marked this sector unoccupied.
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.
@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.
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?
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).
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.
@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.
@movq@www.uninformativ.de Willsch a bissle Eis schlotza? https://www.tagesschau.de/inland/regional/badenwuerttemberg/swr-schwere-hagelgewitter-weisse-strassen-in-sipplingen-100.html
âFor learning, #genAI is a forklift at the gym.â â @glyph@glyph
https://blog.glyph.im/2025/06/i-think-im-done-thinking-about-genai-for-now.html
Updating my âhow install and use #py5â pages, check them out if you want to â⊠draw and experiment some #CreativeCoding with #Python âŠâ
EN: https://abav.lugaralgum.com/como-instalar-py5/index-EN.html
ES: https://abav.lugaralgum.com/como-instalar-py5/index-ES.html
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.
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)
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.)
@kat@yarn.girlonthemoon.xyz uh, i use yandex mail which uses HTML by default
https://threadreaderapp.com/thread/1935344122103308748.html Interesting article on how ChatGPT is rotting your brain đ€Ł
@kat@yarn.girlonthemoon.xyz Ooh, Iâve got to bookmark that page. đ
@aelaraji@aelaraji.com I wish I had the luxury of not reading that junk. đ But instead, I have a Mutt hotkey that pipes an HTML mail through elinks ⊠Bah.
@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 ⊠đ€Ł
Come on, why is the bloody IBAN only in the damn HTML part of your e-mail but not in the plain text!? Grrr! Donât you wanna get paid, dealer!? Your new web shop system sucks so bad, I want the old version back.
fn sub(foo: &String) {
println!("We got this string: [{}]", foo);
}
fn main() {
// "Hello", 0x00, 0x00, "!"
let buf: [u8; 8] = [0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x00, 0x00, 0x21];
// Create a string from the byte array above, interpret as UTF-8, ignore decoding errors.
let lossy_unicode = String::from_utf8_lossy(&buf).to_string();
sub(&lossy_unicode);
}
Create a string from a byte array, but the result isnât a string, itâs a cow đź, so you need another to_string()
to convert your âstringâ into a string.
- https://doc.rust-lang.org/std/string/struct.String.html#method.from_utf8_lossy
- https://doc.rust-lang.org/std/borrow/enum.Cow.html
I still have a lot to learn.
(into_owned()
instead of to_string()
also works and makes more sense to me, itâs just that the compiler suggested to_string()
first, which led to this funny example.)
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? đ€šđ«©
Iâm now going to delete 7,336 old photos (previews, resized web versions and index.htmls) and reclaim 3.3 GiB disk space on my laptop.
submitted a workshop proposal for Algorithmic Pattern 2025, qiudanz technique: computational manipulation of minimalist movement sequences | https://compudanzas.net/algorithmic_pattern_2025_workshop_proposal.html
Having some fun with SIRDS this morning.
What you should see: https://movq.de/v/dae785e733/disp.png
And the tutorial I used for my C program: https://www.ime.usp.br/~otuyama/stereogram/basic/index.html
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
SuSE Linux 6.4 and Arachne on DOS also work (with Windows 2000 as a call target):
Ctrl+U
to the front or Ctrl+K
to the end puts it in a buffer that can be pasted by pressing Ctrl+Y
! That's neat. Even removing the last word with Ctrl+W
moves it into this paste buffer.
Aha! https://tiswww.cwru.edu/php/chet/readline/rluserman.html#Readline-Killing-Commands
I had a lot of fun with my modems these past few days:
https://www.uninformativ.de/blog/postings/2025-05-31/0/POSTING-en.html
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.
we participated in the If, Then: Technology and Poetics Open Mic, talking about the qiudanz technique | https://compudanzas.net/talks_and_workshops.html
@movq@www.uninformativ.de Regarding https://www.uninformativ.de/blog/postings/2025-05-21/0/POSTING-en.html: Hahaha, thatâs what I immediately thought, too! The pain of going back to CVS. :-D I used that back in school. Quickly after, I upgraded to SVN and even that was terrible in comparison to a modern VCS, such as git.
In any case, happy hacking!
Forgot to post these here: A bunch of Mandelbrot images using the trans, ace, and aro color palettes.
More and full res PNGs:
@kat@yarn.girlonthemoon.xyz Nothing wrong with handwritten HTML. Thatâs often superior to generated stuff I believe. :-)
i got so emo about my site not being statically generated and instead hand coded but itâs like i donât even know if i want that because i feel most SSGs are built for blogging and continuous posting and i donât want that i just want to make my silly pagesâŠ.
that being said, the one iâd use if i did switch to one would be astro and that one is so flexible i could really do anything with it including keeping my pages as is mostly without doing the blog stuff. idk! something to consider
I just have to say the buttons page gives me the warm fuzzies with all the old school animated gifs. The internet seemed so fun back thenâŠ
made the HTML for one of my static handwritten sites semantic!
Thanks, @movq@www.uninformativ.de! That seems to be much easier. Itâs already implemented in the Python docs as examples of recvmsg(âŠ)
and sendmsg(âŠ)
:
- https://docs.python.org/3/library/socket.html#socket.socket.recvmsg
- https://docs.python.org/3/library/socket.html#socket.socket.sendmsg
I looked at them sooo many times in order to figure out why my SCM_CREDENTIALS
sending code didnât work. :-D
@prologic@twtxt.net ah thatâs alright! the banner is just for fun :] it might be easier to skip to the comments with this link if you want (itâs in the site view mode rather than my pageâs theme) https://luckyzukky.dreamwidth.org/98451.html?style=site#comments
@prologic@twtxt.net yeah, the post is here! you can check the comments to see my friends and i talking and stuff itâs so fun https://luckyzukky.dreamwidth.org/98451.html
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. đ€Ș)
So, the âAIâ bots have reached my website. Looks like theyâre just slowly crawling everything at the moment â no DDoS-like attack yet. I wonder if that has something to do with my website being 100% static HTML. There are no GET parameters they can tweak and, at the end of the day, thereâs not that much data on my server anyway ⊠And maybe they have no idea what stagit is, so it doesnât trigger âstandard behaviorâ, like âthis is a Gitea instance, letâs crawl this like crazy!â?
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
We have 4 clients but this should be 6 I believe with tt2
from @lyse@lyse.isobeef.org and Twtxtory from @javivf@adn.org.es?
Nobody writes emails by hand using RFC 5322 anymore, nor do we manually send them through telnet and SMTP commands. The days of crafting emails in raw format and dialing into servers are long gone. Modern email clients and services handle it all seamlessly in the background, making email easier than ever to send and receiveâwithout needing to understand the protocols or formats behind it! #Email #SMTP #RFC #Automation
@lyse@lyse.isobeef.org haha, not satire. It is also in Mark Twainâs âHuckleberry Finnâ as well:
âIf fifteen cows is browsing on a hillside, how many of them eats with their heads pointed the same direction?â
âThe whole fifteen, mum.â
dm-only.txt
feeds. đ
by commenting out DMs are you giving up on simplicity? See the Metadata extension holding the data inside comments, as the client doesnât need to show it inside the timeline.
I donât think that commenting out DMs as we are doing for metadata is giving up on simplicity (itâs a feature already), and it helps to hide unwanted DMs to clients that will take months to add itâs support to something named⊠an extension.
For some other extensions in https://twtxt.dev/extensions.html (for example the reply-to hash #abcdfeg
or the mention @ < example http://example.org/twtxt.txt >
) is not a big deal. The twt is still understandable in plain text.
For DM, itâs only interesting for you if you are the recipient, otherwise you see an scrambled message like 1234567890abcdef=
. Even if you see it, youâll need some decryption to read it. Iâve said before that DMs shouldnât be in the same section that the timeline as itâs confusing.
So my point stands, and as Iâve said before, we are discussing it as a community, so letâs see what other maintainers add to the convo.
This is something for @movq@www.uninformativ.de and old OS hobbyists alike: FreeDOS 1.4! Get it while itâs hot!
âThe Treeââą in last winter:
Now itâs getting greener:
we now have a first 88x31 banner! | https://compudanzas.net/colophon.html
i feel so powerful i wrote a 3 line script that takes an inputted markdown filename from the current working directory and then spits out a nicely formatted html page. pandoc does all the work i did nothing
jenny really isnât well equipped to handle edits of my own twts.
For example, in 2021, this change got introduced:
https://www.uninformativ.de/git/jenny/commit/6b5b25a542c2dd46c002ec5a422137275febc5a1.html
This means that jenny will always ignore my own edits unless I also manually edit its internal âjson databaseâ. Annoying.
That change was requested by a user who had the habit of deleting twts or moving them to another mailbox or something. I think that person is long gone and I might revert that change. đ€
si4er3q
. See https://twtxt.dev/exts/twt-hash.html, a timezone offset of +00:00
or -00:00
must be replaced by Z
.
just a note that we are doing that on PHP: https://github.com/eapl-gemugami/twtxt-php/blob/master/docs/03-hash-extension.md#php-72
That PHP snippet could be merged into https://twtxt.dev/exts/twt-hash.html
@david@collantes.us @andros@twtxt.andros.dev The correct hash would be si4er3q
. See https://twtxt.dev/exts/twt-hash.html, a timezone offset of +00:00
or -00:00
must be replaced by Z
.
(That said, thereâs a bug in jenny as well. It only replaces +00:00
, not -00:00
. đ€Ą)
@eapl.me@eapl.me This is one of my concerns too. The moment you post publicly ciphertext, you open yourself up for future attacks on the ciphertext, which you really want to avoid if you can. If you have a read of the Salty.im Spec youâll note we went to great lengths to protect the userâs privacy as well as their identity and make it incredibly hard to guess at inboxes. Itâs still a WIP, but Iâd love to see it progressed even further â I truly feel strongly about a purely decentralised messaging ecosystem đ
ÂżcĂłmo diseñarĂas un procedimiento para sumar dos nĂșmeros, optimizĂĄndolo para ser [inserte opciĂłn]? | https://compudanzas.net/optimizaciones.html
well, I suggested that in https://eapl.me/timeline/conv/k2ob6bq
The idea was to help those following the spec in https://twtxt.dev/exts/directmessage.Html, to replicate the steps and validate whether your implementation gives the same result.
BTW, you could add a link to the spec in the echo web.
@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! :-)
I updated wordwrap.[ch] to more closely match the interface for string(2); itâs now just that plus a margin. I also updated litclock and marquee to match. http://a.9srv.net/src/index.html
Thatâs a dang cool story from Apollo 11 where priority queues saved the day: https://www.nasa.gov/history/alsj/a11/a11.1201-fm.html
@kat@yarn.girlonthemoon.xyz these are my little SSH services by the way - a git server and then some fun stuff!
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
@thecanine@twtxt.net contribution mine:
âAny art I posted here, can be found through my (now almostâthanks to @lyse@lyse.isobeef.orgâentirely HTML 5 complient) website.â
@prologic@twtxt.net itâs fine, I never expected my yeets, to be preserved for future generations. Any art I posted here, can be found through my (now almost entirely HTML 5 complient) website.
@kat@yarn.girlonthemoon.xyz I am sure @prologic@twtxt.net would not mind sending an invite. Ping him!
This is sooo cool, it reminds me of learning QBasic (and then Visual Basic) in the 90s
Easylang story
https://easylang.online/apps/story.html
@bender@twtxt.net I was a bit confused at first what that is: Apparently, itâs the source code of Altair BASIC: https://gizmonaut.net/soapflakes/EXE-199711.html
(Of course they have a user agent filter. đ Canât download that PDF with wget.)
created a page positioning ourselves against âgenerative AIâ | https://compudanzas.net/ai.html
@thecanine@twtxt.net My apologies, mate! :-( As @david@collantes.us pointed out, this was definitely not my intent at all.
For the easter egg hunt, I first looked for a hidden image map link on the pixel dog in the right lower corner itself. Maybe one giant pixel just links to somewhere else, I figured. But I couldnât find any and then quickly moved on. Hence, I naturally viewed the HTML source. Because where else would be a good hiding place for easter eggs, right?
Next, I noticed the <font>
tags. I thought I had read quite some time ago that they are not an HTML5 thing, but wasnât entirely sure about it. So, I asked the W3C HTML validator. Sure enough. I thought I let you know about the violations. If somebody had found a mistake on my site, Iâd love to hear about it, so I could fix it. Iâm sorry that my chosen form of report didnât resonate with you all that well. I reckoned youâll also find it a bit funny, but I was clearly very wrong on that.
I actually followed the dog cow link to the video, so I ended up on the easter egg. However, I didnât recognize it as such. ÂŻ_(ă)_/ÂŻ Oh well.
Regarding my message about the browser quirks: I read your answer that you were arguing against the HTML validator findings. Of course, everybody can do with their sites whatever they likes.
somehow I forgot that existed.
Perhaps it was its mention of being a demo implementation here:
https://twtxt.readthedocs.io/en/latest/user/registry.html#registry
So I though it wasnât really active.
Anyway, I think thatâs a good idea.
Is there something similar available on Yarn? Sorry for for asking if that was mentioned recently.
I think that the clients may help you to submit your URL to these directories, and also to get a view of the twts in them.
I lost my original Windows 95 CD (and itâs too expensive for my taste to buy on eBay), so I finally sat down and got an old disk image of one of my PCs to work in QEMU.
I donât intend to do much with Win95. I just want to be able to boot it, if I want to check how certain things worked or looked in that version. The purpose of this really is to be an archeological digsite.
@andros@twtxt.andros.dev Can you reproduce any of this outside of your client? I canât spot a mistake here:
$ curl -sI 'http://movq.de/v/8684c7d264/.html%2Dindex%2Dthumb%2Dgimp11%2D1.png.jpg'
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 2615
Content-Type: image/jpeg
Date: Wed, 19 Mar 2025 19:53:17 GMT
Last-Modified: Wed, 19 Mar 2025 17:34:08 GMT
Server: OpenBSD httpd
$ curl -sI 'https://movq.de/v/8684c7d264/gimp11%2D1.png'
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 131798
Content-Type: image/png
Date: Wed, 19 Mar 2025 19:53:19 GMT
Last-Modified: Wed, 19 Mar 2025 17:18:07 GMT
Server: OpenBSD httpd
$ telnet movq.de 80
Trying 185.162.249.140...
Connected to movq.de.
Escape character is '^]'.
HEAD /v/8684c7d264/.html%2Dindex%2Dthumb%2Dgimp11%2D1.png.jpg HTTP/1.1
Host: movq.de
Connection: close
HTTP/1.1 200 OK
Connection: close
Content-Length: 2615
Content-Type: image/jpeg
Date: Wed, 19 Mar 2025 19:53:31 GMT
Last-Modified: Wed, 19 Mar 2025 17:34:08 GMT
Server: OpenBSD httpd
Connection closed by foreign host.
$
@kat@yarn.girlonthemoon.xyz Itâs there, but yarndâs markdown library probably thinks that itâs some broken HTML and swallows it, not sure.
Iâd like to know more about what andros and prologic are talking about, I feel lost.
âThis will be managed by Registries.â Are we talking about these registries?
https://twtxt.readthedocs.io/en/latest/user/registry.html
@bmallred@staystrong.run Any edit automatically changes the twt hash, because the hash is built over the hash URL, message timestamp and message text. https://twtxt.dev/exts/twt-hash.html So, it is only a problem, if somebody replied to your original message with the old hash. The original message suddenly doesnât exist anymore and the reply becomes detached, orphaned, whatever you wanna call it. Threading doesnât break, though, if nobody replied to your message.
@movq@www.uninformativ.de I could show you some places here, in MeckPomm.
You may also want to renovate an old abandoned manor!?
also @Andros, I see that if I open that URL on my browser, I see weird characters in the .txt
file:
description = ðƞÂâ
Perhaps your nginx server is missing a Content-Type: text/html; charset=utf-8
header?
https://serverfault.com/a/975289
In timeline
it looks OK however, I think itâs relying on
The file must be encoded with UTF-8
of the original spec:
https://twtxt.readthedocs.io/en/latest/user/twtxtfile.html
To me it appeared that the failed attempts to ban NPD in the past actually helped them gain more supporters.
What makes AfD stronger for sure is just going âlol nah weâre not even going to tryâ:
https://www.tagesschau.de/inland/innenpolitik/afd-verbot-antrag-100.html
If they donât try, then it means that âit canât be that bad, itâs just a normal partyâ, right? đĄ
Du brauchst schon fast keine AfD mehr, wenn du Medien (ĂR!) hast, die so die Interviews fĂŒhren: https://www.deutschlandfunk.de/interview-mit-bodo-ramelow-linke-ex-ministerpraesident-thueringen-zur-wahl-100.html
@eapl.me@eapl.me @andros@twtxt.andros.dev Eureka! It works! https://github.com/upputter/testing-twtxt-dm
PBKDF2_KEY_SIZE = 48
was the turning point! My dirty little crypt.class.php
can en- and decrypt, accoridng to the OpenSSL standard and options used in https://twtxt.dev/exts/direct-message.html
Today is an important day. We have a new extension: Direct message đȘđšïžđđ„łâ€ïž
https://twtxt.dev/exts/direct-message.html
#twtxt