# 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 196277
# self = https://watcher.sour.is?offset=172738
# next = https://watcher.sour.is?offset=172838
# prev = https://watcher.sour.is?offset=172638
@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.
It's no worse than what we have now, it's better. But yes caveats still apply.
@movq Yup.
@movq Yup.
@prologic So this hinges on clients keeping a history of the twt hashes. Clients that clean their cache or simply start following a feed later on have no way of reconstructing older twt hash versions and thus no way of reconstructing existing threads. Right?
@prologic So this hinges on clients keeping a history of the twt hashes. Clients that clean their cache or simply start following a feed later on have no way of reconstructing older twt hash versions and thus no way of reconstructing existing threads. Right?
@prologic So this hinges on clients keeping a history of the twt hashes. Clients that clean their cache or simply start following a feed later on have no way of reconstructing older twt hash versions and thus no way of reconstructing existing threads. Right?
@prologic So this hinges on clients keeping a history of the twt hashes. Clients that clean their cache or simply start following a feed later on have no way of reconstructing older twt hash versions and thus no way of reconstructing existing threads. Right?
@slashdot No 😅
@slashdot No 😅
@doesnm I think it's a good idea to fork twet and continue to improve it. It's an "okay" Twtxt cli client, but it needs a bit more work 👌
@doesnm I think it's a good idea to fork twet and continue to improve it. It's an "okay" Twtxt cli client, but it needs a bit more work 👌
@doesnm Sorry I meant twet 🤦‍♂️
@doesnm Sorry I meant twet 🤦‍♂️
@lyse See @movq 's undersanding. Now this had some edge cases that we agreed probably aren't worth solving for.
@lyse See @movq 's undersanding. Now this had some edge cases that we agreed probably aren't worth solving for.
@movq Yes 👍
@movq Yes 👍
What a sunny Sunday. I'm going to harvest the apples from the garden.
What a sunny Sunday. I'm going to
[47°09′10″S, 126°43′38″W] Transfer aborted
@prologic I'm afraid, I don't understand how the edit detection works so that it does not break threads. All I see is that some hash in a subject is missing.
It has twts cache which used if timeline is set to jew. Maybe i.should fork twet to make wishes like newlines (i see two squares), showing conversations, showing twts if not found in cache and parsing medata to configure url, nick and followers (currenly it duplicated in config and twtxt file)
@prologic Okay. So it goes like this:

My client fetches a feed. It builds a map/hashmap/dictionary of all twts: Timestamps map to twt hashes. It then stores/shows the twts. It also stores the hashmap.

On the next fetch operation, the client re-processes all twts in the feed. It must now compare each timestamp to the previously built hashmap: Aha, timestamp T has now a twt hash of B instead of A, so this is an edited twt.

Did I understand that correctly so far? 🤔
@prologic Okay. So it goes like this:

My client fetches a feed. It builds a map/hashmap/dictionary of all twts: Timestamps map to twt hashes. It then stores/shows the twts. It also stores the hashmap.

On the next fetch operation, the client re-processes all twts in the feed. It must now compare each timestamp to the previously built hashmap: Aha, timestamp T has now a twt hash of B instead of A, so this is an edited twt.

Did I understand that correctly so far? 🤔
@prologic Okay. So it goes like this:

My client fetches a feed. It builds a map/hashmap/dictionary of all twts: Timestamps map to twt hashes. It then stores/shows the twts. It also stores the hashmap.

On the next fetch operation, the client re-processes all twts in the feed. It must now compare each timestamp to the previously built hashmap: Aha, timestamp T has now a twt hash of B instead of A, so this is an edited twt.

Did I understand that correctly so far? 🤔
@prologic Okay. So it goes like this:

My client fetches a feed. It builds a map/hashmap/dictionary of all twts: Timestamps map to twt hashes. It then stores/shows the twts. It also stores the hashmap.

On the next fetch operation, the client re-processes all twts in the feed. It must now compare each timestamp to the previously built hashmap: Aha, timestamp T has now a twt hash of B instead of A, so this is an edited twt.

Did I understand that correctly so far? 🤔
Thank you very much, @prologic! <3 When leaving the unpleasant towns, one can really enjoy the stunning landscape here. Very refreshing.

Yep, these are some sick mushrooms. No idea what they are, though. Not sure if they're edible more than once or not, but I have a feeling that one should refrain from trying. The ones I photographed here were in a nature reserve. They were a bit bigger than the others we came across on meadows. Still impressive sizes nevertheless.
@lyse Pretty nice views 👌 I enjoyed reading this. It was though I were there in the morning walking with you guys up to the summit man those mushrooms really are quite some aren't they? 🙃
@lyse Pretty nice views 👌 I enjoyed reading this. It was though I were there in the morning walking with you guys up to the summit man those mushrooms really are quite some aren't they? 🙃
@movq Yes! Basically @david points out that if we mandate that authors should retain the original timestamp in their feed when adjusting content, making fixes, etc, that they retain the original timestamp and leave it unaltered. We already do this anyway, we just need to say so.

Now we have a situation where folks participating in a "conversation" (thread) with appropriate clients can automatically detect edits with almost 100% accuracy by mere fact that the next time they fetch a feed that contains an edit, they now see two versions of the Twt with two different hashes, but identical timestamps.

You can use the fetch time to approximate a "version number" and deal with the display (UX) appropriately.

I can't believe I didn't think of this before 🤦‍♂️
@movq Yes! Basically @david points out that if we mandate that authors should retain the original timestamp in their feed when adjusting content, making fixes, etc, that they retain the original timestamp and leave it unaltered. We already do this anyway, we just need to say so.

Now we have a situation where folks participating in a "conversation" (thread) with appropriate clients can automatically detect edits with almost 100% accuracy by mere fact that the next time they fetch a feed that contains an edit, they now see two versions of the Twt with two different hashes, but identical timestamps.

You can use the fetch time to approximate a "version number" and deal with the display (UX) appropriately.

I can't believe I didn't think of this before 🤦‍♂️
There we go!

=> twtxt.dev

🥳=
There we go!

=> twtxt.dev

🥳=
@prologic Any more details on the edit stuff? 🤔
@prologic Any more details on the edit stuff? 🤔
@prologic Any more details on the edit stuff? 🤔
@prologic Any more details on the edit stuff? 🤔
@doesnm I will have something up soon™ 🤞
@doesnm I will have something up soon™ 🤞
@doesnm twt probably isn't the best client I'm afraid. It doesn't really cache twts by their key (hash) to display threads properly. Jenny however does 👌
@doesnm twt probably isn't the best client I'm afraid. It doesn't really cache twts by their key (hash) to display threads properly. Jenny however does 👌
Yesterday's April weather offered nearly everything. Sun, rain, clouds, wind. Luckily, the rain wasn't too bad, we precautionally brought our rain jackets and took cover under some trees for 5-10 minutes. From then on, it alternated mostly between sunny and cloudy. Perfect conditions for photography.

The 16°C felt pretty cold with all the wind. Especially at the summit for a late lunch. The clouds covered the sun for almost the entire time and the wind blew hard. Being sweaty from the way up didn't help. The sun returned as soon as we packed up.

On the way home, it drizzled just a little bit, although the clouds were really dark. A nice surprise. All in all, we had a really nice hike. As a bonus, my mate established a new train ride record low to get home, despite all the Octoberfest crap going on right now.

Colorful leaves on a tree

From my 395 photos, I only kept 40: https://lyse.isobeef.org/waldspaziergang-2024-09-28/ In 18's upper left corner you can see a black beetle similar to what I've seen earlier this week. The one that rolled over its side to change directions, this one didn't, though.

The mushroom in 35 and 36 was enormous, easily 20 centimeters in diameter. We came across a few of them along our journey.
[47°09′50″S, 126°43′37″W] Bad satellite signal -- switching to analog communication
Only with dovecot xD. For mail im use android native mail client and not mutt. And jenny display some errors with found some files and /tmp dir (android dont have /tmp)
twet display twts in raw format with some formatting (sadly no newlines). And for reply messages i just seen (#hash). But which text hidden on hash? currenly im open twtxt.net/twt/hash to see this
Yes, im also do not like Hugo so rewrite theme above to Jekyll (with some changes)
Here's what I've got so far...