Problems are Solved by Method\" ๐ฆ๐บ๐จโ๐ป๐จโ๐ฆฏ๐นโ ๐โฏ ๐จโ๐ฉโ๐งโ๐ง๐ฅ -- James Mills (operator of twtxt.net / creator of Yarn.social ๐งถ)
@arg You actually can, but we highly discourage it and I haven't really built "Edit" / "Delete" functionality in the Twtxt App that I know you're using ๐ Twtxt being purely decentralised, meaning that there are absolutely zero decentralised, with the exception of the twtpub.com service you're using to reduce as much friction as possible for newcomers to try things, makes supporting threads a bit of a controversial topic ๐ -- In the end we are sticking with the Hash v2 extension, making threads use content addressing, so even if you did delete/edit a Twt, you have to be carefuly it hasn't already been replied to in the ecosystem ๐คฃ
@murad Welcome to Yarn.social / Twtxt ๐ฅณ You might want to fiddle a bit with your settings, maybe a nice avatar, description, maybe a few links, etc ๐
@itsericwoodward Dropped you en Email ๐ง
@itsericwoodward Can I count you in as a potential customer then? I'll find a way to DM and share details with you. But rest assured it'll have everything you could possibly want ๐
$599 retail purchase $9.95/month optional subscription
โ๏ธ Would you pay this for a fully self hosted home cloud? ๐ง
And just like that Problem 10 is done and correct whoohoo ๐ฅณ It was easy because in Problem 7 I'd already written an iterator to produce infinite primes. So the solution for finding the sum of primes under 2,000,000 is basically (shortened):
primes := iter.take_while(iter.filter(prime_candidates(), is_prime), fn(p) { p < n })
print(iter.sum(primes))
And of course the answer is: 142913828922 which took ~21.ss for the Go Vm to compuete.
What's interesting here... Which is the interesting thing about Mu is the dual runtime. So the above solution for Euler Problem 9 finds the solution in ~429ms with the Go VM and ~327ms natively compiled to darwin/arm64. Not bad for a language I haven't really done any optimization work on yet (correctness first obviously).
Oh man wow ๐ฎ Problem 9 was quite hard ๐ฑ I had to build two new functions in the Mu stdlib for computing combinations and permutations, but then the combinations of range(1000) for triples such as a + b == c is enormous! So i had to write iterator versions of these to do lazy evaluation. Anyway solution follows:
#!/usr/bin/env mu
// Special Pythagorean Triplet
import "iter"
fn usage() {
print("Usage:", args()[0], "<n>")
}
fn sqr(x) { x * x }
fn main() {
if len(args()) < 2 {
usage()
exit(1)
}
n := must(int(args()[1]))
print("n:", n)
// For a < b < c and a + b + c == n, both a and b are strictly less
// than n/2. Generate only (a,b) combinations and derive c directly. This
// keeps the search lazy and reduces n=1000 from C(999,3) = 165,668,499
// candidate triples to C(499,2) = 124,251 candidate pairs.
pairs := iter.combinations(iter.range(1, n / 2), 2)
triples := iter.map(pairs, fn(xs) {
a := xs[0]
b := xs[1]
return [a, b, n - a - b]
})
// Enforce b < c; a < b is already guaranteed by combinations over an
// increasing range, and a + b + c == n holds by construction.
triples = iter.filter(triples, fn(xs) {
return xs[1] < xs[2]
})
// Euler 9 has one answer for n=1000. find() stops the entire upstream
// iterator chain as soon as the first Pythagorean triple is found.
answer := iter.find(triples, fn(xs) {
return sqr(xs[0]) + sqr(xs[1]) == sqr(xs[2])
})
print(answer)
if answer != nil {
print(answer[0] * answer[1] * answer[2])
}
}
main() It is such a nice feeling that Mu is such a capable little language ๐ And I decided to write code code in Mu by hand ๐ค haha ๐คฃ and start solving Project Euler problems, like Problem 8 which works out to be a nice elegant solution in Mu:
#!/usr/bin/env mu
// Largest Product in a Series
import "fp"
import "sys"
fn usage() {
print("Usage: cat |", args()[0], "<n>")
}
fn products(xs) {
return fp.reduce(xs, 1, fn(x, y) {
if y == nil {
return x
}
return x * y
})
}
fn main() {
if len(args()) < 2 {
usage()
exit(1)
}
s := must(sys.read_all(0))
if len(s) == 0 {
usage()
exit(1)
}
n := must(int(args()[1]))
r := fp.max(fp.map(fp.sliding(fp.map(s, int), n), products))
print(r)
}
main() but yes, however you cannot currently add it or delete post via the app as I haven't really built that feature at the moment you technically can do it, but you do run into some challenges with breaking threads if you've already published something and then go back and edit it so we generally advise not to do that too much if you can help it
@brytboi I hope you're seeing my replies because you absolutely can scroll up in the app. Let me know if you've run into a bug though and report it to me so I can fix it immediately!
@brytboi no a subset of markdown is fully supported by the app!
@brytboi I mean you can, technically. But most clients won't render Javascript or HTML fragments at all. Only Markdown, Text, Images and Links.
@brytboi Hey! ๐ Welcome to Yarn.social / Twtxt ๐ค
@david Please report any logs from the Javascript console if you can. It's possible the one commit I made to the Swag framework might be the culprit here. Not sure.
I'm not seeing any of what you're describing, But then again I only use the app on mobile, on iPhone. There's only been basically a few commits to the App and one to Swag. That's it.
@anth Where's the other side of this? Your side? ๐ค
@lyse You are correct, ๐, however, not what I was thinking in this case. More of just a reminder/nudge.
@david Do you mind re-testing too with the updates i just pushed out? ๐
@GabesArcade Not sure if @mariam will ever see or respond to our welcomes tbh ๐ข I caught the new user trying out the Twtxt App 4 days too left ๐คฆโโ๏ธ -- I think I need to make some improvements to the app, some nudges, something to encourage users to stick around? Maybe some periodic push notifications? ๐ค
@mariam Hey! ๐ Welcome to Yarn.social / Twtxt ๐ค
@david Also if you wouldn't mind writing up an Issue for the image/upload problem too, that would be great ๐ I still haven't solved it properly, but I'll try to do so today. There's also an issue uploading images via the yarnd API path from the Twtxt App too, which I can replicate with basically any photo from my iPhone's Photo gallery hmm ๐ค
@david Are you able to describe this bug as an Issue in the Gitea Issue Tracker such that it can be reproduced and fixed? ๐
This has been fixed now if you could retest?
@david No idea ๐คท We shall see! haha ๐
@david Ahhh so you had a WebP you downloaded from somewhere on your Phone and you're trying to uploaded it via the Twtxt.App? ๐ค
@david Is this from your camera, or some other source of WebP somewhere? ๐ค
@david Why not indeed ๐ I'm taking nearly a whole month off from Sept 10 to Oct 6 Haha ๐คฃ
I really do find it difficult to follow anyone that basically posts to a wall, or doesn't follow back. It's utterly pointless not being able to have a conversation, like basically, at all. Maybe it's not even anyone's fault? Maybe just a sucky client that doesn't understand how User-Agent works in Twtxt Discovery? ๐ก
@itsericwoodward And... Are there basically a lot of "village idiots"? ๐ค
Gonna recreate the classic [Break out](https://en.wikipedia.org/wiki/Breakout_(video_game) game this weekend for the Mills Games Cabinet -- Anyone else got any ideas, requests? ๐ค #games #ebitengine
@movq You will always have a welcome "virtual" home around here ๐ค
@chrisgarrod Hello ๐ Welcome to Yarn.social / Twtxt ๐
@david I don't believe in impossible! ๐คฃ
@movq Good question. Short answer, I don't know. But I'll look at this a bit more closely.
@movq No I haven't :/
Just out of curiosity, have you ever ran this on real hardware? ๐
Only QEMU. Would you like to help test it on real hardware? ๐ I'm not sure I have anything worth testing it on!
da hell? What's the root of this thread? ๐งต
@thecanine This is of course disgusting! I have first hand experience with my neighbors next door where I told them about one of their LG (older models) "spying" on what they were watching. I've of course since blocked that shitโข at the network level for them, But man, don't ever buy LG. In fact don't ever buy any of this "Smart" shitโข. Period.
So... my little experimental Mu (ยต) OS is now ~8.7k of Mu and ~2k of Assembly, which makes this about an ~80/20 split. I've managed to achieve most of the goals I had set out, by ensuring a tiny Nucleus of only ~2k Assembly and all Policy, Services and Userland written entirely in Mu (a language I also deisnged and created, which still has no support for floats LOL)
@bender probably just too busy with real life and work to interact with us plebs ๐คฃ
@david Cool! ๐ Though I think this can be improved somewhat.
@david Might not have tested that path very well. Can you make a note of this on Gitea?
@david you're not missing anything. It is only set on grant / connection time. If you disconnect and reconnect, it should become an option. I haven't figured out how to refresh capabilities.
@david You're not missing anything. It is set on grant / connection time. So disconnecting and reconnecting will give you that option. I haven't figured out a way to refresh backend capabilities like this.
@GabesArcade twtd landed too ๐ฅณ Hosted feeds (twtpub.com) and self-hosted twtd can publish # follow = now โ the operator offers it with --allow-follows, then it's the same toggle in Settings. Off by default at both ends ๐
Also a "Publish who I follow" toggle: writes # follow = + # following = N into your feed like yarnd does. Off by default (it is your social graph ๐ค), and only on the GitHub/Gitea backends for now where the app owns the feed file. twtd next ๐ค
@GabesArcade Both ๐
Just shipped: Settings โ Backup & restore. Export everything (or follows only) as a JSON file and import it back โ or feed it any twtxt.txt and it'll harvest the # follow = lines. There's a copy-paste # follow = block in there too if you'd rather hand-edit ๐
@GabesArcade So we going with an Import/Export feature? Or would you also like optionally to write # follow = into the feed too? ๐ค Can do either/or or both.
@GabesArcade I think it would have to be specific to the App itself. So say you somehow didn't save a recovery key or some shitโข You could still get back up and running with ease if you had exported a config? ๐ค
Okay I'm fixing this in lextwt, yarnd and twtxt.app (takes a different path). Soon you'll be able to write shitโข like <this>) and it'll get escaped and rendered correctly on the page. Basically you are really writing HTML here, but not intending to do so, Twtxt never supported HTML, and I don't think it ever should. We extended the format to support basic Markdown, and I think that's where it should end.
Probably time we wrote a Spec for this really.
Ahh no I was wrong. this is being stripped at the Markdown parsing level due to "unsafe" HTML. Which of course is a bit hard to tell between what is safe and unsafe HTML.
I think the problem here is that <foo>) is being treated as HTML, which the browser renders as nothing, because that's not even a valid element it understands how to render. Hmmm ๐ค
@GabesArcade Based on your description, I think it makes snse to have an Import/Export settings in the UI? RIght? ๐ค
@david I mean we can probably do that I suppose. I'd make it an option in Settings though?
@david I see it now. Is this also a problem in the app too? Or just yarnd or both?
@GabesArcade Probably. How do you want this to work? An "Export" button to export all your settings in some form?
@david Sorry, I'm not seeing what you're saying? ๐ค
@movq It's "shaping" up to where I think I want it to go ๐
@david Yes!
So, a hobby OS, just like Linux was for Linus?
Although this is really an exercise is self-hosting a lagnguage, then self-hosting the language to build a self-hosting OS. It's all meta-circular.
I just taught the scc SLOC tool I use how to detect and recognize the Mu programming language. So it's actually a bit worse than your estimate. It's more like ~60/30 at the moment:
>>> mu = 1445
>>> asm = 2365
>>> T = mu + asm
>>> mu / T * 100
37.9265091863517
>>> asm / T * 100
62.07349081364829 @david It's somewhat expected to have a fair bit of Assembly (machine code) to get some of the bits you need going. But I think I can reduce this a bit. Let's see...
Dunno if anyone will find this interesting... But some ~6 months or so ago I experimented briefly with creating a whole bootloader + kernel + userland -- Basically an entire OS in the Mu programming language (which as you know I also designed and created) -- 6 months later I've worked on it some more after spending the last week working on improvements to Mu itself, which is now able to compile itself with its own Mu implemented compiler and now have an os/arch backend called muos/amd64 that boots into a running shell, with a tiny little vfs, UNIX-like semantics, syscalls, read/write, etc. It works pretty nicely, and aside from a small Assembly "nucleus", most of the Kernel and Userspace is written in Mu.
@movq You know you could in theory use the Twtxt App and the Twtxt Feeds service as your "news reader" right? ๐
@eldersnake Login to https://feeds.twtxt.net/ with your Pod's account. Re-create whatever you like. In the end I had to start over, there was too much mess. As you can no doubt imagine, the reason for revamping the feeds service was to thwart SPAM and Junk.
@movq Oh I agree. Long-term the whole thing is completely "fucked". But it says more about "Cloud" and "X as a Service" than about "AI" itself. It's a bit like all these fucking entertainment subscription services you need to entertain one's self. How many subscriptions does one need to Hulu, Netflix, Disney+, Stan, etc, etc.
@GabesArcade this sort of tells me two things 1) that enterprises aren't really engaging with OpenAI and establishing lucrative enough contractual agreements and 2) users aren't willing to pay for ChatGPT or if they are aren't willing to pay much more than $20 a month
@dce Was it ever really empty on the Codeberg side in the Git repo? ๐ค
@movq it's a shame we have to ruin such great technology that only depends a lot of this with crappy bullshit nonsense like advertising we've been into responses ๐คฆโโ๏ธ
Advertise in ChatGPT | Hacker News Seriously?! ๐ณ wut da actual fuq?! ๐ฑ
@david Have you never seen or heard me say AI is basically Artificial Incompetence? ๐คฃ
@thoshi I wouldn't bother if I were you ๐ They're both fairly outdated protocols and very much an "silo" IMO. THey don't make very good places to host your Twtxt feed either.
@thoshi Welcome to the Yarn.social / Twtxt ecosystem ๐
And @lyse is right. Not being on Github is a good thing IMO. Even when I was there with all my many projects, I basically got the same amount of "attention" as I do now. The only real way to gain more "attention" is to artificially play the "game". You know. The stupid "Stargazer" one, and whatever you can to get into the "Top 10 X" charts. -- But ultimately that doesn't buy you "quality" contributors or users or whatever. So it's all pointless.
@movq So I see it slightly differently... Over the years I have recieved great contributions from the likes of yourself and @lyse and the many forms of @bender and his friends ๐ Hell even others along the way that have come and gone. Likewise I also think you have recieved many contributions to Jenny over the yeras in much the same way, perhaps not in patches, but user reports, feedback, etc.
So I think what I'm saying here is this... Ever since leaving Github (like you), I find that my desire to continue to build up the community we've built here and to contribute to grow and cultivate it is important to me. My desire to thwart and eliminate useless traffic like bots and ai even strongers.
I want to find a good balance.
@david OH no ! ๐ My wife caught COVID some weeks ago, then we got sick again with a cold, it was awful ๐ข
Oh god ๐คฃ I mean I had this idea to re-invent "Git hosting", but failed. Maybe I'll try it again. I dunno. The thing is I hardly get "Issues" really, only when I ask nicely, of folks I know every well ๐คฃ So think at much "smaller scale" we need a different solution, and I think @movq is on to something, but not to the extend implemented, somewhere in the middle I think? ๐ค
@david Bah you ๐คฃ Do you know how hardโข it is to write a compier, a self-hosted compiler that has two runtime engines? ๐
On that note, I just finished writing the linux/risc64 backend and it only took ~2k lines of code ๐
After many months of hardโข work, I've finally been able to get Mu (ยต) lang to a point where the duplication of machine code / assembly between the ARM64/AMD64 and Mach-O and ELF formats are not all eliminated. This now means that writing a new backend target os/arch for Mu is now relatively simple to do, or far less duplicated work/effort.
Oh good ๐
2026/07/19 02:55:52 sync-reaper: observe-only pass โ 1152 namespaces, 6 anchored, 1094 undatable, 0 idle candidate(s), 0 reaped (1) Why The Oceanโs Top Predator Refuses to Hunt Us - YouTube -- The first half of this documentary is amazing! ๐ฎ -- The remaining half however is sad and depressing, making me never want to visit another zoo again ๐ข
@aelaraji oh good was that the in app nudge?
i think there should be at least 4 we know of right?
Does this seem right to you so far @david ? ๐ค
2026/07/18 02:55:52 sync-reaper: observe-only pass โ 1145 namespaces, 3 anchored, 1089 undatable, 0 idle candidate(s), 0 reaped
So far only 3 users of the Twtxt App have achieved their device settings with a recovery key? ๐
@lyse Ahh ok! I was just wondering and curious whether it was a bug that I've caused anywhere along the way ๐ง
and @david your rename shipped ๐ it's "Generate recovery code" now (you were right โ mints a fresh one each press), + it asks before replacing an existing code so you don't nuke the one you saved ๐
quick correction on that cleanup timing ๐ it's not 28 days. nothing gets deleted for the first 30 days at all (observe-only), and after that only setups unused for ~6 months that also never saved a recovery code. saved a code = safe forever ๐
IMPORTANT: Treat the re oery code like a password.
I will be monitoring the server logs for the next ~28 days, after that orphaned Namespaces will start to get cleaned up, especially ones that have never bothered to care about recovery.
๐ฃ ACTION REQUIRED: Hey folks ๐ For those of you whom are using the Twtxt App either via the Hosted option or on your own twtd instnace or via Github/Gitea or any other publishing backend (doesn't amtter). Please read.
Please open the app and you should be prompted to save your recovery code for your device. This basically is all of your settings, follows, etc in the app itself. This is synced to the Origin everytime you make a change, and also stored on-device. This is what makes it possible to sync your setting across services, move to another device, etc.
Please save a copy of the recovery code somewhere. This is only your only way to recover your settings.
Thank you ๐
Posting the review and plan here for posterity as it is related to this thread: https://canvas.mills.io/a/6QVGjzRW
The PR(s) as-is will likely not go ahead I'm afraid. More work to be done, but this is basically all about the "Recovery" story and how to anchor and notion of an "account" without well umm an account ๐คฃ
@ponderpoints Welcome to Yarn.social ๐ Interesting video, I actually watched it all the way through, riverting stuff really and quite well put together. The idea of "subjective experience" is a rather complicated thing to describe and you're right, how do we even know we have them? ๐ค
Ahh yes! Please do upgrade your twtd instance. Few things changed, many bugs fixed there too.
@balloon-fu-sen Huh? ๐ง This hasn't changed. What has is the default proxy used depending on your publishing backend.
I'll see if I can unblock just that VPN provider ๐ค
the only reason twtd has and records a followers.json is because that's where your feed is hosted from and where the UA discover occurs
the correct fix for what you observed is a recovery token to re-sync settings from the sync API
it's client sue not on any publishing backend
@lyse Can you explain this like i'm five? ๐คฃ Scgeenshot?
To retest: reload the app, reconnect Codeberg/Gitea with the same token, fill in the new Owner field (dce), repo twtxt, and Feed URL https://hashnix.club/~dce/twtxt.txt. Publish to Codeberg, serve from Hashnix โ exactly what you wanted ๐ค lemme know!
@dce Fixed! ๐ฅณ That 403 was our bug โ connect was checking your token via /api/v1/user (needs read:user), but your token's scoped to just the repo so it can't. Now it validates against the repo itself instead ๐
@david Oh yes blame me for you not having fun on the "Play Station" ๐ Haha ๐คฃ
@GabesArcade I may be blocking that provider due to abuse from bots using VPN(s) -- What was your last IP?
@david I think it might be a bug i just fixed ๐ค
@dce So let me get this straight... You want to store your feed on a Codeberg repo right? But you want to clone that repo down somewhere else to serve it on a different location. Right? And you'd like to use the Twtxt App (https://twtxt.app) to front all of this? Right?
Actually... no. We can do something here maybe...
In theory, it's Gitea anyway. So it should work.
@david Yes, but then I have to create and maintain an account I'll never use ๐คฃ
@dce Ahh! Let's fix the 403 error then? I don't have access to Codeberg, so I can't reasily test. Can you walk me through what you tried and any other details? I'll get this fixed.
@david Of course ๐คฃ Incognito sessions store nothing once closed. ๐คฃ
@movq @lyse Are you clients remaining compatible with Hash v1 in case older clients are still well not upgraded? ๐ค
@movq ha ha in this case I think I'm OK with a broken thread ha ha
and I'm not really sure I'll ever add an edit or delete button to be honest ๐คฃ
also, just to clarify, we built the hosted Service as the last lowest rung ladder for non-technical people. I fully expect most technical people will spin up their own publishing backend or use Github or similar so that long-term the ecosystem still remains very much decentralized.
@balloon-fu-sen yes I wouldn't go and change your feeds location the location a fourth time that's for sure! ๐คฃ
@david Found it. Some bugs in the "claim limiter". Fixing...
@david Please write an issue for this ๐ I don't mind which way we go!
I also set this to local years ago:
$ go env | grep TELEM
GOTELEMETRY='local'
When this came out I was also outraged. But it doesn't go anywhere, there are no network connections. It is effectively "off" like this.
@lyse Ahh yes, but tt has a "draft" mode right? You didn't publish, then edit over and over did you? ๐
let's just see if something like this crops up again.
I will very likely add a way to delete your feed(s) from the search engine, because I do thing that's important. But as Art 17 points out, we can't really guaranteed deletion in everyone's caches around the planet haha ๐
The only place where this would be an issue is the Twtxt Search Engine -- But as the GDPR also points out:
Art. 17
The one place the "it propagated and I can't recall it" problem is legally acknowledged is Art. 17(2), and it explicitly scales to what's technically feasible:
"โฆthe controller, taking account of available technology and the cost of implementation, shall take reasonable steps, including technical measures, to inform controllers which are processing the personal data that the data subject has requested the erasureโฆ"
Best-effort, given the technology. A decentralised, append-only, content-addressed feed is the available technology, and its limits are baked into the standard the law applies. Nobody โ not the user, not you โ is obliged to guarantee every cached copy vanishes.
So just because I enjoy this kind of thing (looking into laws and trying to understand them...):
GDPR is about roles, not ownership
There's no property right in personal data under GDPR. The whole regime hangs on three roles:
- Data subject โ the person the data is about.
- Controller (Art. 4(7)) โ "the natural or legal person โฆ which, alone or jointly with others, determines the purposes and means of the processing of personal data."
- The rights in Arts. 16 and 17 are exercised by a data subject against a controller. They compel a third party to rectify or erase. They are not self-executing duties that a piece of software must expose.
That's the key. In your architecture, for a user's own posts about themselves sitting in their own feed on their own device:
- the user is the data subject, and
- the user is also the only person "determining the purposes and means" of that data.
There is no third party controller to compel. The "right to erasure" is a right to make someone else delete โ and there is no someone else. It is satisfied the instant the user can change the file. A UI button is a convenience, not a legal requirement. Omitting it removes zero rights, because the data is a plain-text file the user can edit or delete by any means โ editor, sed, git, their file manager. Full practical control is retained; nobody is being denied anything by anyone.
based on this, it's entirely possible that there may still be a subtle bug somewhere with the app
oh man, that voice dictation didn't come out quite right I think it's because I still have a cold
as upset repeatedly in the past and many debates and discussions, I don't think there's any other viable way to do, threatening in a purely decentralized way because I think you're just create another set of problems that are probably likely far worse
and to be clear, I voice dictated that last reply so please excuse any miss speech to text recognition errors
@david well I happen to agree because one of the fundamental problems is that you can't have a tax file specification and assume that you can edit it freely by hand as a human and then clients that deal with that specification in machine possible mechanisms the two kind of conflict because humans get things wrong machines don't
I don't think I'm going to add edit and delete support in this app because I think it was a horrible mistake to add those features to a client ๐คฃ
@movq please don't waste your time to bugging this. I'll figure out what's going on with these new clients.๐
@eldersnake Ahh awesome! No worries mate! ๐
@itsericwoodward Well I clearly suck ๐คฃ putt.day #62 โณ 22/12 +10 ๐ก๐ข๐ก๐ก๐ด๐ด๐ก๐ข๐ข๐ข๐ก๐ด๐ด๐ข๐ข๐ข๐ก๐ข๐ข๐ข +2 https://putt.day/s/b4UKsjw0olkS
Took me two days to clean this off properly ๐ณ
I believe the tree that we stayed under was some kind of fig tree and on top of dropping little fig fruit and another little debris. I think we also got a bunch of butt poop and shit on top of the van's roof. ๐คฃ
had to clean a lot of gunk off the top of the van I have to wake up back from our holiday! ๐ฑ
@david heads up ๐ that verification code never reached you โ outbound email was broken on my end (my mail relay was rejecting twtxt.net senders ๐คฆโโ๏ธ). Fixed + deployed now ๐ฅณ give the hosted feed another go, it'll land this time ๐ค
@itsericwoodward Wrote it up ๐ Single-user twtd API is now documented (plain JSON, one bearer token) โ posting, uploads, profile, followers + WebFinger: https://git.mills.io/yarnsocial/twtd/src/branch/main/API.md ๐ Shout if anything's unclear for TwtKpr ๐
twtpub.com is just the default instance tho โ it's a multi-tenant twtd, AGPLv3. Run your own and I'll list it in the app's picker so folks choose where to land ๐ค keeps it decentralised + spreads the load. Docs โ https://git.mills.io/yarnsocial/twtd
New in the Twtxt App ๐ฅณ a Hosted feed backend โ claim a nick, one tap, no account, no server, nothing to run. Your feed lives at https://twtpub.com/u/yournick and you're posting from the app straight away ๐
Just depends, if I get overwhelmed and can't keep up with demand, I'll insist on a Gitea Issue(s) so I can organise the work.
@GabesArcade Anywhere I can find 'em ๐คฃ Gitea Issues, here, there anywhere you want really ๐
@bender Pffft bender is never mean haha ๐
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. ๐ค
Some further ideas/enhancements for Twtxt App ...
- On the "Followers" tab, new followers should appear at the top I thnik.
- On the Following/Followers, each feed should be clickable/tappable.
- Maybe also tidy it up a bit, displaying the full raw Feed URI is messy.
@balloon-fu-sen 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 ๐
Just thought it an interesting Hacker News article that caught my eye ๐๏ธ
@lyse None. I rejected ithe invite request ๐คฃ
@david Well... I can't! becuase the email supplied was nobody@invalid or some shitโข ๐ฉ
@david I agree, the App (https://twtxt.app) really does work quite nicely ๐
@david that was literally one of the messages I got this morning with an invite request to join this pod ๐ฑ
@kat Welcome back!!!! ๐ Did you upgrade your yarnd? ๐ค
@david Yeah the search engine/crawler has only found 28 active users in the ecosystem so far ๐
Just for security as required by law.
LOL ๐คฃ Was this someone's idea of a joke? ๐ค
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 ๐
@balloon-fu-sen 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 ! ๐
Self-hosting twtd? Pull prologic/twtd:latest too โ the Avatar URL field in the app now actually writes # avatar = into your feed (needed changes on both sides)
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 and @balloon-fu-sen for all the reports ๐
@itsericwoodward Ill weirw it up and share it shortly ๐
I believe we've nailed all the bugs down๐คฃ Though i am sick at the moment so i'm not at my best ๐ข
@balloon-fu-sen 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! ๐
@balloon-fu-sen Ahhh! That's a bug! Lemme fix that!
@lyse True. Although I _think) this isn't a problem and this thread is m00t ๐
@itsericwoodward I would have zero problems with that! If there's enough demand, I'll write up the APi spec for it? ๐ค
Say hello to the Twtxt Social Graph ๐
#Twtxt #social #Graph
๐ฅณ 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 @abucci @shinyoukai @eldersnake ๐
In other words, try to avoid Editing if you can ๐คฃ
Yeah to @david'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 ๐
you should see the new search engine stats page where I've added, spark lines, and time series graphs ๐
@balloonfu-sen 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 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 to update her pod hmmm ๐ค
@balloonfu-sen 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.
@balloonfu-sen That should work. LMK if you run into any issues!
๐ definitely using the Twtxt App as my daily-driver now for Twtxt/Yarn. Not using twtd however, as I just pair the app with my already existing yarnd powered profile on twtxt.net
So... Quick count. Hands up those who are using the Twtxt App? ๐ค -- And who's also pairing this with the twtd publishing backend?
Looks like twtxt.app on mobile emits +00:00 UTC timestamps instead of Z -- Yarnd should handle both, but doesn't ๐คฆโโ๏ธ On the list ๐ค
@bender @david Good debugging session ๐ Sounds like the root cause is twtxt.app on mobile โ +00:00 timestamps and quoted mentions. I'll dig into Yarnd's side of that ๐ง
@bender Yeah, Yarnd's mention parser is pretty naive โ if twtxt.app wraps the mention in quotes it probably strips them wrong. Worth fixing ๐ค
+00:00 vs Z should be treated as equivalent UTC ๐คฆโโ๏ธ I'll take a look at the timestamp parsing in Yarnd ๐ง
I'm starting to use the twtxt.app as my daily driver now as opposed to yarnd and my pod twtxt.met ๐ฅณ
Fixed the broken hashes in the Twtxt App (https://twtxt.app) ๐ฅณ It was hashing your twts with a client-side timestamp the server never used ๐คฆโโ๏ธ Now it keeps the canonical created/hash the pod (or twtd) returns, and the GitHub/Gitea backends write a # url = preamble so every client hashes your feed the same way. Thanks @fastidious for the report ๐
@GabesArcade Glad you like what we've nuilt up here over many years ๐ฅฐ
@bender LoL down under we just pull a cover over the water at ground level. no famcy ass structure ๐คฃ
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 ๐
@aelaraji At least your feed works as well your avatar ๐
@bender Wgt does your grass look so yellow?! ๐ณ
@movq I don't. but i do use IRC so hmmm ๐ง
@balloonfu-sen LOL ๐คฃ Too late! I already saw it and replied ๐
there is for example, a user configurable and default instance configuration called only one postponed domain
@balloonfu-sen That depends on the display configuration and preferences.
@david I agree! Let's get them back into the fold ๐ค
@bender Please create an issue for this too! Probably against twtd right? We should validate new fetchers and see if they are real clients or not. I think yarnd already does ybis quite well? ๐ง
And if we can compile a list and file issues for feeds, twtxt.app and anything else as issues for when i get back ๐ feature requests, bug reports. etc ๐ค
If someone would be so kind as to file an issue against the repo? ๐
@GabesArcade Thanks for reporting! I will fix this ๐ Soon!
Couple more after a short stroll along the beach ๐
FYi ๐ I'm aware of an optimist precomputed hashing bug on the new twtxt.app ๐คฏ Trying to work with @bender remotely on my vacation yo fix it ๐คฃ
Hmmm the Twtxt App isn't grouping threads correctly ๐ง
@itsericwoodward 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 ๐ค
@itsericwoodward Ahh you're welcome bud! ๐
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 ๐
Oh if we're talking about the twtxt.app client, that's a different story. I still consider that alpha/beta quality. Lemme look into that. It has it's own cache of course (using IndexDB) and it's entirely possible some behaviours are still not quite right yet...
@GabesArcade 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 ๐คฃ
It's no big deal of course, we are fully aware of the couple of rare(ish) edge cases with the threading model.
@GabesArcade 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 ๐คฃ
@javivf Heh! ๐ I don't get it haha, but I just saw your post about supporting the v2 Hash ext, nice! ๐
@GabesArcade LOL All god! I just announced it just now ๐คฃ
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 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? ๐
@GabesArcade You mean the one I haven't quite announced yet? https://twtxt.app ? ๐คฃ
@GabesArcade I'm obviously Aussie, but happy 4th July to you too! ๐
@GabesArcade LOL You can Email me, hit me up on Signal, orc IRC. Take ya pick I'm around ๐
@fastidious Done and done โ Should get an "Upgrade" banner and button soonโข
@lyse Found it and fixed it! ๐ The crawler's discovery spider was fetching every feed a second time, without any conditional headers (plus a couple of other politeness bugs: redirected feed URLs never stored their cache validators, and there was no floor between re-fetches). Now every feed is fetched at most once per crawl, always with If-Modified-Since / If-None-Match, and never more than once per 15m no matter what. Just deployed โ please keep an eye on your access logs and let me know if you still see anything impolite from the crawler ๐
@lyse Thanks! I'll look into that! Could be a bug in the crawler.
@balloonfu-sen Do you mind git pull && make build and updating your yarnd instance so it's in-line with the new Hash v2 spec ๐
@GabesArcade by asking me nicely ๐คฃ Which you just did! If you either provide me a desired username and password and secure medium to give this to you I can do that easily, or alternative a desired username and email address (never stored, only hashed), after which you can "Reset password".
Hey folks ๐ Today I announce the re-release of the Twtxt Search Engine now live and running and actively re-crawling and re-indexing. ๐ Please report bugs or any useability issues to me! ๐ #Twtxt #Search
@GabesArcade's Arcade@gabesarcade.com You will want to either build a client or use one of the ones listed here -- Either way you choose! ๐ I just noticed as well in this Twt I'm replying to (threading is a thingโข) that you @-mentioned @bender incorrectly ๐
Ahh yes, you really must fix your nick haha ๐คฃ
@Gabe's's Arcade@gabesarcade.com Welcome to Twtxt / Yarn.social ๐
@arne if you see this reply threaded nicely then yes you did! ๐
Seems to be good now ๐
As-is yarnd ๐คฃ
Speaking of vim... Which version of vim should I ship with GoNIX? ๐ค Vim or Neovim or something else?
So I decided to change tact a bit with GoNIX and instead of trying to build apure Go browser from scratch (which I kinda of half succeeded, in at least it was able to render most static ssr sites), I've instead decided to write a new browsered using the Chromium Embedded Framework, otherwise known as CEF. So now I have a fully working browser in GoNIX ๐ -- However since my goal is to keep GoNIX pretty lcean and mostly written in Go, I delegated the cef part(s) to an OCI container image and run that with GoNIX's box (command-line container runtime). It works great ๐
@balloonfu-sen Oh! You're running Yarn.social's yarnd? ๐
That's why I was able to see your reply so quickly/easily ! Nice! And welcome! ๐
๐ mbox.blue now support custom domains you can point at your ~/public_html or ~/.mbox/expose app/service. Enjoy! ๐
Hmmm are there really no decent Wayland (desktop) compatible image viewers that don't drag in Mesa and all it's hundreds of dependences or GCC and libgcc and it's multi-hour long build time or Rust? geez
So I've been working on GoNIX the last few days... Which is derived from ยตLinux -- At least it's entire build process. GoNIX however has a 100% Go userland, including the init process, package and service management.
Now... As an experiment, because I was able to make much process on enhancing the build tools and package management, I decided to see if I could build a "Desktop" Gui of sorts...
I still wanted it to be fairly minimal and lightweight. So I went with wayland (of course) and labwc and yambar. So far I'm liking the result ๐ 42 packages in the wayland-desktop meta port. Not too bad. Not sure if I can slim that down anymore... But trying to avoid Mesa/GL as that drags in far too much "cruft".
Olisse ยท 2026-06-20 22:27 UTC haihaihiii! mbox.blue is awesome ;)
So nice of the very few folks that have discovered mbox to say such nice things about my little experimental project and free service offering ๐
Behold, I bring you (reincarnated) mbox.blue -- A tiny shared linux server based on / around containers (my own implemtnation).
Belhod! I present Swag -- Build offline-first web apps in pure Go and HTML.
Got absolutely jack and sick of all the fucking useless bots, C&C and shitโข hitting my Git server tonight ๐คฌ So I sat down and built a lightweight version of Anubis, called caddy-pow. So now going forward, you'll have to (sorry) have a HS-enabled browser to hit git.mills.io which will hopefully make most (if not all) bots just go the fuck away ๐คฆโโ๏ธ #Hostile #Web
Yay finally fixed some of those annoying "Mark as Read" behaviours/bugs ๐
On the weekend just gone we also visited Twin Falls, which was absolutely magnificent!

495 turns and about ~4hrs alter I won! ๐ Small map, 2-players, myself and an AI player. ๐
-- It took forever to beach the island the AI player was on and get enough Galley's and Swordsmen just to push back and eventually slowly destroy all enemy units and capture all cities! ๐คฃ
The auDA, and some
WOW! I just had to share this little story I ran into today.
I tried to register a .AU Domain the other day, only for it to instantly fail.
I emailed support, which took several days to respond, only for them to respond by saying (paraphased):
We're sorry, but the identify checks failed. The 3rd-aprty service doesn't tell us why, But, please make sure that the ID you used matches the Full Name, including any Middle name(s).
I used my Passport number. Which of course has my First, Middle and Last Name.
I can only assume at this point that the checks failed on the missing "Middle name". Why? Because the Registrar I use has a database and user interface for "contacts" that only have support for First name and Last name. NO Middle Name.
๐คฆโโ๏ธ This is basically stupid at this point. Systems cannot be trusted at the most fundamental level, no matter how good they are.
Until we figure out how to build a system that allows an individual to prove to another entity that they are who they say they are without a shred of doubt (i.e: cryptographically), we're stuffed.
There is literally nothing I can do in this case. The auDA are at fault. The 3rd-party identify service (unknown) are at fault. The registrar are at fault. Hell, even the Passport office are at fault for even bothering to or requiring a Middle name.
How has "identity" come to this?
Just cancelled my sponsorship of two developers on Github, sorry ๐ -- I'm not going to sponsor going forward if no-one else can be bothered to. It seems silly to be the sole sponsor of another's work or project ๐คฆโโ๏ธ
Just a couple of shots from our trip to Bald Rockโfinally got reception so I can share them!

There is something about camping with your family and the togetherness and tranguility of being together ๐
2nd Van trip coming up this weekend, taking Friday off work. Gonna sleep in the Van tonight and see if I can fiddle with the town water supply (basically our outside tap near the Van haha ๐) and see if I can have a shower in the Van, brush my teeth and go to bed ๐ -- Basically I just want to figure out the rest of the plumbing ๐ช
This year for some reason or another, I decided to purchase an Ocarina, I've been practising a fair bit every now and again, basically during work breaks and sometimes in the afternoon / evenings (not enough to annoy the family ๐คฃ) Anyhoo, that was 3 months ago, since then I've built up a bit of a Repertoire:
- Silent Night
- My Bonnie Lies Over the Ocean
- Amazing Grace
- O Holy Night
- Happy Birthday
- Greensleeves
- Scarborough Fair
- Sheโll Be Coming โRound the Mountain
I've now decided to purchase a slightly better quality Ocarina, the one I originally bought was a cheap $28 one, I'm now upgrading to a more professional instrument worth about $80 -- Wish my luck ๐
Just learned this nice little life-hack for disconnecting MC4 Solar connectors ๐ Works really well! And I don't have to buy a special little MC4 assembly tool ๐ฅณ
sleeping in my van tonight, which is parked outside the front of our house just as a test from overnight ๐
๐ Looking for other interested folks to continue to evolve the development of Salty.im ๐ I've been hardโข at work on the v2 branch and @doesnm.p.psf.lt has been incredibly helpful so far. Be great ot have a few more folks to join us, some of the v2 highlights include:
- Double Ratchet by default.
- Group Chat (sender/client fan-out for now)
- Much better TUI with background agent.
- Mobile App coming soonโข (iOS in progress, Android next, same codebase)
Well it's ~2am and I finally defeated the AI player in a game of Frontier Crown ๐
-- On that note I'm now going to bed, I've made so many improvements to the aesthetics (UX) of the game, the mechanics, and it's now quite nicely playable ๐ G'night! ๐ด
I spent the day today integrating @xuu's double ratcheting work and [ratchet](Blank front page) library back into the reference client/broker implementation saltyim as a v2 branch. I completely redesigned and rewrite the salty-chat TUI client as well, which now includes proper notifications and a background agent that keeps running so you never miss any messages. It all "just works"โข and I'm quite happy with the outcome! ๐คฉ #saltyim #revamp
Built a new refreshed landing page for Salty IM https://salty.im/ ๐ฅณ
Trying an experiment. Created a Github repo for mu over at https://github.com/prologic/mu as a social experiment to see if we can maintain a tailored Github docs-only repo of a project, see if it gets any interest ๐ค
I think I'll never eat McDonald's fries/chips ever again ๐ฑ https://www.youtube.com/shorts/ITRtnPPJPsY
I built Audiofern to make it simple to turn PDFs into audiobooks. Upload a document, get clean, chapterized narration with natural voices, and share it via a hosted playerโor download M4A/M4B and keep it forever. Files are private by default, and pricing is transparent: pay once by audio hour or subscribe to build a listening library.
Have finally put together the beginnings of a site for Mu (ยต) https://mu-lang.dev ๐ค #mu #mu-lang
Behold! ๐ฅณ My first (hopefully it doesn't fail ๐ค) ยตSaaS (microSaaS)
Turn PDFs into audiobooks.
(only supports PDF(s) at the moment, books, papers, etc)
Happy reading/listening ๐ค ๐ #Audiofern #Audiobooks #microSaaS
This weekend, I'm building a service that turns PDFs into chaptered, audiobookโquality narration in minutesโupload, listen in a builtโin player, and download MP3/M4B files with clean metadata.
yes, yes that's right. Mu (ยต) now has a built-in LSP server for fans of VS Code / VSCodium ๐
You just go install ./cmd/mu-lsp/... and install the VS extension and hey presto ๐ฅณ You get outlines of any Mu source, Find References and Go to Definition!
Btw @movq you've inspired me to try and have a good 'ol crack at writing a bootloader, stage1 and customer microkernel (ยตKernel) that will eventually load up a Mu (ยต) program and run it! ๐คฃ I will teach Mu (ยต) to have a ./bin/mu -B -o ... -p muos/amd64 ... target.
Took me nearly all week (in my spare time), but Mu (ยต) finally officially support linux/amd64 ๐ฅณ I completely refactored the native code backend and borrowed a lot of the structure from another project called wazero (the zero dependency Go WASM runtime/compiler). This is amazing stuff because now Mu (ยต) runs in more places natively, as well as running everywhere Go runs via the bytecode VM interpreter ๐ค
This week, Mu (ยต) get s bit more serious and starts to refactor the native backend (a lot). Soonโข we will support darwin/arm64, linux/arm64 and linux/amd64 (Yes, other forms of BSD will come!) -- Mu (ยต) also last week grew concurrency support too! ๐คฃ
Mu (ยต) is coming along really nicely ๐คฃ Few things left to do (in order):
- Finish the concurrency support.
- Add support for sockets
- Add support for
linux/amd64 - Rewrite the heap allocator
- Rewrite Mu (ยต) in well umm Mu (ยต) ๐
Here's a screenshot showing off the builtin help(): 
Trying to build a native heap allocator that grows and isn't statically wired into the binary's image is fuck'n hardโข as ๐คฃ
Mu (ยต) is now getting much closer to where I want it to be, it now has:
- A
processstdlib module (very basic, but it works) - An
ffistdob module that supportsdlopen/dlsymand calling C functions with a nice mu-esque wrapperffi.fn(...) - A
sqlitestdlib module (also very basic) that shows off the FFI capabilities
๐
Opinion / Question time...
Do you think Mu (ยต)'s native compiler and therefore emitted machine code "runtime" (which obviously adds a bit of weight to the resulting binary, and runtime overheads) needs to support "runtime stack traces", or would it be enough to only support that in the bytecode VM interpreter for debuggability / quick feedback loops and instead just rely on flat (no stacktraces) errors in natively built compiled executables?
So in effect:
Stack Traces:
- Bytecode VM Interpreter: โ
- Native Code Executables: โ
Nice! ๐ Here are the startup latencies for the simplest Mu (ยต) program. println("Hello World"):
- Interpreter: ~5ms
- Native Code: ~1.5ms
Hmmm ๐ค
Excluding merges, 1 author has pushed 171 commits to main and 175 commits to all branches. On main, 294 files have changed and there have been 52880 additions and 18269 deletions.
From the Mu (ยต) Gitea Activity Tab
mu (ยต) now has builtin code formatting and linting tools, making ยต far more useful and useable as a general purpose programming language. Mu now includes:
- An interpreter for quick "scriptinog"
- A native code compiler for building native executables (Darwin / macOS only for now)
- A builtin set of developer tools, currently: fmt (-fmt), check (-check) and test (-test).
Whoo! I fixed one of the hardest bugs in mu (ยต) I think I've had to figure out. Took me several days in fact to figure it out. The basic problem was, println(1, 2) was bring printed as 1 2 in the bytecode VM and 1 nil when natively compiled to machine code on macOS. In the end it turned out the machine code being generated / emitted meant that the list pointers for the rest... of the variadic arguments was being slot into a register that was being clobbered by the mu_retain and mu_release calls and effectively getting freed up on first use by the RC (reference counting) garbage collector ๐คฆโโ๏ธ
Building native compilers is hard ๐คฃ Building bytecode VM / interpreters is way easier ๐คฃ
Hmmm I need to figure out a way to reduce the no. of lines of code / complexity of the ARM64 native code emitter for mu (ยต). It's insane really, it's a whopping ~6k SLOC, the next biggest source file is the compiler at only ~800 SLOC ๐ค
Hey EU friends ๐ wtf happened to the EU Internet today for about 40 minutes or so?
I cleaned up all my of AoC (Advent of Code) 2025 solutions, refactored many of the utilities I had to write as reusable libraries, re-tested Day 1 (but nothing else). here it is if you're curious! This is written in mu, my own language I built as a self-hosted minimal compiler/vm with very few types and builtins.
I finished all 12 days of Advent of Code 2025! #AdventOfCode https://adventofcode.com โ did it in my own language, mu (Go/Python-ish, dynamic, int/bool/string, no floats/bitwise). Found a VM bug, fixed it, and the self-hosted mu compiler/VM (written in mu, host in Go) carried me through. ๐ฅณ
Day 9 also required some optimizations, if you aren't careful, you end up with really inefficient algorithms with time/memory complexity beyond what a typical machine has ๐คฃ
Ooops, I've run into a bug or limitation with mu for Day 9 ๐ค
Day 7 was pretty tough, I initially ended up implementing an exponential in both time and memory solution that I killed because it was eating all the resources on my Mac Studio, and this poor little machine only has 32GB of memory (I stopped it at 118GB of memory, swapping badly!), This is what I ended up doing before/after:
- Before: Time O(2^k ยท L), memory O(2^k), where k is the number of splitters along a reachable path and L is path length. Exponential in k.
- After: Time O(RยทC) (or O(RยทC + s) with s split events), memory O(C), where R = rows, C = columns. Polynomial/linear in grid size.
I just completed "Printing Department" - Day 4 - Advent of Code 2025 #AdventOfCode https://adventofcode.com/2025/day/4 โ Again, Iโm doing this in mu, a Go(ish) / Python(ish) dynamic langugage that I had to design and build first which has very few builtins and only a handful of types (ints, no flots). ๐คฃ
I just completed "Lobby" - Day 3 - Advent of Code 2025 #AdventOfCode https://adventofcode.com/2025/day/3 -- Again, I'm doing this in mu, a Go(ish) / Python(ish) dynamic langugage that I had to design and build first which has very few builtins and only a handful of types (ints, no flots). ๐คฃ
Did I mention mu only supports ints? ๐ค I'm not sure if I'll need flots for this year's AoC? ๐ค
I'm having to write my own functions like this in mu just to solve AoC puzzles :D
fn pow10(k) {
p := 1
i := 0
while i < k {
p = p * 10
i = i + 1
}
return p
} I just completed "Gift Shop" - Day 2 - Advent of Code 2025 #AdventOfCode https://adventofcode.com/2025/day/2 -- But again, I'm solving this in my own language mu that I had to build first ๐คฃ
I just completed "Secret Entrance" - Day 1 - Advent of Code 2025 #AdventOfCode https://adventofcode.com/2025/day/1 --- However I did it in my own toy programming language called mu, which I had to build first ๐คฃ
Come back from my trip, run my AoC 2025 Day 1 solution in my own language (mu) and find it didn't run correctly ๐คฃ Ooops!
$ ./bin/mu examples/aoc2025/day1.mu
closure[0x140001544e0] And I'm back from my holidays! ๐ฅณ Back to work boo ๐
Went to Ba Na Hills today, but honestly it was so cold and misery i couldn't take very good photos ๐คฃ Here's a few shots i managed!
We'll all my posts are making it to the "Fediverse" https://bridge.twtxt.net/users/c350a5e5fb9d9457
I kind of hate conventional commit messages: https://www.conventionalcommits.org/en/v1.0.0/#summary
but I am loving reading RFC 2119: https://www.ietf.org/rfc/rfc2119.txt
I don't know what this fruit is called! The waiter at breakfast told me the Vietnamese name but I've since forgotten ๐ 
Found this place in Hanoi in Vietnam ๐ฅณ Amazinf beer!!! ๐บ 
AoC Day #1 solution (mu): https://gist.mills.io/prologic/d3c22bcbc22949939b715a850fe63131
Hmmmm the AoC site is not mobile friendly ๐ข
Can someone post the puzzles as Twts? ๐คฃ
Thinking about doing Advent of Code in my own tiny language mu this year.
mu is:
- Dynamically typed
- Lexically scoped with closures
- Has a Go-like curly-brace syntax
- Built around lists, maps, and first-class functions
Key syntax:
- Functions use
fnand braces:
fn add(a, b) {
return a + b
}
- Variables use
:=for declaration and=for assignment:
x := 10
x = x + 1
- Control flow includes
if/elseandwhile:
if x > 5 {
println("big")
} else {
println("small")
}
while x < 10 {
x = x + 1
}
- Lists and maps:
nums := [1, 2, 3]
nums[1] = 42
ages := {"alice": 30, "bob": 25}
ages["bob"] = ages["bob"] + 1
Supported types:
intboolstringlistmapfnnil
mu feels like a tiny little Go-ish, Python-ish language โ curious to see how far I can get with it for Advent of Code this year. ๐
Oh dear god ๐ฑ The level of pollution on Hanoi is insane ๐ฅบ I can't stop coughing outside ๐คฏ
this is apparently a famous lake in Hanoi city in Vietnam. Don't know what it's called though. 
We have arrived at our first hotel. but check-in isn't till 2PM ๐คฃ We arrived at 12:45PM ๐ 
I have to say. A well designed Hypermedia Driven Web Application such as yarndโ using HTMX is just as good, i'd not better, than one written in React.
One of the advantages of being vegetarian. you get served your in-flight meal first. before everyone else ๐คฃ 
fark'n hell! why are there so many actors on the bridge?! ๐คฏ (shadow twtxt feeds)
I think i may have fixed threading too but can't easily test now as i've left for my holiday and don't really use Mastodon ๐
@aelaraji Thanks for the account! I figured out one thing at least so far, my WAF was blocking some of the AP requests. Fixed that. Anyway, holiday time ๐คฃ Back in ~2 weeks.
I'm kind of tired of late of telling support folks, for example, ym registrar, how to do their fucking goddamn jobs ๐คฆโโ๏ธ
Hi James,
Thank you for your patience.
There are several reasons why a .au domain registration might fail or be cancelled, including inaccurate registrant information, ineligibility for a .au domain licence, or issues related to Australian law.
For a full list of possible reasons, please see this article: https://support.onlydomains.com/hc/en-gb/articles/6415278890141-Why-has-my-au-domain-registration-been-cancelled
If you believe none of these reasons apply to your case, please let us know so we can investigate further.
Best regards,
Yes, so tell me support person, why the fuck did it fail?! ๐คฌ
Good to see so many folks starting to come back to our little non-social social ecosystem ๐ Good to also see twtxt.net starting to peer with 7 other pods in the greater network too! ๐ฅณ
Sooooo looking forward to my holiday, after this week of work ๐คฏ 16 day holiday in Vietnam! Whoohoo ๐ค
Speaking of WAF(s) / Web Applicaiton Firewalls -- I actually had forgotten that not only have I designed a new WAF from scratch, but I've actually implemented it already, and done some local testing. I just haven't put it into production yet... What od you think @aelaraji ? ๐ค https://git.mills.io/prologic/caddy-waf
Sometimes, (just sometimes) my ability to pattern match and remember how to play perfect games of chess is awesome ๐ 
Anyone on my pod (twtxt.net) finding the new Filter(s) useful at all? ๐ค 
So blackholing my Gitea instance's DNS for the day seemed to have worked ๐คฃ (if only I had a real target I could have made their fucking crawlers DDoS themselves ๐) -- Let's also see if enabling DDoS proection on the Edge via Vultr's DDoS capability also helps? ๐ค
Something I caught myself saying earlier in the day:
As a human species we need to stop doing stupid shitโข.
--James Mills
T-shirt coming soonโข
Tired to re-enable the Ege route to git.mills.io today (after finishing work) and this is what I found ๐คฏ Tehse asshole/cunts are still at it !!! ๐คฌ -- So let's instead see if this works:
$ host git.mills.io 1.1.1.1
Using domain server:
Name: 1.1.1.1
Address: 1.1.1.1#53
Aliases:
git.mills.io is an alias for fuckoff.mills.io.
fuckoff.mills.io has address 127.0.0.1
PS: Would anyone be interested if I started a massive global class action suit against companies that do this kind of abusive web crawling behavior, violate/disregards robots.txt and whatever else standards that are set in stone by the W3C? ๐ค
Oh fuck me! I had basically turned off the route to git.mills.io last night and went ot bed at ~2AM after unsuccessfully trying to control the attacks (bad bots) that were behaving like a DDoS attack. Tried to re-enable the route this monring and *BOOM, they're back! As-if they never stopped?! what da actual fuq?!
Anyone have any clever ideas of what I can do here to allows normal users, like you nice folk and block ths obnoxious traffic?!
Fark me again with the bots. This time DDoS-style crawling from hundreds of IPs and dozens of ASN(s) wtf?!
I've had to disale the Ingress to my Git instance for the time being,
i need to sleep and I can't fight this :/
When I try to login to PayPal I now see:
Please enable JS and disable any ad blocker
Here's the thing. PayPal takes fees from transactions and payments received and sent.
I have very right not have ads shoved in my face for something that isn't actually free in the first place and costs money to use. If PayPal would like to continue to piss off folks me like, then I'll happily close my PayPal account and go somewhere else that doesn't shove ads in my face and consume 30-40% of my Internet bandwidth on useless garbage/crap.
My day (yesterday), stand up at 09:30AM (AEDT), P2 Incident at 10:20AM. End of my day 04:30AM (AEST) the next day! Oh my ๐คฃ ๐ฅ ๐คฆโโ๏ธ
Fark me ๐คฆโโ๏ธ I woke up quite late today (after a long night helping/assisting with a Mainframe migration last night fork work) to abusive traffic and my alerts going off. The impact? My pod (twtxt.net) was being hammered by something at a request rate of 30 req/s (there are global rate limits in place, but still...). The culprit? Turned out to be a particular IP 43.134.51.191 and after looking into who own s that IP I discovered it was yet-another-bad-customer-or-whatever from Tencent, so that entire network (ASN) is now blocked from my Edge:
+# Who: Tentcent
+# Why: Bad Bots
+132203
Total damage?
$ caddy-log-formatter twtxt.net.log | cut -f 1 -d ' ' | sort | uniq -c | sort -r -n -k 1 | head -n 5
61371 43.134.51.191
402 159.196.9.199
121 45.77.238.240
8 106.200.1.116
6 104.250.53.138
61k reqs over an hour or so (before I noticed), bunch of CPU time burned, and useless waste of my fucking time.
What do you do, when a recruiter throws you a PD or two and says the total compensation is ~2-3x what you're on now?! ๐ค
Boi am I glad I made the decision to get off of Clownflare back in Jan of this yaer ๐คฃ
Test (_did I fix this shitโข-)?
Hey @manton ๐ Why yes I believe I did!
Anyone run a Mastodon serve rI can have an account on to help test the Twtxt <-> Activity Pub bridge? ๐
Test @-mentioning an AP actor via the Bridge. Hey @manton ๐
WOW LOL
fetch https://weaknotes.com/users/david: status 500 Internal Server Error
First real test failed trying to lookup / follow @david@weaknotes.com
For those curious, the new Twtxt <-> ActivityPub bridge I'm building (bidirectional) simply requires three things:
- You register your Twtxt feed to the bridge: https://bridge.twtxt.net
- You verify that you in fact own/control the feed by putting the verification code somewhere on/in your feed (doesn't matter where or how)
- You proxy/forward requests for
/.well-known/webfingerto the Bridgebridge.twtxt.net.
I'm still testing through and ironing out bugs ๐ Please be patient! ๐
Testing new design, architecture and implementation of a Twtxt bridge I'm working on...
verification-token: ee9bc4da3356f4990671
Please ignore.
whoo fix a long stnading bug with identicons for feeds with no avatar in their metadata
Hint:
# nick = ...
# avatar = ... Hmmm all these tilde.club feeds have no # nick and is messing with yarnd's behavior ๐
Thank you for the encouragement and love and kind words, @lyse @movq @bender @doesnm and others along the way I'm not sure of their feed uris ๐ I'll keep at it, but for the time being I will keep my distance, mostly off IRC, because I don't have the energy to spare in that kind of engagement (what//if the worst happens, it's so draining). I need to remember what I ever did any of this for, it was back in ~2020 and I wanted really to build small interconnected communities that any non "tech savvy" person (more or less) could also benefit from ane enjoy. Even if there are aspects of the specs we've built/extended over time that aren't "perfect"โข, they're "good enough"โข that they've last 5+ years (I believe this is 6 years running now). I want to spend a bit of time going back to why I did any of this in the the first place, and get a little micro-SaaS offering going (barely covering running costs) so encourage more folks to run pods, and thus twtxt feeds and grow the community ever so slightly. Other than that, I plan to get the specs "in order" to a point (with @movq and @lyse's help) where I hope they'll stand the test of time -- like SMTP.
Thank you all ! ๐
PR to clean up some unwanted specs and cleanup some invalid/bad references. ๐
I just successfully used my own SnipMail service with a real business, whoohoo! ๐ฅณ
Thoughts/Opinions on Cap ๐ค
The modern, open-source CAPTCHA
Lightweight, self-hosted, privacy-friendly, and designed to put you first. Switch from reCAPTCHA in minutes.
I'm building a service that lets you:
create and manage disposable, brandable email aliases so you can track leaks, forward important messages, and keep your real inbox clean.
I've just finishing building it for the most part, and have cut a v0.1.0 release. It's currently closed source (to be decided later) and now open to beta testers. cc @bender ๐ I fully intend to monetize and offer this as a paid service in teh coming weeks/months, but beta/invite-only testers and early adopters/users first ๐ค
Scheduling the next Yarn.social Call for next month, a month in advance. Hope y'all can make the next one ๐ค
Okay folks I'm calling it. See y'all again next time. Hopefully more of you make it next time ๐ค
Let's do it! ๐ค https://meet.mills.io/call/Yarn.social
๐ Reminder that we're starting up our social calls again (monthly), RSVP here ๐ค It starts in 13h27m ๐ Hope to see some/all of you there ๐
๐ฅณ Just released Gatherly v0.3.0 ๐ค -- My instance is available at: https://gatherly.mills.io (free for anyone to use)
Apologies folks ๐ A bit of a bad electrical storm rolled through earlier. ๐ฉ๏ธ I looked kind of badโก๏ธ so I powered down the Mills DC ๐ค (out of precation).
Wow! ๐คฉ Are folks actually using Gatherly already? ๐ค 
Hmmm ๐ง I'm annectodaly not convinced so-called "AI"(s) really save timeโข. -- I have no proof though, I would need to do some concrete studies / numbers... -- But, there is one benefit... It can save you from typing and from worsening RSI / Carpal Tunnel.
Fixed following page template bug so cached feed counts render without errors. cc @bender
Reminder, kick-starting our monthly social call! ๐ Please RSVP if you can make it!
Hey all ๐ Starring up the monthly social call we used to have ๐ค Please RSVP here if you can make it! ๐
Behold! ๐ฅณ I consider Gatherly "good enough"โข to use: https://gatherly.mills.io/ ๐ค
Anyone interested in starting up the monthly social calls we used to have? ๐
I disabled the compression of logs on my edge, which I'm hoping will fix the "instability" I see every now and again where my edge network just "falls off the face of the earth". Some folks don't really appreciate / understand this, but Disk I/O can kill your application(s) no matter what. I/O Wait is a real thing.
๐ค ๐ญ ๐ง What if, What if we built our own self-hosted / small-web / community-built/run Internet on top of the Internet using Wireguard as the underlying tech? What if we ran our own Root DNS servers? What if we set a zero tolerance policy on bots, spammers and other kind of abuse that should never have existed in the first place. Hmmmm
I keep getting this email occadionally:
Your iCloud storage is almost full
Now for various reasons, I don't want my children to be using iCloud to store data, files, photos or any of the sort. They're free to use iMessages, and other Apple services like the App Store, etc, but not storage.
So I've set about blocking iCloud Storage API(s) via AdGuard Home tonight as well as ensuring that my local network (client users) cannot bypass DNS policies and get out other sneaky ways, because some applications will just use other DNS servers, or DOH or DOT.
And my new migrated blog is up woohoo ๐ฅณ https://prologic.blog/
I think I'm just about ready to go live with my new blog (migrated from MicroPub). I just finished migrating all of the content over, fixing up metadata, cleaning up, migrating media, optimizing media.
The new blog for prologic.blog soon to be powered by zs using the zs-blog-template is coming along very nicely ๐ It was actually pretty easy to do the migration/conversation in the end. The results are not to shabby either.
Before:
- ~50MB repo
- ~267 files
After:
- ~20MB repo
- ~88 files
Pretty happy with my zs-blog-template starter kit for creating and maintaining your own blog using zs ๐ Demo of what the starter kit looks like here -- Basic features include:
- Clean layout & typography
- Chroma code highlighting (aligned to your site palette)
- Accessible copy-code button
- โOn this pageโ collapsible TOC
- RSS, sitemap, robots
- Archives, tags, tag cloud
- Draft support (hidden from lists/feeds)
- Open Graph (OG) & Twitter card meta (default image + per-post overrides)
- Ready-to-use 404 page
As well as custom routes (redirects, rewrites, etc) to support canonical URLs or redirecting old URLs as well as new zs external command capability itself that now lets you do things like:
$ zs newpost
to help kick-start the creation of a new post with all the right "stuff"โข ready to go and then pop open your $EEDITOR ๐ค
https://zsblog.mills.io/ for anyone interested. I think I still have some small tweaking to do befor eI use this for realz.
Please don't hate me today; I'm a bit grumpy and have too many reasons to be upset:
- 2 counts of pushing and trying to get the simplest things done at work (that for some reason are made more difficult than they should be)
- This whole Chat Control bullshit
- And some other person things going on that have been ongoing for 72 days and counting ๐คฌ
Oh man, if the EU actually rolled out this horribd idea called ChatControl that actually threatens the security and privacy of secure e2e encrypted messaging like Signalโข, fuck me, I'm out ๐คฆโโ๏ธ I'll just rage quit the IT industry and become a luddite. I'm out.
I just created a zs blogging template which I'm going to use for https://prologic.blog and I might starting writing long-form again soonโข ๐ So far the "blogging" template/engine (if you weill) is quite simple. It comprises essentially of an index.md a prehook and a few utilities:
$ git ls-files
.gitignore
.zs/config.yml
.zs/editthispage
.zs/include
.zs/layout.html
.zs/list
.zs/months
.zs/now
.zs/onthispage
.zs/posthook
.zs/postsbymonth
.zs/prehook
.zs/scripts
.zs/styles
.zs/tagcloud
.zs/taglist
.zs/years
archives/.empty
assets/css/site.css
assets/js/main.js
index.md
posts/hello-zs-blog.md
posts/on-tagging.md
posts/second-post.md
tags/.empty TNO Threading (draft):
Each origin feed numbers new threads (tno:N). Replies carry both (tno:N) and (ofeed:<origin-url>). Thread identity = (ofeed, tno).
- Roots:
(tno:N)(implicitofeed=self). - Replies:
(tno:N) (ofeed:<url>). - Clients: increment
tnolocally for new threads, copy tags on reply. - Subjects optional, not required.
...
I'm out of town folks and away until tomorrow (have been all week)
Today is a good day! Took my daughter to art class, got a beard trim, wife is awesome and we're all doing great ๐ค๐
@ionores Love the new Avatar dude ๐ Very nice! ๐
Weekend! Whooo ๐คฃ Having a few too many glassses of ๐ท listening to music on Youtube and playing Chess which I haven't been playing much lately ๐ข
@itsericwoodward Also just a heads up, GIF(s) aren't supproted as an Avatar type on yarnd (what runs twtxt.net). I'd change this to something that's more supproted like PNG, JPEG, etc.
Today I finally got rid of my /29 IPv4 subnet with my ISP used to power my ingress. No longer.
This whole Age Verification that's being rolled out in the UK, AU and parts of the EU is totally fucking bullshit. Death to the Online Safety Act.
Been mucking around with designing my own camper (floor plan). 
Global update: Trump in Scotland says EU trade deal has 50-50 chance as tariff row grows. Gaza sees 9 more starvation deaths (122 total); UN says famine is deliberate. Thai-Cambodia clashes kill 16, displace 135k. US raid in Syria kills top ISIS leader & sons.
After many weeks and probably at least a hundred hours of research, discussions and in-person viewing, I think I've finally come up with my Final Choices (shortlist) of a Hybrid Camper / Caravan that I think will suit my family and that I'll enjoy (far less work for me to setup and teardown). The one at the top of the list I'm leaning towards os the SWAG SCT16 Family 4B
#Camping #Campers
Discover the OPUS OP4 TLX: The Perfect off-road Camper for Families Kind of thinking about this now hmmm ๐ค
Been spending a lot of time researching campers as I want to / plan to upgrade our current Camper Trailoer (forward fold) Stoney Creek XL-FF6 to a slightly larger Hybrid Camper/Caravan with ensuite, internal kitchenette, external full hitchen, pop-top roof and twin bunks.
This is the summary and whittling down of my research so far: https://wiki.mills.io/s/1103bc9c-dd75-4a98-b64b-8dadc5b0e51f/doc/comparision-Ln03Moiibq
How you can tell a "review post" on some random website was written by AI?
Ergonomically nicer than its binocular counterpart
How exactly is this a reason to avoid?! ๐คฆโโ๏ธ
Feeling a bit bad for the folks and Coffs Harbor and on the coast of Sydney right now ๐คฏ 
As promised, here's some photos of love you!! camping trip to Canarcon George in QLD, Australia.

https://threadreaderapp.com/thread/1935344122103308748.html Interesting article on how ChatGPT is rotting your brain ๐คฃ
Hmmm ๐ง Not what I thought was going on... No bug...
time="2025-06-14T15:24:25Z" level=info msg="updating feeds for 8 users"
time="2025-06-14T15:24:25Z" level=info msg="skipping 0 inactive users"
time="2025-06-14T15:24:25Z" level=info msg="skipping 0 subscribed feeds"
time="2025-06-14T15:24:25Z" level=info msg="updating 80 sources (stale feeds)" Great article from Tailscale about how security policies we've often seen in many large complex organizations that we all love to hate don't actually provide the security that we assumed.
I'm finding this very interesting... An evolved neural network that plays the game of tic-tac-toe and so far is a pretty decent player. Here is a visualization of it's evolved "brain" that underwent GA (genetic algorithm) training with classification learning + self-play. 
Please don't upload my code on Github!
I'm thinking about putting this up on all my projects and even on the front page of my Gitea instance ๐ค
prologic@JamessMacStudio
Sun May 25 21:44:41
~/tmp/neurog
(main) 130
$ go build ./cmd/ttt/... && ./ttt
Generation 27 | Fitness: 0.486111 | Nodes: 44 | Conns: 82
... experimenting with building and training a tic-tac-toe game, which evolves a. neural net that learn to paly the game against the best evolved champions ๐
Over the past few weeks I've been experimenting with and doing some deep learning and researching into neutral networks and evolutionary adaptation of them. The thing is I haven't gotten very far. I've been able to build two different approaches so far with limited results. The frustrating part is that these things are so "random" it isn't even funny. Like I can't even get a basic ANN + GA to evolve a network that solves the XOR pattern every time with high levels of accuracy. ๐
https://youtu.be/1GN3xBuAgrI?si=ezBYJeSOFgtBdjEu -- Can someone please just fire Trump already? What a fucking idiot?! The man is a lunatic ๐คฆโโ๏ธ
Hey y'all ๐ I am told my "participation" is drastically down of ,ate So sorry ๐ Busy quite a busy few weeks at work with a reorg and lots of complex things happening in real live too ๐ -- Hope everything is doing well ๐ค
I'm thinking of bringing back filters (this time not as a feature flag, just baked in): New filters: Hide Feed, Hide Bots, Hide News, Media Only, No Replies, Local Only โ toggle to trim noise & surface the Twts you care about.
Farrrk me Google search is and these days. Will they please "fuck off" with this Gemini AI garbage at the top that takes forever and is distracting as shitโข ๐ฉ Fark me ๐คฆโโ๏ธ #Google #Search #Sucks #AI #Gemini
Anyone want to help me alpha/beta test the new WAF I'm building? It's a Caddy module. ๐ค
Also spent the morning continuing to think about a new design for EdgeGuard's WAF. I'm basically going to build an entirely new pluggable WAF that will be designed to only consider Rate Limiting, IP/ASN-based filtering, JavaScript challenge handling, Basic behavioral analysis and Anomaly detection.
The only part of this design I'm not 100% sure about is the Javascript-based challenge handling? ๐ค I'm also considering making this into a "proof of work" requirement too, but I also don't want to falsely block folks that a) turn Javascriptโข off or b) Use a browser like links, elinks or lynx for example.
Hmmm ๐ง
Really hoping Elizabeth Watson Brown wins and hold her seat here in Ryan ๐
Going to try and few up a few more UX bugs today with yarnd.
@kat / @xuu Recommend you git checkout main && git pull, rebuild and redeploy: make build, and however you deploy. ๐ Lots of fixes (no more stalling) and optimizations to the feed fetcher, smoother cpu usage, better internal metrics.
Hey @kat If you see this, I'm aware of a bug. I'm trying to figure it out and fix it. bare with me ๐ค It is what's causing things to "stall" and to have to "restart". Sorry ๐
After yarnd v0.16 is released and the next round of specification updates are done and dusted, who wants me to have another crack at building Twtxt and activity pub integration support?
LOL Amazon displaying tariff prices "hostile and political," White House say is this the kettle calling the pot black? ๐คฃ Trump, pfft, what a fucking idiot. No clue how economies work, let alone countries.
03:45
Nothing like being paged at 00:30 (midnight) for a P2 incident that is now resolved at 02:10 ๐คฏ Obviously I'm not going to work tomorrow (I mean today lol ๐) at the usual start time ๐คฆโโ๏ธ
Finally I propose that we increase the Twt Hash length from 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
And speaking of Twtxt (See: #xushlda, feeds should be treated as append-only. Your client(s) should be appending Twts to the bottom of the file. Edits should never modify the timestamp of the Twt being edited, nor should a Twt that was edited by deleted, unless you actually intended to delete it (but that's more complicated as it's very hard to control or tell clients what to do in a truely decentralised ecosystem for the deletion case). #Twtxt #Client #Recommendations
Just like we don't write emails by hand anymore (See: #a3adoka), we donโt manually write Twts or update our twtxt.txt feeds. Instead, we use modern Twtxt clients that conform to the specifications at Twtxt.dev for a seamless, automated experience. #Twtxt #Twt #UserExperience
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
Wrote some serious Python for the first time in like 10 years ๐ฑ I feel so dirty ๐คฃ
I have a great idea for fixing the US economy. Get rid of all the nuclear weapons ๐คฃ
Today I added support for Let's Encrypt to eris via DNS-01 challenge. Updated the gcore libdns package I wrote for Caddy, Maddy and now Eris. Add support for yarn's cache to support # type = bot and optionally # retention = N so that feeds like @tiktok work like they did before, and... Updated some internal metrics in yarnd to be IMO "better", with queue depth, queue time and last processing time for feeds.
$ bat https://twtxt.net/twt/edgwjcq | jq '.subject'
""
hahahahaha ๐คฃ Does your client allow you to do this or what? ๐ค
Interesting factoid... By inspecting my "followers" list every now and again, I can tell who uses a client like jenny, tt or any other client where fetches are driven by user interactions of invoking the app. What do we call this type of client? Hmmm ๐ค Then I can tell who uses yarnd because they are "seen" more frequently ๐คฃ
First draft of yarnd 0.16 release notes. ๐ -- Probably needs some tweaking and fixing, but it's sounding alright so far ๐ #yarnd
A visual flow chart diagram that illustrates how two different but very related concepts can lead to system accidents ๐ 
- asynchronous evolution
- drift into failure
@andros One thing I really liked about the hacker news rss feeds is the link to the comments. Reckon you can add that to the feed? ๐ค
You Will Never Be Able To Change A Man. Monique Marvez - YouTube Soo fucking good! ๐ Haha so many laughs!!! ๐
Iโm thinking of building a hardened peering protocol for Yarn.socialโs yarnd: pods establish cryptographic identities, exchange signed /info and /twt payloads with signature verification, ensuring authenticity, integrity, and spoof-proof identity validation across the distributed network.
@xuu or @kat Do either of you have time this weekend to test upgrading your pod to the new cacher branch? ๐ค It is recommended you take a full backup of you pod beforehand, just in case. Keen to get this branch merged and to cut a new release finally after >2 years ๐คฃ
My pod twtxt.net feels very clear of late hmmm ๐ง This is good right? ๐
Responded to a bunch of Twtxt open issues across multiple repositories today ๐
I guess mentions with .(s) / dot(s) like @eapl.me are valid? ๐ค Or nicks even? ๐ค
Getting Forked by Microsoft โข Philip Laine ๐ Yet another pretty sad story of a megacorp (Microsoft) being total assholes ๐ข
Regex Isn't Hard - Tim Kellogg ๐ this is a pretty good conscience article on regexes, and I agree, regex isn't that hardโข -- However I think I can make the TL;DR even shorter ๐
Regex core subset (portable across languages):
Character sets โข a matches โaโ โข [a-z] any lowercase โข [a-zA-Z0-9] alphanumeric โข [^ab] any char but a or b
Repetition (applies to the preceding atom) โข ? zero or one โข * zero or more โข + one or more
Groups โข (ab)+ matches โabโ, โababโ, โฆ โข Capture for extract/substitute via $1 or \1
Operators โข foo|bar = foo or bar โข ^ start anchor โข $ end anchor
Ignore nonโportable shortcuts: \w, ., {n}, *?, lookarounds.
Just had a freak storm โ๏ธ with lots of horizontal rain โ๏ธ that took out and tripped our internal RCD (again) ๐ฑ Took out our Fibre too (servers were fine, good 'ol UPS). Need to get a UPS for the Fibre box ๐ฆ Haha ๐คฃ
๐ก I had this crazy idea (or is it?) last night while thinking about Twtxt and Yarn.social ๐
There are two things I think that could be really useful additions to the yarnd UI/UX experience (for those that use it) and as "client" features (not spec changes). The two ideas are quite simple:
- Voting -- a way to cast, collect a vote on a decision, topic or opinion.
- RSVP -- a way to "rsvp" to a virtual (pr physical) event.
Both would use "plain text" on top of the way we already use Twtxt today and clients would render an appropriate UI/UX.
Am I the only one that's confused by the discussions, and then the voting we had on the whole threading model? ๐ค I'm not even sure what I voted for, but I know it wasn't the one that won haha ๐คฃ (which I'm still very much against for based on an intuition, experience and lots of code writing lately).
@bender I noticed that although the Discover view (and your own Timeline) is much improved with a MaxAgeDays configuration at the pod level, that now some profiles are rather empty. This is only because well, they're a bit "inactive" so to speak ๐ฃ๏ธ Not sure what to do about this at the moment... Open to ideas? ๐ก
AI isnโt a shortcut for thinking. In her guide for skeptics, Hilary Gridley reframes AI as a collaboratorโnot a replacement. Use it like spellcheck for your thoughts. Donโt fear itโiterate with it. Insight improves, speed follows. Full post: https://hils.substack.com/p/the-ai-skeptics-guide-to-ai-collaboration
Hmmm there's a bug somewhere in the way I'm ingesting archived feeds ๐ค
sqlite> select * from twts where content like 'The web is such garbage these days%';
hash = 37sjhla
feed_url = https://twtxt.net/user/prologic/twtxt.txt/1
content = The web is such garbage these days ๐ Or is it the garbage search engines? ๐ค
created = 2024-11-14T01:53:46Z
created_dt = 2024-11-14 01:53:46
subject = <a href="?search=37sjhla" class="tag">#37sjhla</a>
mentions = []
tags = []
links = []
sqlite> Btw @andros ; The automated feed you put together for Hacker News... Does it at any point rewrite parts of the feed as it goes along? ๐ค I've had to unfollow it because I've found in practise it makes a twt, then seems to modify that same twt (observed by content manually) at least twice. This ends up becoming effectively an "Edit" and essentially duplicate (looking) posts ๐ข
I asked ChatGPT what it knows about Twtxt ๐ And surprisingly it's rather accurate:
Twtxt is a minimalist, decentralized microblogging format introduced by John Downey in 2016. It uses plain text files served over HTTPโno accounts, databases, or APIs. In 2020, James Mills (@prologic) launched Yarn.social, an extended, federated implementation with user discovery, threads, mentions, and a full web UI. Both share the same .twtxt.txt format but differ in complexity and social features.
Oh hey @rrraksamam ๐ Welcome back! ๐ Sorry about the data loss ๐คฏ
Add support for skipping backup if data is unchagned ยท 0cf9514e9e - backup-docker-volumes - Mills ๐ I just discovered today, when running backups, that this commit is why my backups stopped working for the last 4 months. It wasn't that I was forgetting to do them every month, I broke the fucking tool ๐คฃ Fuck ๐คฆโโ๏ธ
There are now two (recentish) quotes I really like these days:
The smartest person in the room is not the one with all the answersโitโs the one whoโs brave enough to ask the dumb questions
and
The kindest person in the room is often the smartest
Based on a recent study of the brains of mice I estimated the human brain to have 200B cells/neurons and 50,000T connections. We have several orders of magnitude to go before we reach that kind of scale with these fucking stupid Big LLMs ๐คฃ And the best part of all? ๐ง It is estimated that the human brain only consumes the equivalent of 5 Watts of power !!! ๐คฃ๐คฃ๐คฃ
@bender You will be pleased to know that yarnd now only consumes ~60-80MB of memory depending on load ๐คฃ And bugger all CPU ๐
@kate @eldersnake @abucci -- I've already spoken to @xuu on IRC about this, but the new 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? ๐ค
๐ฃ I'm going to try and restore a few accounts tonight ๐ค
Search syntax appears to be:
hello
"hello world"
hello AND world
hello OR world
hello NOT world
"this is a phrase" FYI: I've re-opened up search for anonymous use. So things like this now work without having to have an account on this pod or login. ๐ #search #twtxt
Is it just me or is there a display bug for "Yarn"(s) that are duplicating the root twt? ๐ค
This weekend (as some of you may now) I accidently nuke this Pod's entire data volume ๐คฆโโ๏ธ What a disastrous incident ๐คฃ I decided instead of trying to restore from a 4-month old backup (we'll get into why I hadn't been taking backups consistently later), that we'd start a fresh! ๐ Spring clean! ๐งผ -- Anyway... One of the things I realised was I was missing a very critical Safety Controls in my own ways of working... I've now rectified this...
I need to get Peering working again on this branch! That will drag in many Twts Twts I now no longer have ๐ญ
At least I've fixed many bugs with the new SQLiteCache ๐คฃ
Oh well. I've gone and done it again! This time I've lost 4 months of data because for some reason I've been busy and haven't been taking backups of all the things I should be?! ๐ค Farrrrk ๐คฌ
Timeline Sandbox
Testinf image upload fixes...
Testing image upload fixes ๐






Our first test over night trip ๐ค








