@bender@twtxt.net @ionores@twtxt.net Yep, itâs extremely seldom that a photo turns out looking better than reality. Very rarely does that happen. But basically never with sunsets. ;-) Maybe once a leap year Iâm very surprised to wonder how that subject wasnât better in person but actually on film.
MacSSL: a port of Mbed-TLS for the classic Mac OS 7/8/9
Yesterday we had SDL2 for the classic Mac OS, today we have modern SSL/TLS for the classic Mac OS. This is a C89/C90 port of MbedTLS for Mac System 7/8/9. It works, and compiles under Metrowerks Codewarrior Pro 4. This is a basic app that performs a GET request on whatever is in api.h, and prints the result out to the text box (with a lot of debug information, of course). The idea of this project was to build an âappâ of ⊠â Read more
SDL2 ported to Mac OS 9
Well, this you certainly donât see every day. This is a ârough draftâ of SDL2 for MacOS 9, using CodeWarrior Pro 6 and 7. Enough was done to get it building in CW, and the start of a âmacosclassicâ video driver was created. It DOES seem to basically work, but much still needs to be done. Event handling is just enough to handling Command-Q, there is no audio, etc etc etc. â« A cast of thousands The hardest part was a video driver for the classic Mac OS, which had to be created mostly f ⊠â Read more
SqliteCache backend I'm working on here, what are your thoughts regarding mgirations from old MemoryCache (which is now gone in the codebase in this branch). Do you care to migrate at all, or just let the pod re-fetch all feeds? đ€
@abucci@anthony.buc.ci Apologies, the basic summary is as follows:
- Decided to rewrite the cache backend.
- It will now be a SQLite backend going forward.
- Iâm planning on no data migration.
oh out of boredom yesterday i made my blog available via markdown files too so you can use charmbracelet/glow to read them in your terminal :)
basically i just set up a file directory on a path of my blog, organized the MD files by year, and so in theory you can navigate to that path and choose a folder, then copy a link to a markdown post and run this:
glow -p https://bubblegum.girlonthemoon.xyz/md/2025/2025-03-31%20premature%20reflections%20on%20sudden%20responsibility.md
and then as long as you have glow installed, you can read my posts from the terminal :D itâs so cool
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.)
Hi, So i made a little MVP registry crawler tool for twtxt. It now has a basic UI to play with. It has a somewhat full history back to about 2018-ish. Plus some interesting bits that were timestamped to earlier.
Find it here: https://watcher.sour.is
Code base is found here: https://git.sour.is/sour-is/xt
In Mexico you couldnât register the word Sonora (state), nor Taqueria (kind of restaurant) as there are two common words, but perhaps the combination of both is trademarkable, Iâm not sure, so many âtaqueriasâ here donât file a trademark request. Itâs usually âTaquerĂa [LAST_NAME]â or âTaquerĂa [PLACE]â.
At the same time, the word âtaqueriaâ was trademarked in UK, like it would be âParisâ or âPubâ I guess, so basically Sonora Taqueria didnât reply to the cease and desist, based on:
[Lizbeth GarcĂa]: A brand may not use a word that is generic or descriptive of the products or services it is putting into circulation on the market.
Since he (Ismael, Taqueriaâs representative) didnât get any response, he decided to leave it in the hands of his law firm.
In early 2023, after all the noise on the internet and the mobilization caused by this case, an agreement was finally reached with TaquerĂa to settle the matter peaceably.
In March 2023, Michelle and Sam decided to register the Sonora TaquerĂa brand and logo with the UK Intellectual Property Office.
(I didnât submit a proposal of my own, because it would basically just be a duplicate of another one. đ )
Anyone interested in the PicoCalc? https://www.clockworkpi.com/product-page/picocalc #basic
Perfect!

I now also implemented basic replying by hitting a as in answering. Whatâs missing is automatically adding mentions in the message text template. Thatâs gonna be a bit more tricky, though.
tt.) Now, this is the second attempt in tt2.
Righto, now with added basic subject support. Hopefully!
i really wanna learn golang it looks fun and capable and i can read it kind of but every time i try it iâm immediately stuck on basic concepts like âwhat the fuck is a pointerâ (this has been explained to me and i still donât get it). i did have types explained to me as like notes on code which makes sense a bit but iâm mostly lost on basic code concepts
@eapl.me@eapl.me @bender@twtxt.net @prologic@twtxt.net Not including a photo was a stupid move, sorry. There you go:

This particular one is 95mm wide and 185mm high. Fairly compact.
I can only use it figure out distances to other dates and to do some basic calendar math. Iâm not able to actually schedule anything. But I grew up with a month calendar like you have there where all appointments of the entire family was recorded.
By far most of my paper use is drawing random stuff on scratch paper during meetings. :-D

@thecanine@twtxt.net I donât mind the FUTO keyboard either but it is pretty basic. Going to have to try out helio
Microsoft improves Windows 11âs Start menu somewhat
Microsoft seems to be addressing some of the oddities with the Windows 11 Start menu, finally adding basic views that shouldâve been in Windows 11 since the very start. Weâre introducing two new views to the âAllâ page in the Start menu: grid and category view. Grid and list view shows your apps in alphabetical order and category view groups all your apps into categories, ordered by usage. This change is gradually rolling out so ⊠â Read more
@prologic@twtxt.net Tolerant yes, but in the right places. This is just encouraging people to not properly care. The extreme end is HTML where parsers basically accept any input. Iâm not a fan of that. Whatever.
@andros@twtxt.andros.dev I suggest to not touch it and work on a different project instead. :-D
No, in all seriousness, thatâs a tough one. Try to figure out the requirements and write tests to cover them. In my experience, if there is no good documention, tests might also be lacking. It goes without saying that you have to understand the code segments first before you can begin to refactor them. Commit even earlier and more often than usual, this will help you bisecting potentially introduced bugs later on. Basically baby steps.
But it also depends on the amount of refactoring required. Maybe just scrap it entirely and start from scratch. This might not be feasible due to e.g. the overall project size, though.
The GNU Guix System
GNU Guix is a package manager for GNU/Linux systems. It is designed to give users more control over their general-purpose and specialized computing environments, and make these easier to reproduce over time and deploy to one or many devices. â« GNU Guix website Guix is basically GNUâs approach to a reproducible, functional package manager, very similar to Nix because, well, itâs based on Nix. GNU also has a Linux distribution built around Nix, the GNU Guix System, which is fully âlibreâ as al ⊠â Read more
@arne@uplegger.eu Ohjemine, TYPO3! O_o Lass mich schreiend davonlaufen!
Mit dieser absoluten Katastrophensoftware vor dem Herrn haben wir mal ein Studienprojekt gemacht. Die hat alle Vorurteile komplett ĂŒbererfĂŒllt. Angefangen von Fehlerseiten, die statt 4xx oder dergleichen immer mit HTTP 200 ausgeliefert wurden oder auch, dass das generierte HTML leider einfach ungĂŒltig war. Ăber die Implementierung von Löschen durch einen Deleted-Schalter in der Datenbank, das Speichern von Passwörtern im Klartext bis hin zu völlig umstĂ€ndlichen Bedienungskonzepten. Alles hat immer brutal viele Schritte gebraucht. Das Zeilennummernrumgeeier im TYPO-Script erinnerte eher an Basic. Uns kam es auch so vor, als ob man damit nicht ernsthaft was sinnvolles machen könnte.
Zu allem Ăberfluss hatte irgendwer noch ein ganz hundsmiserables Buch ausgegraben, das als Vorbereitung dienen sollte. Ich kann mich zum GlĂŒck weder an den Titel noch den Autor erinnern, aber ich weiĂ noch, wie das komplett inkonsistent geschrieben war. Anfangs gabs mehrere Seiten zu Unicode und UTF-8 wurde angepriesen, aber alle Beispiele haben dann auf ISO-8859-1 gesetzt. Gezeigter Beispielcode war hĂ€ufig unterste Schublade. Selten hab ich so merkwĂŒrdige ErklĂ€rungen gelesen: âWenn Sie die Sicherheitswarnhinweise stören, kommentieren Sie doch bitte im Quelltext die die()-Funktion in $ZEILE aus.â Oder ein anderer Klassiker: âAusgeschrieben wĂŒrde der Code wohl folgendes tunâŠâ. War sich der Autor also nicht ganz sicher, ob sein Codeschnipsel vllt. doch in Wahrheit was ganz anderes tut.
Seit diesem gigantischen Trauma (das hat mich wirklich sehr nachhaltig geprÀgt, wie man Dinge nicht machen sollte) hab ich erfolgreich einen Bogen um das TYPO3-Universum gemacht.
Ich kann nur hoffen, dass es zwischenzeitlich ein wenig besser geworden ist. Aber Deinem Kurzbericht zufolge scheint da ja immer noch der Wurm drin zu sein. Mein Beileid! :-(
For many years I have found Flask to be too basic a tool for modern development. But since I create APIs using Flask with Pydantic to validate the input data, some middlewares for parsing and Blueprint to separate the code into modules⊠I must admit that I am super comfortable, fast and easy to test.
#flask #python #pydantic
Android 16 Beta 1 has started rolling out for Pixel devices
Basically, this seems to mean applications will no longer be allowed to limit themselves to phone size when running on devices with larger screens, like tablets. Other tidbits in this first beta include predictive back support for 3-button navigation, support for the Advanced Professional Video codec from Samsung, among other things. Itâs still quite early in the release process, so more is sure to come, and some ⊠â Read more
I made a draft of an âencrypted public messengerâ, which was basically a Feed for an address derivate from the public ket, letâs say âabcd..eaeaâ
Anyone could check, âare there any messages for my address?â and you get a whole list of timestamps and encrypted stuff.
Inside the encrypted message is a signature from the sender. That way you âcouldâ block spam.
Only the owner of the private key could see who sent what, and soâŠ
And even with that my concussion was that users expectations for a private IM might be far away from my experiment.
@andros@twtxt.andros.dev Nope, unfortunately not. I took a look at Lisp last year (I think I used sbcl), but I havenât done anything really useful with it. I still want to give it a proper go some time in the future. I do like how flexible it can be. Rather simple, but powerful basic concepts.
Whatâs your favorite dialect?
@prologic@twtxt.net they post pretty frequently yeah, new articles like every other day basically
@kat@yarn.girlonthemoon.xyz To improve you shell programming skills, I highly recommend to check out shellcheck: https://github.com/koalaman/shellcheck It points out common errors and gives some suggestions on how to improve the code. Some details in shell scripting are very tricky to get right at first. Even after decades of shell programming, I run into âcorner casesâ every now and then.
E.g. in getlyrâs line 7 it warns:
echo -e $(gum style --italic --foreground "#f4b8e4" "'$artist', '$song'")
^-- SC2046: Quote this to prevent word splitting.
For more information:
https://www.shellcheck.net/wiki/SC2046 -- Quote this to prevent word splitt...
Most likely not all that problematic in this application, but itâs good to know about this underlying concept. Word splitting is basically splitting tokens on whitespace, this can lead to interesting consequences as illustrated by this little code:
$ echo $(echo "Hello World")
Hello World
$ echo "$(echo "Hello World")"
Hello World
In the first case the shells sees two whitespace-separated tokens or arguments for the echo command. This basically becomes echo Hello World. So, echo joins them by a single space. In the second one it sees one argument for the echo command, so echo simply echos this single argument that contains three spaces.
@kat@yarn.girlonthemoon.xyz definitely a fun way to get better at bash scripting by hand (AKA learn how it works besides the extreme basics i know) and use gum to make them cute too
For some reason, I was using calc all this time. I mean, itâs good, but I need to do base conversions (dec, hex, bin) very often and you have to type base(2) or base(16) in calc to do that. Thatâs exhausting after a while.
So I now replaced calc with a little Python script which always prints the results in dec/hex/bin, grouped in bytes (if the result is an integer). Thatâs what I need. Itâs basically just a loop around Pythonâs exec().
$ mcalc
> 123
123 0x[7b] 0b[01111011]
> 1234
1234 0x[04 d2] 0b[00000100 11010010]
> 0x7C00 + 0x3F + 512
32319 0x[7e 3f] 0b[01111110 00111111]
> a = 10; b = 0x2b; c = 0b1100101
10 0x[0a] 0b[00001010]
> a + b + 3 * c
356 0x[01 64] 0b[00000001 01100100]
> 2**32 - 1
4294967295 0x[ff ff ff ff] 0b[11111111 11111111 11111111 11111111]
> 4 * atan(1)
3.141592653589793
> cos(pi)
-1.0
Scientists to explore life creation from basic chemicals + 2 more stories
European scientists launch MiniLife project to create lab-made life, companies in Australia start mandatory climate disclosures, and discontent shapes global elections as incumbents lose votes. â Read more
Okay, this is pretty cool. My 8086 toy OS running on my old Pentium from an actual floppy disk. đ I just love that sound and the feeling of using floppies. This brings back so many memories from my early DOS days.
The cp-unopt program copies a file and intentionally uses small unaligned reads/writes (hopefully triggers more bugs).
The I/O cache works âokay-ishâ, I guess. When sha1 runs, it has to do a few reads for the first file and basically none for the second one. Both could have been served entirely from the cache, theoretically. (But even just having an I/O cache in the first place speeds up things dramatically.)
Notice how thereâs an EA file. Thatâs a left-over from OS/2, because I copied some files to the floppy using OS/2. In other words, my FAT12 implementation survives OS/2 writing to it. đ„ł (But I guess it should show up as EA DATA.SF. My current code starts at the left and stops at the first space.)
https://movq.de/v/d4d50d3c74/los86-on-p133-from-floppy-small2.mp4
Made a little text editor for my 8086 toy operating system today. It canât do much, but it allows for some basic editing. đŸ
That was probably the last âbigâ thing I did for that OS in the near future. Vacation is coming to an end.
After taking a short break for Christmas business, Iâve worked on my little toy operating system for the 8086 again.
It understands the basics of FAT12 now. Iâve actually never sat down before to learn how FAT works. đ€Š Well, better late than never, I guess.
It canât do subdirectories nor timestamps and I probably wonât implement that. One flat directory is good enough for my purposes and the OS has no notion of time, yet, anyway.
Itâs really cool to be able to exchange files with the Linux host or other DOS VMs. đ„ł
@movq@www.uninformativ.de Absolutely! Truly amazing work and excellent explanations.
Iâm pretty sure they didnât tell us this in school either.
I donât remember what topic it was, but some of the maths lectures at uni were heaps better in linking several matters together. In school we were always told: And now for something completely different, we start a new topic, so when you kids havenât understood the previous one, worry not, now you got the chance to maybe get this one and improve your maths grade. Only at uni we were actually taught that itâs in fact basically exactely the same thing as something else, just with some slightly tweaked rules. If I only were told this a decade earlier or so. It would have made stuff sooo much easier.
haha, thatâs gold xD.
#randomMemory I remember when I was starting to code, like 30 years ago, not understanding why my Basic file didnât run when I renamed it to .exe
And nowadays, Iâve seen a few Go apps in a single executable, so twtxt.exe could be a thing, he!
Micropub test of creating a basic h-entry
@prologic@twtxt.net sure! I donât know if this is what you need but, let me give it a try.
- I have Timeline installed, which has an endpoint to process #webmentions. Mine for example is
https://aelaraji.com/timeline/webmentionwhich you can find by queryinghttps://aelaraji.com/.well-known/webfinger.
- If you mention someone from #Timeline itself, it takes care of querying that and sending in the mention for you.
- Otherwise (what I personally do) you could just:
curl -i -d 'source=https://twtxt.net/user/prologic/twtxt.txt#:~:text=2024-12-09T01:22:37Z' -d 'target=https://aelaraji.com/twtxt.txt' https://aelaraji.com/timeline/webmention
basically what @sorenpeter@darch.dk mentioned in his article Here.
Afterwards, the mentions are stored in their own mentions.txt feed. The one from the example above looks like this on my Timeline :

Feel free to spam my endpoint if youâd like to give things a try. đ
[P.S: personally, I donât seem to get the mentions if I add the Text fragment part to my target]
@skinshafi@thunix.net You might want to consider adding basic caching support:
⊠returned 200 but no Last-Modified header - canât cache content
Righto, @eapl.me@eapl.me, ta for the writeup. Here we go. :-)
Metadata on individual twts are too much for me. I do like the simplicity of the current spec. But I understand where youâre coming from.
Numbering twts in a feed is basically the attempt of generating message IDs. Itâs an interesting idea, but I reckon it is not even needed. Iâd simply use location based addressing (feed URL + â#â + timestamp) instead of content addressing. If one really wanted to, one could hash the feed URL and timestamp, but the raw form would actually improve disoverability and would not even require a richer client. But the majority of twtxt users in the last poll wanted to stick with content addressing.
yarnd actually sends If-Modified-Since request headers. Not only can I observe heaps of 304 responses for yarnds in my access log, but in Cache.FetchFeeds(âŠ) we can actually see If-Modified-Since being deployed when the feed has been retrieved with a Last-Modified response header before: https://git.mills.io/yarnsocial/yarn/src/commit/98eee5124ae425deb825fb5f8788a0773ec5bdd0/internal/cache.go#L1278
Turns out etags with If-None-Match are only supported when yarnd serves avatars (https://git.mills.io/yarnsocial/yarn/src/commit/98eee5124ae425deb825fb5f8788a0773ec5bdd0/internal/handlers.go#L158) and media uploads (https://git.mills.io/yarnsocial/yarn/src/commit/98eee5124ae425deb825fb5f8788a0773ec5bdd0/internal/media_handlers.go#L71). However, it ignores possible etags when fetching feeds.
I donât understand how the discovery URLs should work to replace the User-Agent header in HTTP(S) requests. Do you mind to elaborate?
Different protocols are basically just a client thing.
I reckon itâs best to just avoid mixing several languages in one feed in the first place. Personally, I find it okay to occasionally write messages in other languages, but if that happens on a more regularly basis, Iâd definitely create a different feed for other languages.
Isnât the emoji thing âjustâ a client feature? So, feed do not even have to state any emojis. As a user Iâd configure my client to use a certain symbol for feed ABC. Currently, I can do a similar thing in tt where I assign colors to feeds. On the other hand, what if a user wants to control what symbol should be displayed, similar to the feedâs nick? Hmm. But still, my terminal font doesnât even render most of emojis. So, Unicode boxes everywhere. This makes me think it should actually be a only client feature.
its offline atm, but my usual setup basically makes my xmpp server into a bouncer (biboumi) and my xmpp client just does its normal thing to read the irc backlog as server-side message history.
@prologic@twtxt.net I like the, allegedly, original:
âIt can scarcely be denied that the supreme goal of all theory is to make the irreducible basic elements as simple and as few as possible without having to surrender the adequate representation of a single datum of experience.â
Not as simple as the interpretation you used, yet often context is king (or queen).
(#2024-09-24T12:39:32Z) @prologic@twtxt.net It might be simple for you to run echo -e "\t\t" | sha256sum | base64, but for people who are not comfortable in a terminal and got their dev env set up, then that is magic, compared to the simplicity of just copy/pasting what you see in a textfile into another textfile â Basically what @movq@www.uninformativ.de also said. Iâm also on team extreme minimalism, otherwise we could just use mastodon etc. Replacing line-breaks with a tab would also make it easier to handwrite your twtxt. You donât have to hardwrite it, but at least you should have the option to. Just as i do with all my HTML and CSS.
#fzf is the new emacs: a tool with a simple purpose that has evolved to include an #email client. https://sr.ht/~rakoo/omail/
Iâm being a little silly, of course. fzf doesnât actually check your email, but it appears to be basically the whole user interface for that mail program, with #mblaze wrangling the emails.
Iâve been thinking about how I handle my email, and am tempted to make something similar. (When I originally saw this linked the author was presenting it as an example tweaked to their own needs, encouraging people to make their own.)
This approach could surely also be combined with #jenny, taking the place of (neo)mutt. For example mblazeâs mthread tool presents a threaded discussion with indentation.
@xuu@txt.sour.is I think it is more tricky than that.
âA company or entity âŠâ
Also, as I understand it, âpersonal or household activityâ (as you called it) is rather strict: An example could be you uploading photos to a webspace behind HTTP basic auth and sending that link to a friend. So, yes, a webserver is involved and you process your friendâs data (e.g., when did he access your files), but itâs just between you and him. But if you were to publish these photos publicly on a webserver that anyone can access, then itâs a different story â even though you could say that âthis is just my personal hobby, not related to any job or moneyâ.
If you operate a public Yarn pod and if you accept registrations from other users, then Iâm pretty sure the GDPR applies. đ€ You process personal data and you donât really know these people. Itâs not a personal/private thing anymore.
Iâm bad with faces, I know that. But Iâm having a really hard time recognizing Linus in this video:
https://www.youtube.com/watch?v=4WCTGycBceg
Basically a different person to me. Is it just me or has he really changed that much? đł
i feel like we should isolate a subset of markdown that makes sense and built it into lextwt. it already has support for links and images. maybe basic formatting bold, italic. possibly block quote and bullet lists. no tables or footnotes
@prologic@twtxt.net the basic idea was to stem the hash.. so you have a hash abcdef0123456789... any sub string of that hash after the first 6 will match. so abcdef, abcdef012, abcdef0123456 all match the same. on the case of a collision i think we decided on matching the newest since we archive off older threads anyway. the third rule was about growing the minimum hash size after some threshold of collisions were detected.
So.. basically a rehash of the email âunsendâ requests? What if i was to make a (delete: 5vbi2ea) .. would it delete someone elses twt?
So yeah no, whilst it technically works, neither jenny nor yarnd support it very well. Only at a very basic level.
# follow_notify = gemini://foo/bar to your feedâs metadata, so that clients who follow you can ping that URL every now and then? How would you even notice that, do you regularly read your gemini logs? đ€
@movq@www.uninformativ.de Damn! Iâm two years late to the discussion đ
So basically, one could just make a bash script/cron job on the side for pinging non-Http feeds from time to time and the receiving end would get it IF they check their logs.