# 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 196258
# self = https://watcher.sour.is?offset=172785
# next = https://watcher.sour.is?offset=172885
# prev = https://watcher.sour.is?offset=172685
Thanks @david, good to know, but we need to agree on what character we use, otherwise the hashes will not be the same:)
Thanks @david, good to know, but we need to agree on what character we use, otherwise the hashes will not be the same:)
Thanks @david, good to know, but we need to agree on what character we use, otherwise the hashes will not be the same:)
Thanks @david, good to know, but we need to agree on what character we use, otherwise the hashes will not be the same:)
@sorenpeter a TAB is simply \\t. Just add it to that echo line, and that's it.
@sorenpeter a TAB is simply \t. Just add it to that echo line, and that's it.
Oh boy, I'm looking for trapezoidal (like ACME thread) screws and nuts in left hand form. The rods are already expensive, but nuts feel like a total ripoff. A hex nut for Tr20x2 being 30mm long and 30mm in "diameter" costs me 22 bucks! O_o Just a single one, made of regular steel. A meter of rod is 21€. The more common Tr20x4 hex nut is just 7€ and the rod 17€, but 4mm pitch is a bit much for a leadscrew for semi-precision work I reckon.

Well, maybe I just use metric threads. I will sleep on this.
@prologic from IRC:

> "Hashes will increase then, and will use SHA256 instead? That is the end result of weeks long discussions, correct?"
@lyse Maybe you're right: Let's pause this while edit/delete discussions.
@lyse Maybe you're right: Let's pause this while edit/delete discussions.
[47°09′05″S, 126°43′31″W] Dosimeter still failing
@mckinley they are fighting to make more money. Seeing it any other way is rather naïve.
@prologic That can only work if I happen to have the original one as well. But what are the odds for that? Quite low I'd say. It's rare that I see a once working thread to be cactus later on. Usually, when I arrive, police already broke up the party. Yarnd might be more lucky in that it constantly pulls, but I don't.

Anyway, I won't implement that in my client. Sounds too much effort for the tiny gain.
****
¿Sabéis cuando queda 1 minuto para que acabe la lavadora? Pues con esos minutos hacen los lunes. ⌘ Read more****
Ta, @movq and @bender! No, that is Wäschenbeuren: https://en.wikipedia.org/wiki/W%C3%A4schenbeuren My town is in the opposite direction.

And yes, it literally took hours to remove 90% of the photos. It's the necessary evil. I'm never looking forward to the sorting process. The longer the hike, the worse the aftermath.

We had 3°C the other night, quite cold. That's the price to pay for the nice temperatures at daytime.
@aelaraji You could just remove the {getuser()} part because you added ~.~
/https://baldo.cat/media/photos/IMG_2174.jpeg) #catsoftwtxt
#catsoftwtxt
#catsoftwtxt
@doesnm 👌
@doesnm 👌
****
El tiempo es relativo, ya lo dijo Einstein. ⌘ Read more****
Understand, ok seems i should leave gemini untouched
@bender Good point! 👌 I'll make it so 👌
@bender Good point! 👌 I'll make it so 👌
@prologic yup, it was muted. I didn't do it purposely, though. I truly don't know how that happened. That beget the question, shouldn't that be disallowed? That is, muting ourselves should not be possible. That same for following/blocking ourselves (if that breaks functionality).
On my blog: Developer Diary, International Translation Day https://john.colagioia.net/blog/2024/09/30/translation.html #programming #project #devjournal
On my blog: Developer Diary, International Translation Day https://john.colagioia.net/blog/2024/09/30/translation.html #programming #project #devjournal
@doesnm No.

> iirc in twtxt v2 it starts prohibited

This is not true. There are no issues supporting fetching feeds via Gemini/Gopher. This is totally fine. What will likely happen is "recommendations" and "drawbacks of using Gemini/Gopher"
@doesnm No.

> iirc in twtxt v2 it starts prohibited

This is not true. There are no issues supporting fetching feeds via Gemini/Gopher. This is totally fine. What will likely happen is "recommendations" and "drawbacks of using Gemini/Gopher"
[47°09′52″S, 126°43′54″W] Dosimeter malfunction
I mean thread command but bash escapes quoted as command...
Ok, i know how to command working (not sure), but seems it only grab from cache. Maybe make fetch from twtxt.net if hash not found?
@prologic Regarding the new way of generating twt-hashes, to me it makes more sense to use tabs as separator instead of spaces, since the you can just copy/past a line directly from a twtxt-file that already go a tab between timestamp and message. But tabs might be hard to "type" when you are in a terminal, since it will activate autocomplete...🤔

Another thing, it seems that you sugget we only use the domain in the hash-creation and not the full path to the twtxt.txt

$ echo -e "https://example.com 2024-09-29T13:30:00Z Hello World!" | sha256sum - | awk '{ print $1 }' | base64 | head -c 12
@prologic Regarding the new way of generating twt-hashes, to me it makes more sense to use tabs as separator instead of spaces, since the you can just copy/past a line directly from a twtxt-file that already go a tab between timestamp and message. But tabs might be hard to "type" when you are in a terminal, since it will activate autocomplete...🤔

Another thing, it seems that you sugget we only use the domain in the hash-creation and not the full path to the twtxt.txt

$ echo -e "https://example.com 2024-09-29T13:30:00Z Hello World!" | sha256sum - | awk '{ print $1 }' | base64 | head -c 12
@prologic Regarding the new way of generating twt-hashes, to me it makes more sense to use tabs as separator instead of spaces, since the you can just copy/past a line directly from a twtxt-file that already go a tab between timestamp and message. But tabs might be hard to "type" when you are in a terminal, since it will activate autocomplete...🤔

Another thing, it seems that you sugget we only use the domain in the hash-creation and not the full path to the twtxt.txt

$ echo -e "https://example.com 2024-09-29T13:30:00Z Hello World!" | sha256sum - | awk '{ print $1 }' | base64 | head -c 12
@prologic Regarding the new way of generating twt-hashes, to me it makes more sense to use tabs as separator instead of spaces, since the you can just copy/past a line directly from a twtxt-file that already go a tab between timestamp and message. But tabs might be hard to "type" when you are in a terminal, since it will activate autocomplete...🤔

Another thing, it seems that you sugget we only use the domain in the hash-creation and not the full path to the twtxt.txt

$ echo -e "https://example.com 2024-09-29T13:30:00Z Hello World!" | sha256sum - | awk '{ print $1 }' | base64 | head -c 12
should i delete gemini support from twet? iirc in twtxt v2 it starts prohibited. And all of my fields are https
Really you stopped 22hrs ago? https://twtxt.net/twt/iaautmq
Really you stopped 22hrs ago? https://twtxt.net/twt/iaautmq
Hmm da fuq?! @tiktok ?
Hmm da fuq?! @tiktok ?
[47°09′42″S, 126°43′43″W] 4182 days without news from Herve
**** ⌘ Read more****
[47°09′24″S, 126°43′56″W] Saalmi, retransmit, please
@bender I see it here hmm 🤔 Dis you accidentally mute your own Twt?
@bender I see it here hmm 🤔 Dis you accidentally mute your own Twt?
ryudo v1.6, less is more | https://nilfm.cc/ryudo.html
🧮 USERS:1 FEEDS:2 TWTS:1108 ARCHIVED:79604 CACHE:2650 FOLLOWERS:17 FOLLOWING:14
A silly little toy for browsing 8 little fractal programs: https://merveilles.town/@akkartik/113223478101430311
A silly little toy for browsing 8 little fractal programs: https://merveilles.town/@akkartik/113223478101430311
+1 👆
+1 👆
+1 👆
@doesnm me too! 🤭 (kidding, kidding!)
@off_grid_living is it locked because of a DRM thing or something else?

Otherwise you can check if you already have the pdftotext command that comes with the poppler-utils package, try converting converting the pdf into a text file and copy to your heart's content. I have just tried it myself.

If you don't have it already here's what you can do on Ubuntu or any Debian based distribution of Linux:

- Update and upgrade your packages:
> sudo apt update && sudo apt upgrade
- Install the poppler-utils package
> sudo apt install poppler-utils
- Now you can convert your pdf to txt file with:
> pdftotxt -layout -enc UTF-8 name_of_source_file.pdf name_of_destination_file.txt

You can always do a pdftotxt --help to see the rest of possible options.
Hope this helps.
@off_grid_living is it locked because of a DRM thing or something else?

Otherwise you can check if you already have the pdftotext command that comes with the poppler-utils package, try converting converting the pdf into a text file and copy to your heart's content. I have just tried it myself.

If you don't have it already here's what you can do on Ubuntu or any Debian based distribution of Linux:

- Update and upgrade your packages:
> sudo apt update && sudo apt upgrade
- Install the poppler-utils package
> sudo apt install poppler-utils
- Now you can convert your pdf to txt file with:
> pdftotxt -layout -enc UTF-8 name_of_source_file.pdf name_of_destination_file.txt

You can always do a pdftotxt --help to see the rest of possible options.
Hope this helps.
@off_grid_living is it locked because of a DRM thing or something else?

Otherwise you can check if you already have the pdftotext command that comes with the poppler-utils package, try converting converting the pdf into a text file and copy to your heart's content. I have just tried it myself.

If you don't have it already here's what you can do on Ubuntu or any Debian based distribution of Linux:

- Update and upgrade your packages:
> sudo apt update && sudo apt upgrade
- Install the poppler-utils package
> sudo apt install poppler-utils
- Now you can convert your pdf to txt file with:
> pdftotxt -layout -enc UTF-8 name_of_source_file.pdf name_of_destination_file.txt

You can always do a pdftotxt --help to see the rest of possible options.
Hope this helps.
No, im just crazy (joke)
@off_grid_living mind sharing the PDF, to take a look? Some PDF containing text as images, which makes it more difficult to complete the task you want to perform.
[47°09′28″S, 126°43′12″W] Re-taking samples
@doesnm am I understanding correctly that you do not have a desktop/laptop computer, but a pocket Android based one?
@doesnm that was a quick and dirty thing I wanted to try 😄 but of course, you can point it wherever you believe it should.
@doesnm that was a quick and dirty thing I wanted to try 😄 but of course, you can point it wherever you believe it should.
@doesnm that was a quick and dirty thing I wanted to try 😄 but of course, you can point it wherever you believe it should.
Lol, good but why why not /data/data/com.termux/files/usr/tmp?
#catsoftwtxt
#catsoftwtxt
/https://baldo.cat/media/photos/IMG_2167.jpeg) #catsoftwtxt
[47°09′47″S, 126°43′15″W] Reading: 0.72 Sv
I believe I'd missed an f:


f
~/src/jenny $ git diff
diff --git a/jenny b/jenny
index ada8da2..8ae9a06 100755
--- a/jenny
+++ b/jenny
@@ -1194,7 +1194,7 @@ if __name__ == '__main__':
     if args.edit:
	edit_twt_file(app)
     elif args.fetch:
-        with DirectoryLock(f'/tmp/jenny-{getuser()}.run'):
+        with DirectoryLock(expanduser(f'~/tmp/jenny-{getuser()}.run')):
             retrieve_all(app)
     elif args.last_seen:
	 print('Feeds last seen at (times are local time), oldest first:')
I believe I'd missed an f:


f
~/src/jenny $ git diff
diff --git a/jenny b/jenny
index ada8da2..8ae9a06 100755
--- a/jenny
+++ b/jenny
@@ -1194,7 +1194,7 @@ if __name__ == '__main__':
     if args.edit:
	edit_twt_file(app)
     elif args.fetch:
-        with DirectoryLock(f'/tmp/jenny-{getuser()}.run'):
+        with DirectoryLock(expanduser(f'~/tmp/jenny-{getuser()}.run')):
             retrieve_all(app)
     elif args.last_seen:
	 print('Feeds last seen at (times are local time), oldest first:')
I believe I'd missed an f:


f
~/src/jenny $ git diff
diff --git a/jenny b/jenny
index ada8da2..8ae9a06 100755
--- a/jenny
+++ b/jenny
@@ -1194,7 +1194,7 @@ if __name__ == '__main__':
     if args.edit:
\tedit_twt_file(app)
     elif args.fetch:
-        with DirectoryLock(f'/tmp/jenny-{getuser()}.run'):
+        with DirectoryLock(expanduser(f'~/tmp/jenny-{getuser()}.run')):
             retrieve_all(app)
     elif args.last_seen:
\t print('Feeds last seen at (times are local time), oldest first:')
@doesnm I've just given it a try on android/termux and got it to work, I can't promise it won't break something else (because i definitely don't know what I'm doing) but here's what I broke 😅:

f
~/src/jenny $ git diff
diff --git a/jenny b/jenny
index ada8da2..8ae9a06 100755
--- a/jenny
+++ b/jenny
@@ -1194,7 +1194,7 @@ if __name__ == '__main__':
     if args.edit:
	edit_twt_file(app)
     elif args.fetch:
-        with DirectoryLock(f'/tmp/jenny-{getuser()}.run'):
+        with DirectoryLock(expanduser('~/tmp/jenny-{getuser()}.run')):
             retrieve_all(app)
     elif args.last_seen:
	 print('Feeds last seen at (times are local time), oldest first:')


and of course make sure you mkdir ~/tmp~
@doesnm I've just given it a try on android/termux and got it to work, I can't promise it won't break something else (because i definitely don't know what I'm doing) but here's what I broke 😅:

f
~/src/jenny $ git diff
diff --git a/jenny b/jenny
index ada8da2..8ae9a06 100755
--- a/jenny
+++ b/jenny
@@ -1194,7 +1194,7 @@ if __name__ == '__main__':
     if args.edit:
	edit_twt_file(app)
     elif args.fetch:
-        with DirectoryLock(f'/tmp/jenny-{getuser()}.run'):
+        with DirectoryLock(expanduser('~/tmp/jenny-{getuser()}.run')):
             retrieve_all(app)
     elif args.last_seen:
	 print('Feeds last seen at (times are local time), oldest first:')


and of course make sure you mkdir ~/tmp~
@doesnm I've just given it a try on android/termux and got it to work, I can't promise it won't break something else (because i definitely don't know what I'm doing) but here's what I broke 😅:

f
~/src/jenny $ git diff
diff --git a/jenny b/jenny
index ada8da2..8ae9a06 100755
--- a/jenny
+++ b/jenny
@@ -1194,7 +1194,7 @@ if __name__ == '__main__':
     if args.edit:
\tedit_twt_file(app)
     elif args.fetch:
-        with DirectoryLock(f'/tmp/jenny-{getuser()}.run'):
+        with DirectoryLock(expanduser('~/tmp/jenny-{getuser()}.run')):
             retrieve_all(app)
     elif args.last_seen:
\t print('Feeds last seen at (times are local time), oldest first:')


and of course make sure you mkdir ~/tmp~
Rightfully so, @xuu pod has it on cache: https://txt.sour.is/twt/v6eemvq. This pod (twtxt.net), knows nothing about it, so it seems.
Hamming's *The Art of Doing Science and Engineering* is definitely up on my reading list.
Blown away by the elegance of Hamming codes for error detection. Pure beauty. The folks at Bell Labs were such legends of their craft.
I don’t see it on the client (Yarn), but as you can see it is on the raw feed. 🧐
@prologic I wonder where did this one went to:


2024-09-29T12:08:15Z	(#7wdvhia) @<lyse https://lyse.isobeef.org/twtxt.txt> love 27! Is that your town as seeing from the mountain, or some other town? From 395 to 40 is quite some picking! I figure that’s the most difficult part, right?

Ah, 16°C… what dreams are made of! 😍
@prologic I wonder where did this one went to:


2024-09-29T12:08:15Z\t(#7wdvhia) @<lyse https://lyse.isobeef.org/twtxt.txt> love 27! Is that your town as seeing from the mountain, or some other town? From 395 to 40 is quite some picking! I figure that’s the most difficult part, right?

Ah, 16°C… what dreams are made of! 😍
@movq Hmmm 🤔 Intuitively I say "No they're not the same"; but let me sleep on it 🙏😴
@movq Hmmm 🤔 Intuitively I say "No they're not the same"; but let me sleep on it 🙏😴
@prologic If I understand correctly, then this means that twt hashes no longer uniquely refer to one specific twt. When someone talks about #1234567, it could refer to the original or some edit of it. It is up to clients to find out what this hash could mean (by keeping a historical database of all feed versions, basically).

Isn’t this *essentially* the same as only including url and timestamp in the hash?
@prologic If I understand correctly, then this means that twt hashes no longer uniquely refer to one specific twt. When someone talks about #1234567, it could refer to the original or some edit of it. It is up to clients to find out what this hash could mean (by keeping a historical database of all feed versions, basically).

Isn’t this *essentially* the same as only including url and timestamp in the hash?
@prologic If I understand correctly, then this means that twt hashes no longer uniquely refer to one specific twt. When someone talks about #1234567, it could refer to the original or some edit of it. It is up to clients to find out what this hash could mean (by keeping a historical database of all feed versions, basically).

Isn’t this *essentially* the same as only including url and timestamp in the hash?
@prologic If I understand correctly, then this means that twt hashes no longer uniquely refer to one specific twt. When someone talks about #1234567, it could refer to the original or some edit of it. It is up to clients to find out what this hash could mean (by keeping a historical database of all feed versions, basically).

Isn’t this *essentially* the same as only including url and timestamp in the hash?
@bender Just once I tell ya:

> Ah, 16°C… what dreams are made of! 😍

I'd like it to be a nice cool 16°C here 🤣
@bender Just once I tell ya:

> Ah, 16°C… what dreams are made of! 😍

I'd like it to be a nice cool 16°C here 🤣
@lyse love 27! Is that your town as seeing from the mountain, or some other town? From 395 to 40 is quite some picking! I figure that’s the most difficult part, right?

Ah, 16°C… what dreams are made of! 😍
@lyse The view from the top of the “mountains” never gets old. 😊
@lyse The view from the top of the “mountains” never gets old. 😊
@lyse The view from the top of the “mountains” never gets old. 😊
@lyse The view from the top of the “mountains” never gets old. 😊
Personally I don't see it as a problem. I didn't even really see edits as a problem either tbh, but this is just an incremental improvement I think.
Personally I don't see it as a problem. I didn't even really see edits as a problem either tbh, but this is just an incremental improvement I think.
It's no worse than what we have now, it's better. But yes caveats still apply.