Each origin feed numbers new threads
(tno:N)
. Replies carry both (tno:N)
and (ofeed:<origin-url>)
. Thread identity = (ofeed, tno)
.
Example:
Alice starts thread href=”https://txt.sour.is/search?q=%2342:”>#42:**
2025-09-25T12:00:00Z (tno:42) Launching storage design review.
Bob replies:
2025-09-25T12:05:00Z (tno:42) (ofeed:https://alice.example/twtxt.txt
) I think compaction stalls under load.
Carol replies to Bob:
2025-09-25T12:08:00Z (tno:42) (ofeed:https://alice.example/twtxt.txt
) Token bucket sounds good.
[47°09′51″S, 126°43′42″W] Raw reading: 0x688F08F2, offset +/-5
[47°09′42″S, 126°43′42″W] Taking samples
[47°09′42″S, 126°43′38″W] 4482 days without news from Herve
[47°09′42″S, 126°43′32″W] Dosimeter malfunction
[47°09′42″S, 126°43′58″W] Bad satellite signal – switching to analog communication
[47°09′42″S, 126°43′45″W] Dosimeter fixed
[47°09′43″S, 126°43′42″W] Weather forecast alert – storm from SE
[47°09′42″S, 126°43′15″W] Transponder malfunction
[47°09′31″S, 126°43′42″W] Transfer aborted
[47°09′27″S, 126°43′42″W] Wind speed: N/A – Cannot comunicate
[47°09′43″S, 126°43′42″W] Reading: 0.44000 PPM
[47°09′56″S, 126°43′42″W] Reading: 1.53 Sv
[47°09′42″S, 126°43′24″W] Carrier too weak
One of the nicest things about Go is the language itself, comparing Go to other popular languages in terms of the complexity to learn to be proficient in:
- Go:
25
keywords (Stack Overflow); CSP-style concurrency (goroutines & channels)
- Python 2:
30
keywords (TutorialsPoint); GIL-bound threads & multiprocessing (Wikipedia)
- Python 3:
35
keywords (Initial Commit); GIL-bound threads,asyncio
& multiprocessing (Wikipedia, DEV Community)
- Java:
50
keywords (Stack Overflow); threads +java.util.concurrent
(Wikipedia)
- C++:
82
keywords (Stack Overflow);std::thread
, atomics & futures (en.cppreference.com)
- JavaScript:
38
keywords (Stack Overflow); single-threaded event loop &async/await
, Web Workers (Wikipedia)
- Ruby:
42
keywords (Stack Overflow); GIL-bound threads (MRI), fibers & processes (Wikipedia)
[47°09′42″S, 126°43′45″W] Dosimeter overflow
[47°09′51″S, 126°43′42″W] Transponder fixed
[47°09′04″S, 126°43′42″W] Transfer aborted
[47°09′42″S, 126°43′40″W] Taking samples
[47°09′45″S, 126°43′42″W] Raw reading: 0x68171071, offset +/-3
[47°09′42″S, 126°43′31″W] Wind speed: N/A – Cannot comunicate
[47°09′57″S, 126°43′42″W] Wind speed: N/A – Cannot comunicate
[47°09′42″S, 126°43′06″W] Transfer 75% complete…
[47°09′42″S, 126°43′28″W] Reading: 0.64000 PPM
[47°09′17″S, 126°43′42″W] 4371 days without news from Herve
[47°09′50″S, 126°43′42″W] Bad satellite signal – switching to analog communication
@kat@yarn.girlonthemoon.xyz Pointers can be a bit tricky. I know it took me also quite some time to wrap my head around them. Let my try to explain. It’s a pretty simple, yet very powerful concept with many facets to it.
A pointer is an indirection. At a lower level, when you have some chunk of memory, you can have some actual values sitting in there, ready for direct use. A pointer, on the other hand, points to some other location where to look for the values one’s actually after. Following that pointer is also called dereferencing the pointer.
I can’t come up with a good real-world example, so this poor comparison has to do. It’s a bit like you have a book (the real value that is being pointed to) and an ISBN referencing that book (the pointer). So, instead of sending you all these many pages from that book, I could give you just a small tag containing the ISBN. With that small piece of information, you’re able to locate the book. Probably a copy of that book and that’s where this analogy falls apart.
In contrast to that flawed comparision, it’s actually the other way around. Many different pointers can point to the same value. But there are many books (values) and just one ISBN (pointer).
The pointer’s target might actually be another pointer. You typically then would follow both of them. There are no limits on how long your pointer chains can become.
One important property of pointers is that they can also point into nothingness, signalling a dead end. This is typically called a null pointer. Following such a null pointer calls for big trouble, it typically crashes your program. Hence, you must never follow any null pointer.
Pointers are important for example in linked lists, trees or graphs. Let’s look at a doubly linked list. One entry could be a triple consisting of (actual value, pointer to next entry, pointer to previous entry).
_______________________
/ ________\_______________
↓ ↓ | \
+---+---+---+ +---+---+-|-+ +---+---+-|-+
| 7 | n | x | | 23| n | p | | 42| x | p |
+---+-|-+---+ +---+-|-+---+ +---+---+---+
| ↑ | ↑
\_______/ \_______/
The “x” indicates a null pointer. So, the first element of the doubly linked list with value 7 does not have any reference to a previous element. The same is true for the next element pointer in the last element with value 42.
In the middle element with value 23, both pointers to the next (labeled “n”) and previous (labeled “p”) elements are pointing to the respective elements.
You can also see that the middle element is pointed to by two pointers. By the “next” pointer in the first element and the “previous” pointer in the last element.
That’s it for now. There are heaps ;-) more things to tell about pointers. But it might help you a tiny bit.
[47°09′04″S, 126°43′42″W] Transfer 50% complete…
[47°09′02″S, 126°43′42″W] Transfer aborted
[47°09′07″S, 126°43′42″W] Analyzing samples
[47°09′42″S, 126°43′08″W] Transponder still failing – switching to analog communication
[47°09′47″S, 126°43′42″W] Dosimeter overflow
[47°09′42″S, 126°43′32″W] Wind speed: 78kph
[47°09′42″S, 126°43′56″W] Reading: 1.59000 PPM
[47°09′32″S, 126°43′42″W] Automatic systems disengaged due to heavy rain
[47°09′42″S, 126°43′22″W] Working impossible due to thunderstorm
[47°09′15″S, 126°43′42″W] Transponder fixed
[47°09′42″S, 126°43′33″W] Reading: 0.30000 PPM
@prologic@twtxt.net Of course you don’t notice it when yarnd only shows at most the last n messages of a feed. As an example, check out mckinley’s message from 2023-01-09T22:42:37Z. It has “[Scheduled][Scheduled][Scheduled]“… in it. This text in square brackets is repeated numerous times. If you search his feed for closing square bracket followed by an opening square bracket (][
) you will find a bunch more of these. It goes without question he never typed that in his feed. My client saves each twt hash I’ve explicitly marked read. A few days ago, I got plenty of apparently years old, yet suddenly unread messages. Each and every single one of them containing this repeated bracketed text thing. The only conclusion is that something messed up the feed again.
[47°09′42″S, 126°43′51″W] 4319 days without news from Herve
[47°09′34″S, 126°43′42″W] Weather forecast alert – storm from E
[47°09′59″S, 126°43′42″W] Storm recedes – back to normal work
[47°09′32″S, 126°43′42″W] Taking samples
[47°09′42″S, 126°43′01″W] Waiting for carrier
[47°09′42″S, 126°43′47″W] Raw reading: 0x6780B762, offset +/-5
[47°09′42″S, 126°43′32″W] Reading: 1.08000 PPM
[47°09′42″S, 126°43′47″W] –interrupted–
[47°09′27″S, 126°43′42″W] Working impossible due to blizzard
[47°09′37″S, 126°43′42″W] Weather forecast alert – storm from NW
[47°09′42″S, 126°43′44″W] Transfer 50% complete…
[47°09′34″S, 126°43′42″W] Weather forecast alert – storm from S
[47°09′02″S, 126°43′42″W] –no signal–
[47°09′19″S, 126°43′42″W] Bad satellite signal – switching to analog communication
[47°09′42″S, 126°43′21″W] Wind speed: 105kph
[47°09′34″S, 126°43′42″W] Wind speed: 82kph – batteries low
[47°09′06″S, 126°43′42″W] Reading: 1.45 Sv
[47°09′13″S, 126°43′42″W] Weather forecast alert – storm from W
[47°09′27″S, 126°43′42″W] Carrier too weak
[47°09′57″S, 126°43′42″W] Transfer 25% complete…
[47°09′44″S, 126°43′42″W] Working impossible due to heavy rain
[47°09′42″S, 126°43′48″W] –interrupted–
[47°09′19″S, 126°43′42″W] Transponder fixed
[47°09′27″S, 126°43′42″W] Transponder jammed
[47°09′55″S, 126°43′42″W] –interrupted–
[47°09′42″S, 126°43′04″W] Analyzing samples
[47°09′42″S, 126°43′41″W] Taking samples
[47°09′42″S, 126°43′30″W] Automatic systems disengaged due to blizzard
[47°09′42″S, 126°43′14″W] Transponder malfunction
[47°09′42″S, 126°43′25″W] –bad checksum–
[47°09′03″S, 126°43′42″W] Non-significative results – sampling finished
[47°09′07″S, 126°43′42″W] Re-taking samples
[47°09′42″S, 126°43′03″W] Dosimeter overflow
Hmm:
42 75 69 6C 64 20 77 68 61 74 20 6D 61 6B 65 73 20 79 6F 75 20 68 61 70 70 79 2E 20 4C 65 74 20 6D 69 73 65 72 61 62 6C 65 20 70 65 6F 70 6C 65 20 62 75 69 6C 64 20 74 68 65 20 72 65 73 74 2E
[47°09′42″S, 126°43′43″W] 4182 days without news from Herve
Something @anth@a.9srv.net said on ITC
17:42 I should also note in there that it doesn’t address the two things i really want it to: mandate utf-8 (which should be easy to fit in) and something for better @ mentions.
I actually agree with in both counts and it got me thinking…
[47°09′36″S, 126°43′42″W] Reading: 0.10 Sv
[47°09′27″S, 126°43′42″W] Waiting for carrier
[47°09′03″S, 126°43′42″W] Storm recedes – back to normal work
@movq@www.uninformativ.de I figured it will be something like this, yet, you were able to reply just fine, and I wasn’t. Looking at your twtxt.txt
I see this line:
2024-09-16T17:37:14+00:00 (#o6dsrga) @<prologic https://twtxt.net/user/prologic/twtxt.txt>
@<quark https://ferengi.one/twtxt.txt> This is what I get. 🤔
Which is using the right hash. Mine, on the other hand, when I replied to the original, old style message (Message-Id: <o6dsrga>
), looks like this:
2024-09-16T16:42:27+00:00 (#o) @<prologic https://twtxt.net/user/prologic/twtxt.txt> this was your first twtxt. Cool! :-P
What did you do to make yours work? I simply went to the oldest @prologic@twtxt.net’s entry on my Maildir, and replied to it (jenny
set the reply-to
hash to #o
, even though the Message-Id
is o6dsrga
). Since jenny
can’t fetch archived twtxts, how could I go to re-fetch everything? And, most importantly, would re-fetching fix the Message-Id:
?
This is how my original message shows up on jenny
:
From: quark <quark>
Subject: (#o) @prologic this was your first twtxt. Cool! :-P
Date: Mon, 16 Sep 2024 12:42:27 -0400
Message-Id: <k7imvia@twtxt>
X-twtxt-feed-url: https://ferengi.one/twtxt.txt
(#o) @<prologic https://twtxt.net/user/prologic/twtxt.txt> this was your first twtxt. Cool! :-P
[47°09′42″S, 126°43′00″W] Saalmi, retransmit, please
[47°09′05″S, 126°43′42″W] –white noise–
[47°09′48″S, 126°43′21″W] Reading: 1.42 Sv
[47°09′42″S, 126°43′25″W] Transponder jammed
[47°09′42″S, 126°43′09″W] Storm recedes – back to normal work
[47°09′25″S, 126°43′42″W] Weather forecast alert – storm from NW
[47°09′57″S, 126°43′42″W] Dosimeter overflow
[47°09′42″S, 126°43′38″W] Storm recedes – back to normal work
[47°09′32″S, 126°43′42″W] Dosimeter malfunction
[47°09′38″S, 126°43′42″W] Wind speed: 53kph – batteries low
[47°09′15″S, 126°43′42″W] Transponder jammed
[47°09′55″S, 126°43′42″W] Raw reading: 0x66996631, offset +/-3
[47°09′51″S, 126°43′42″W] Reading: 1.66000 PPM
[47°09′49″S, 126°43′42″W] Dosimeter fixed
[47°09′17″S, 126°43′42″W] –white noise–
[47°09′13″S, 126°43′42″W] Transfer completed
[47°09′02″S, 126°43′42″W] Storm recedes – back to normal work
[47°09′42″S, 126°43′26″W] Resetting dosimeter
[47°09′42″S, 126°43′13″W] Transponder fixed
[47°09′42″S, 126°43′19″W] –bad checksum–