@prologic@twtxt.net I know, I am feeling sentimental. After all the bending done today, a bender needs to find solace in the little things, right?
Agreed. One thing I’m not sure if I can do is reuse the native font-size / accessibility stuff. I’ll have to look into whether that’s exposed to PWA(s) at all. 🤔
@balloon-fu-sen@tw.fus.f5.si Thank you for reaching out 👌 I had alraedy done so via Email too a few days back and she upgraded her Pod to yarnd/0.16.x 🎉
Linux 0.11 rewritten in idiomatic Rust, boots in QEMU | Hacker News Fark’n hell, this is some ~50k SLOC of Rust code compared to the original ~8k SLOC of C of the original this was based off of. No doubt this was “vibe coded” for sure, there is no way a human can write 50k SLOC, not in a reasonable timeframe anyway 😅
@prologic@twtxt.net You also have to tell us the username!
@david@daiwei.me that was literally one of the messages I got this morning with an invite request to join this pod 😱
Hurray, I can now press gg instead of g to go to the top in tt. Much better! :-) Other multi-key combinations are also easily possible now.
I should probably write a real article about this at some point, but here we go. The only downside with my new key binding system is that it breaks tview’s established pattern. You’ve got an InputHandler(), that is implemented using WrapInputHandler(…). It typically then directly implements the switching logic depending on the key press. Something like this:
func (w *Widget) InputHandler() func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
// WrapInputHandler allows for intercepting key events with SetInputCapture(…)
// from the outside for customization. This handles the default key bindings.
return t.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
switch event.Key() {
case tcell.KeyRune:
if event.Modifiers() == tcell.ModNone {
switch event.Rune() {
case 'k':
w.scrollUp()
return // we already handled the event, stop processing
case 'j':
w.scrollDown()
return
}
}
}
// We didn't handle the key event. Maybe the parent
// widget knows what to do with it.
if handler := w.parent.InputHandler(); handler != nil {
handler(event, setFocus)
}
})
}
From the outside, you can intercept and either stop or continue the widget’s original key handling with a potentially rewritten key event using SetInputCapture(…):
w := NewWidget()
// customized or additional key bindings
w.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
switch event.Key() {
case tcell.KeyUp:
// Rewrite the event, so the "cursor up" key is an alias
// for the vim key binding "k", that is handled by the
// wrapped input handler above. (I know, I know, this is a
// completely unrealistic example, why would anyone use
// cursor keys when there are vim key bindings available?!)
return tcell.NewEventKey(tcell.KeyRune, 'k', tcell.ModNone)
case tcell.KeyRune:
if event.Modifiers() == tcell.ModNone {
switch event.Rune() {
case 'q':
app.Stop()
// we already handled the event, do not pass it
// to the wrapped input handler above
return nil
case 'r':
toggleMessageReadStatus()
return nil
}
}
}
// we didn't handle the event, pass it to the wrapped
// input handler above
return event
}
Since they all expect a single key, I’ve noticed that using multiple dedicated KeyBindings of mine on these different levels kinda breaks multi-key handling with common prefixes. The outer-most KeyBinding captures the prefix, but it can’t transfer it to the inner one if not handled by the outer one. At least not without some more (potentially ugly) changes. So, I now have to work with just a single KeyBindings object for the entire widget chain (if it consists of multiple other widgets or the regular input handler and input capture are in the game). The outside needs to register all its key bind customizations or extensions at the same level that the original widget handles its default ones. Doable by exposing the widget’s KeyBindings instance, but not pretty. You always have to keep this in mind.
With the KeyBindings, it will look like that:
type Widget struct {
parent tview.Primitive
// make it available to children or the outside either by
// direct field access or by providing a getter method
KeyBindings *bind.KeyBindings
}
func NewWidget() *Widget {
w := &Widget{KeyBindings: &bind.KeyBindings{}}
w.KeyBindings. // default key bindings
Bind0(bind.KeySequence('k', w.scrollUp).
Bind0(bind.KeySequence('j', w.scrollDown)
return w
}
func (w *Widget) InputHandler() InputHandler() func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
return t.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
// also note the missing support for focus transfer at the moment
event = w.KeyBindings.Capture(event)
if event == nil {
return
}
if handler := w.parent.InputHandler(); handler != nil {
handler(event, setFocus)
}
}
}
And then from the outside, or in a child widget:
w := NewWidget()
w.KeyBindings. // additional or customized key bindings
Bind1(bind.KeySequence(tcell.KeyUp), func(*tcell.EventKey) *tcell.EventKey {
return tcell.NewEventKey(tcell.KeyRune, 'k', tcell.ModNone)
}).
Bind0(bind.KeySequence('q'), app.Stop).
Bind0(bind.KeySequence('r'), toggleMessageReadStatus)
When directly working with tview primitives that are not part of custom widget implementations, the following works well so far:
textView := tview.NewTextView().
SetWordWrap(true).
SetText("…")
SetScrollable(true)
textView.SetInputCapture((&bind.KeyBindings{}).
Bind0(bind.KeySequence('q'), app.Stop).
Bind1(bind.KeySequence('g', 'g'), func(*tcell.EventKey) *tcell.EventKey {
return tcell.NewEventKey(tcell.KeyHome, 0, tcell.ModNone)
}).
Capture)
I need to sleep on this some more.
Also, writing very long messages like this one is really not all that fun in tt’s editor. I should absolutely provide a way to shell out to vim.
(Took me about one and a half hours to compose, holy crap. But not only because of not using vim. Although, that might have saved me a quarter hour or so for sure. Proof-reading this message also uncovered quite a few bugs in my real documentation. So, that’s a big win!) Good night!
anyway thank you to @prologic@twtxt.net for the email heads up to upgrade this pod! we SHOULD be on the latest version, if i did it right…
@prologic@twtxt.net That’s a good way to keep spammers out:
Your browser did not pass the anti-spam check! Please make sure JavaScript is enabled and try again.
It was turned on.
FUCK THE BBC!
Robin Ince is, like we say in Brazil, “best person”.
https://www.comedy.co.uk/radio/news/8605/robin-ince-resigns-from-the-infinite-monkey-cage/
Sorry that I’m “late” in reacting to these awful news. I wish some other people had a tenth of his decency.
Yeah this is my fault sorry! In this case i’ve axtually found yarns to be soex non-compliant 😱 Twtxt.app is doing yhe right thing🤣 As is Jammy 👌
@david@daiwei.me This is another dangling thread:
Trying to fetch "#kyjhiwcxeknm" from Yarn pod https://txt.sour.is ...
Trying to fetch "#kyjhiwcxeknm" from Yarn pod https://twtxt.net ...
Twt could not be found
@balloon-fu-sen@tw.fus.f5.si You don’t really need to! The crawler will discover your feed on it’s own 😅
🎉 This pod, twtxt.net is now open to the general public again to join. However it is invite-only with admin review and approval/rejection. Welcome ! 🙏
I want to check this at some point…
«spyrrow Python wrapper of Sparrow, State-of-the-art Nesting for 2D irregular strip packing»
Shipped a bunch of Twtxt App fixes & polish today 🥳 One-tap Refresh that actually refreshes, duplicate follows fixed, Reply/Fork buttons (with proper @-mentions), unread dots, Back keeps your spot, and it’ll now guide you to install it as a proper app 📱 Reload https://twtxt.app and have a play! Thanks @quark@ferengi.one and @balloon-fu-sen@tw.fus.f5.si for all the reports 🙏
@david@daiwei.me I don’t want to start the discussion again, but edits wouldn’t be an issue if we had agreed on a better addressing scheme. Maybe edit more as a quiet riot. :-P
@david@daiwei.me Oh boy, that looks super yummy! :-) I want to have rain here, too!
@balloon-fu-sen@tw.fus.f5.si Fixed! 🥳 The Avatar URL field now actually gets written to your feed’s # avatar = metadata. Turned out it needed changes in both the app and twtd itself — so you’ll want to update your twtd instance once the new build lands. Thanks for the report! 🙏
+00:00 vs Z should be treated as equivalent UTC 🤦♂️ I'll take a look at the timestamp parsing in Yarnd 🧐
@prologic@twtxt.net For what it’s worth, the twt hash extension is specifically modeled after yarnd’s implementation with all the quirks coming from Go’s stdlib: https://twtxt.dev/exts/twt-hash.html#timestamp-format
“All timezones representing UTC must be formatted using the designated Zulu indicator Z rather than the numeric offsets +00:00 or -00:00. If the timestamp does not explicitly include any timezone information, it must be assumed to be in UTC.”
<tab> (white space) between the timestamps and posts look a bit shorter than the ones from jenny? just noticed that and thought maybe it's someting you'd want to know.
@aelaraji@aelaraji.com @david@daiwei.me @prologic@twtxt.net It depends on the tab size, but often, a tab aligns the following character to next column that is a multiple of eight.
1 8 |16 |24 |32
2026-07-12T08:11:34+02:00 Here goes the text
2026-07-12T06:11:34Z Here goes the text
Say hello to the Twtxt Social Graph 😅
#Twtxt #social #Graph
… this came off more snippy than I wanted it to. Sorry. 😅
@prologic@twtxt.net @bender@twtxt.net is it normal that twtxtapp’s <tab> (white space) between the timestamps and posts look a bit shorter than the ones from jenny? just noticed that and thought maybe it’s someting you’d want to know.
The Rectangle highlights the whitespaces from Jenny and the Ellipse is over the ones from twtxtapp.
🥳 Finally! After nearly 4 years, yarnd v0.16.0 “Silver Sojourner” is out! 🚀 Twt Hash v2, SQLite FTS5 search, HTMX-powered UI, first-time setup wizard and literally hundreds of bug fixes 🐛
Release notes: https://git.mills.io/yarnsocial/yarn/releases/tag/0.16.0
Upgrading is fully automatic — the Twt Hash v2 migration re-fetches all feeds on first start, so expect the first cycle to be a bit heavier. Images on Docker Hub as prologic/yarnd:0.16.0 👌
cc @kat@yarn.girlonthemoon.xyz @abucci@anthony.buc.ci @shinyoukai@yume.laidback.moe @eldersnake@we.loveprivacy.club 🙏
@balloonfu-sen@yarn.girlonthemoon.xyz I could in toehry publish a specification for what twtd implements, which forms the basis of the API between twtxt.app <-> twtd, if you wanted to write your own twtd / twtxt.app compatible publishing backend (assuming you didn’t want to use Github/Gitea, etc).
In other words, try to avoid Editing if you can 🤣
Yeah to @david@daiwei.me’s point re Editing. It’s only really safe to do so if you are sure that no-one has yet fetched your feed or replied to your Twt. But even then, you have to be quick 🤣 Editing/fixing a Twt inside of an existing thread is “oaky”, as long as it also doesn’t get forked and becomes the root of a new conversation 😅
@balloonfu-sen@yarn.girlonthemoon.xyz Thank you for doing this 🙏 – Just a thought… It might be possible for this to be fully automated from the Twtxt Search engine / crawler? Right? 🤔 It has all of the data… I also think it might be possible to distinguish between 1-way feedsa and “real folks” (ya know, 2-ways feeds) 🤣
@balloonfu-sen@yarn.girlonthemoon.xyz Such tilde(s), etc, could in theory just run a twtd instance per user, or if I was convinced enough to make twtd also multi-user capable (optionally) that would also work. But many ~tilde(s) barely implement the Twtxt specs we continue to build and improve (albiet slowly and carefully).
We someone need to get @kat@yarn.girlonthemoon.xyz to update her pod hmmm 🤔
@balloonfu-sen@yarn.girlonthemoon.xyz Unfortunately I tried to support SFTP but ripped this out as Browsers (which the Swag framework uses under the hood as a framework to build PWA(s)) doesn’t support raw TCP connections. So FTP / SFTP is not possible without hacks like a proxy. Which I don’t really want to support. So only things that have some kind of HTTP API are possible viable publihsing backends right now. That is Github/Gitea, twtd, Yarn, etc.
Well, after all these tests, I can’t reproduce. I have used exclusively the desktop to conduct these tests.
@movq@www.uninformativ.de this one:
2026-07-11T17:28:31Z (#fcyeeyd3ii2o) No yet. Let’s keep it rolling a little bit longer. I am reply to “[..] I don’t see any broken threads here. 🤔“. I can’t tag followings while on mobile. <-- THIS BROKE
Was a reply to:
2026-07-11T16:39:22+00:00 (#iqqsqst5vokf) @<david https://daiwei.me/twtxt.txt> Well, I don’t see any broken threads here. 🤔
@movq@www.uninformativ.de I will dissect the twtxt that one was a reply to, as soon as I get home.
@david@daiwei.me Ta, I continued my fun with studying the tcell and cbind code bases for key bindings. My plan is to eventually not only support custom key bindings in the tt configuration file, but also to enable multi-key sequences, such as gg to jump to the top of a list/tree. Or use other vim-like navigation movements like 7j or 25gg etc.
And it turns out there are only a hand full oft tcell/cbind version combinations that work together. Only if all stars align, there’s chance of success. I will probably end up pulling cbind in to simplify my life. There are situations where tcell.EventKey’s triple of key, modifiers and rune are not all that intuitive to me. Let’s see.
@prologic@twtxt.net Well, 15 shows the site. On the left, I had a roll mat on a tarp. I borrowed some “NVA tarps” from the scouts for this trip. The scouts got them from the National People’s Army, the German Democratic Republic’s armed forces after Germany was reunited. They’re 1.75m x 1.75m in size and weigh 1.3kg, quite heavy, but super awesome. One tarp on the bottom, another one to cover up the clothes, shoes and sleeping bag in order to protect against the thaw. Finally, a mosquito net over all that, hung from a rope between two trees.
My mate just used a hammock with a mozzie net on the right hand side. The third tarp served as the luxurious bedside carpet. :-)
We sat on my second tarp to chill and enjoy the sunset and surroundings. It was nice to notice birds etc. die down. It took a really long time for the last light to fade away. Since we have a very high risk of forest fires, we of course couldn’t have a camp fire. But after all the exhaustion, I didn’t even miss it for one second.
Since we had dinner at home before leaving, all we brought were two lye rolls, two grain rolls, two brezels, some sausage and chocolate biscuits for breakfast. From the 2.5l of water, I ended up using 2l. It’s always good to have a little extra, despite the unnecessary weight. We had brekkie a few kilometers further on a bench in the shade. The first bench was already in direct sun.
Our camp site was maybe 30m to the side and a few meters down of a summit path hidden behind some trees and bushes. We were quite lucky, the other side of the hill got quite a bit of a breeze at night. We could hear the leaved treetops making much more noise behind us.
@movq@www.uninformativ.de Yes, these kind of dogs should really be strictly forbidden!
It’s not illegal if you own the forest or ask the owner. :-)
@david@daiwei.me Yeah, no clue. But my mate said the dog is disqualified from such adventures in the future. :-)
The temps were supposed to hit 14°C just before sunrise. Since we didn’t bring a thermometer, I can’t tell for sure. I was rather hot in my sleeping bag, so I had to pull out my arms every now and then. My mate’s sleeping bag was a little lighter and, unfortunately, the zipper jammed up. Since it didn’t close all the way, it felt quite a bit cold I was told in the morning. When we got up at 6ish (we said, we don’t care about time at all), it was probably already 16°C if not more. I brought a jumper, but a t-shirt was already nice enough to wear. The jumper just served as my pillow. The mercury raised by the minute then.
Yeah, I circled the spot with a biro to keep an eye on it. Until now, there’s absolutely nothing to see. Looks like I got lucky.
@bender@twtxt.net All the other ones worked but this broke? What’s different here? To which twt hash should this be a reply? 🤔
@david@daiwei.me good, let’s get this test going. This is simply a reply to iqqsqst5vokf (first twtxt).
We slept in the forest. It was really great except of my mate’s fucking terror dog who was barking and snarling the entire night to each and every sound. I had maybe half an hour of sleep in total. Despite that, it was pleasantly warm. Well, the night, that is. The heat was brutal during the days. Literally streams of sweat were running down on us on the way there in the evening and back in the morning.
Surprisingly, there weren’t any mozzies around at night, I would have lost all safe bets. On the way there, my mate convinced me to take a shortcut through the taller and taller growing grass. It’s been some time that somebody traveled on this track, so we had to search around a bit for the overgrown path where we could cross the mostly dried up creek. In the beginning I said that this will be a bad idea. Lo and behold, I discovered a tick on my inner upper leg the next morning. Luckily, I got it out with my tick hook on the first attempt.
I’m starting to use the twtxt.app as my daily driver now as opposed to yarnd and my pod twtxt.met 🥳
Friday, my love, we meet again. I am going to take you to lunch, and pamper you. I will led you to believe you are the only one in my life, but then, as the working day sunsets, I shall leave you at the door, like a stood up girl by her prom date.
Weekend babies, here we come! 😂
@balloonfu-sen@yarn.girlonthemoon.xyz I have gone years without seeing an unpaved road here. Even on remote, rural areas, lots of roads are paved as well. Roads are fairly clean here too, though I have to admit that Japan excels at that, amongst other things.
@balloonfu-sen@yarn.girlonthemoon.xyz many reasons, all of which make sense. Same reason why automobiles today do not have an inner tube either. Now, about bicycles:
Tubeless bicycle tires drastically reduce punctures because internal liquid sealant instantly plugs small holes while you ride. Eliminating the inner tube also removes the risk of “pinch flats,” allowing you to safely run much lower tire pressures. This lower pressure provides superior traction and a noticeably smoother ride on rough surfaces. Finally, without an inner tube rubbing against the tire casing, rolling resistance drops, making your pedaling more efficient.
Bottom line, smoother ride, better traction, less flats.
@kiwu@twtxt.net awesome, that’s what I like to hear! One more day, and it gets even better: weekend!
And I meant “its simplicity”. Autocorrect is going to get me in troubles one of these days. LOL.
@GabesArcade@gabesarcade.com hey, thanks Gabe! One of the things I like the most about twtxt is the community size. We are relatively small. Twtxt users tend to “know” each other better than on the other, much bigger communities. I believe that’s good. Glad to have you around!
Of course, it’s simplicity is part of its strength too!
@movq@www.uninformativ.de tell me about it! I try to enjoy the time I have available, regardless of being working time, or not. I admit it is quite hard!
@lyse@lyse.isobeef.org next time I will ask someone to take a pic of me before, and after. You will know hell when you see it!
@movq@www.uninformativ.de hehehehe, I wouldn’t get paid enough to try again. I am “tech support” for wife’s, and that’s already a pain. It is also all I can take (well, I am kind of forced into it 😂).
@movq@www.uninformativ.de yup, yup! Our neighbours spent their $50-60K to build their swimming pools. Our community (73 houses) has 52 pools. Our house is one of the few that doesn’t. They are expensive things, not just to build them, but their maintenance. Ain’t nobody got money for that!
@bender@twtxt.net Ha, I remember these from our trip to Florida ~30 years ago:
(Yep, it was a rainy day. 😂)
Heh, that’s a cute story: https://www.osnews.com/story/145459/you-paid-me-a-long-time-linux-user-to-use-windows-11-exclusively-for-a-month-heres-how-it-went/
@arne@uplegger.eu hahahahaha! They are swimming pool covers, also called lanais. They are to keep leaves, and any other debris, and any wild animals, out of the swimming pool. A swimming pool enclosure, pretty much.
@bender@twtxt.net @background: Do all your neighbours have huge aviaries at the back of their houses!? Are they all bird lovers or just trying to protect against the environment?
@aelaraji@aelaraji.com was it hard to set up for you?
I will aim to have most issues bugs and user experience problems, identified and fixed by this weekend!
I agree! That one is good! Saved to my phone 😅
I don’t know why, but either Jenny’s behaving different after the last update, or I Fucked up something and I have no Idea how to fix it.
Symptoms:
- I don’t have copies of my New Posts in my Maildir after posting them (as in I don’t see them in neomutt’s inbox).
- Nor fetch or fetch context (if they get replied to) seem to fech them auto-magically.
- I had to do a full whipe (~/Maildir/twtxt and ~/.cache/jenny) in order to get them fetched back.
Fixed! Had to unfollow, follow back.
I think Yarn has Gabes nick cached, and mentioning is broken because of that. Let me check my followings, to be sure.
@bender@twtxt.net Thanks! I wanted that to never end as well. :-)
@prologic@twtxt.net My bad. It has been a while since the last time I poked around my mystery box, and I must have Effed up something yesterday. Is it fixed now? (Also, I’ve noticed that access to my avatar is, somehow, still denied. Still poking at it. 🤦)
Pain has been a thing forever, sadly. Though today matters, I don’t want to ignore the pain of the past. 😞
@movq@www.uninformativ.de Welcome to the University Computer Centre Greifswald, where we like FLOSS and have never known fear or money!
XMPP greatest peak was when Google Talk was around. Being able to chat with thousands, if not millions, of Google users at that time, using your own domain, and your own XMPP server was amazing. Then Google, in all its wisdom, and as it does very often, decided to kill it.
I might be on the minority, but can care less about video calls. Heck, even calls! Text is King. 🤪
@aelaraji@aelaraji.com At work we used to have XMPP/Jabber Chat-Clients but now they are obsolete, due to the introduction of Matrix.
@lyse@lyse.isobeef.org How many people are still using XMPP? 🤔 I’d expect the number to just as low as IRC users? 🤔
@lyse@lyse.isobeef.org simplified it a little bit. Using only *bot* will bring collateral damage I want to avoid (there are, still some “good” bots):
@aibots {
header_regexp User-Agent (?i)(GPTBot|ChatGPT|OAI-Search|anthropic|Claude|Google-Extended|FacebookBot|CCBot|Perplexity|Applebot-Extended|cohere|Omgili|Bytespider)
}
abort @aibots
@prologic@twtxt.net I linked you some of my findings on the twtxt.app on IRC. The main problem is the hashing. Totally broken. But you have got to give it some thought, because GitHub hosting of the feed is tricky (even more so if they are CNAMEing their domain to it). It is also finicky because Pages is auto-enabled on username.github.io, so actions must run each time you twt.
If someone would be so kind as to file an issue against the repo? 🙏
@lyse@lyse.isobeef.org 07, right there, is my favourite. That’s not to say I don’t like the rest. I love them all! I don’t think I would ever get tired of enjoying that view, each and every day. 😍
@anth@a.9srv.net that page is absolutely unreadable on mobile, very close to the same on desktop. Had to use Safari’s reader mode to see it, and then… meh. Closed tab. 😅
Anyone using XMPP? I’ve been hearing a lot about how it is the OG messaging protocol. That G00gle Talk used to use it as a back-end, that FB messanger and w_hatsapp use some modified version of it or something; And that setting up a server (or even using a public one) would be a better alternative to the aforementioned apps, so I did. Now the question is: “Where the Fu__ are my video calls at!!? 🤣” … The protocol supports videoconferencing and I’m yet to find a decent Desktop/Mobile client that implements it. I wish I knew enough Code-Fu to contribute/help implement some, somewhere.
@bender@twtxt.net I’m glad to announce that Lyse’s Free Nose Cleaning Service is now internationally available.
I am afraid it will have to wait until your return! There are some decisions to be made, I think. Way out of my league! LOL.
@aelaraji@aelaraji.com wow, look who the cat dragged in! 😂 I was thinking about you just yesterday, when testing the twtxt.app, and seeing your avatar photo broken. And today, here you are! Nice to “see” you mate!
@rdlmda@rdlmda.me THIS! … has been my daily mantra, for at least 8 months; and I’m still waiting for some Magic™ to happen.
Oh wow! Now, that’s a place I would love to be camping! Very nice pics!
FYi 👋 I’m aware of an optimist precomputed hashing bug on the new twtxt.app 🤯 Trying to work with @bender@twtxt.net remotely on my vacation yo fix it 🤣
@GabesArcade@gabesarcade.com The no-JS part is one thing, but you also have to disable the (nowadays common) forced-HTTP-to-HTTPS-redirect, because those old browsers can’t do modern crypto. And make sure that your webserver serves the correct page even if no Host header is sent by the client. And don’t even think about serving UTF-8 or even just putting utf-8 in the content type. 😅 And for the JPEG thumbnails I pass a special flag to ImageMagick so that IBM Web Explorer from OS/2 won’t trip. 🤣 And always use link rel="stylesheet" for CSS, because some browsers render inlined CSS as literal text. And … probably more that I forgot by now. 😂
@david@daiwei.me Not sure, actually. Let’s see. Those are the ones where I still have the original disks (or have bought them on eBay again):
- SuSE Linux 6.4 (it’s a massive 7 CD distro with a huge manual, best thing ever)
- OS/2 2.1
- OS/2 Warp 3 (red and blue spine because
$reasons)
- OS/2 Warp 4
- PC DOS 7
- MS-DOS 6.22
- Windows 3.1
- Windows for Workgroups 3.11
- Windows 95 C
- Windows 98
- Windows NT 4 Workstation (still in the mail, though 😅)
- Windows 2000
- Windows XP Professional (last Windows I ever used on my private PCs)
(Plus a few “classic” office products as can be seen here: https://movq.de/blog/postings/2024-05-23/0/POSTING-en.html )
Okay, wow. Windows NT 4 wasn’t part of my timeline back then, so this is the first time I’m seeing it in action. And this thing came with IE 2, which I’ve also never seen before. (That’s interesting, because I remember using IE even on Win 3.x, but apparently that was already IE 3?)
It also makes me really happy to see my website work in these old browsers. Fullscreen images are “broken” because those are PNG or WebP, but the rest works just fine. 🥳
@lyse@lyse.isobeef.org Oh yeah, few people are as persistent as her. That said, it’s really easy to give up. This shit is overwhelming.
@david@daiwei.me as you alter ego, I seriously recommend you stop creating feeds left and right. But whom am I kidding, right?! 😅
I wonder how long will it take to show a follower on twtd. It only shows the feed’s owner, so far.
I know what’s happening. Will come back later to explain (for @prologic@twtxt.net).
I am watching Zatoichi the blind swordsman today. I also have a mountain of clothes to fold. Then work comes tomorrow. 😅
So interesting. So, a company tribute to some of their employees. Very touching!
I slept for over 10 hours last night and today. Finally caught up for the many nights going to bed at 02:00, and waking up at 05:00.
@itsericwoodward@itsericwoodward.com Haha! I’m glad you like it! 🤣 I ummed and arrred over the set of publishing backends it should support, and in the end decided to support Yarn, Github/Gitea and twtd. I hope that’s enough and flexible enough for most folks 🤞
Adding support for forking, forked conversations and navigating back to the root of a thread for the Twtxt App 🤞
Finally done with the Van! Ready to roll out tomorrow morning 🚀
lleeypvkzbw2? That Twt was never ingested by twtxt.net (and likely the search engine) so umm hmmm threading breaks 🤣
@GabesArcade@gabesarcade.com Yes, because if you edit/delete a Twt after the ecosystem has ingested it, well there then are two versions 😅 Just be aware of edits/deletes, especially if someone has already replied to said Twt 🤣
I wish I could connect this with git.mills.io. I think there is a network issue preventing me from bring able to do it.
@GabesArcade@gabesarcade.com Did you by change edit or otherwise delete the Twt you replied to (2nd last in your feed) with the reply/thread id lleeypvkzbw2? That Twt was never ingested by twtxt.net (and likely the search engine) so umm hmmm threading breaks 🤣
Hello everyone ! 👋 Behold I bring you (after many years) the launch of the Twtxt App 😅 – Ye, this is a Desktop and Mobile app built as a Progressive Web App (PWA) using a little framework (Swag) I put together iafter some experiments @xuu@txt.sour.is and I did in Go and HTMX and Service Workers.
The App is offline-first and supports installing to Desktop and Mobile (add to Home screen) and supports a number of publishing backends, including Yarn.social’s yarnd Pod, Github, Codeberg/Gitea, and a little tiny twtd Twtxt server (See: https://git.mills.io/yarnsocial/twtd).
Please try it out, no need for any account(s) or such, works with your existing feed(s) (as long as the publishing backends work well enough for you!). Please give me feedback! 🙏
Also, did you know the Twtxt Search Engine is back? 🎉
Set/GetDisabled(…) and PasteHandler(), tt starts up fine and seems to work without issues.
After updating to tview 0.42.0, I also sadly noticed, that the tview.Modal now clears the background and doesn’t simply draw over the already present widget. So, I decided to write my own Dialog widget. This endeavor lead me down the path to actually bring back a custom Button implementation, too. When the button is focused, it surrounds the button text with [ and ]. When not in focus, the brackets are removed. Much better than before (https://twtxt.net/conv/qx3vz4a):
I also use the same buttons in the compose view, too.
Okay I’m going to bed, g’night folks 👋
@GabesArcade@gabesarcade.com I’m obviously Aussie, but happy 4th July to you too! 🎉
@prologic@twtxt.net That’s cool to hear!
Looking at my access logs, something seems to be off, though:
2026-07-04T04:11:26+02:00 200
2026-07-04T05:16:09+02:00 304
2026-07-04T06:33:34+02:00 304
2026-07-04T06:37:46+02:00 304 # just four minutes since last crawl
2026-07-04T06:41:55+02:00 304 # another four minutes
2026-07-04T07:11:33+02:00 304
2026-07-04T07:11:40+02:00 200 # no conditional request just seven seconds later
2026-07-04T07:43:25+02:00 304
2026-07-04T07:43:33+02:00 200 # just eight seconds since last crawl
2026-07-04T09:18:06+02:00 304
2026-07-04T09:22:53+02:00 304 # just four minutes since last crawl
2026-07-04T09:27:03+02:00 304 # another four minutes
@movq@www.uninformativ.de It sure feels like the focus is heavily shifted to the average Joe and the power users are left standing.