# 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 15372
# self = https://watcher.sour.is?uri=https://www.uninformativ.de/twtxt.txt&offset=12175
# next = https://watcher.sour.is?uri=https://www.uninformativ.de/twtxt.txt&offset=12275
# prev = https://watcher.sour.is?uri=https://www.uninformativ.de/twtxt.txt&offset=12075
Lest we forget Mosaic: https://movq.de/v/f85fd317b3/mosaic.jpg
Lest we forget Mosaic: https://movq.de/v/f85fd317b3/mosaic.jpg
Lest we forget Mosaic: https://movq.de/v/f85fd317b3/mosaic.jpg
Lest we forget Mosaic: https://movq.de/v/f85fd317b3/mosaic.jpg
In the process of tweaking my little static HTML index/thumbnail creator so that it a) properly supports dark/ligh mode and, more importantly, b) gracefully degrades on ancient browsers.

Why? Because I often exchange data via HTTP with old systems and my tooling automatically invokes that indexer/thumbnailer script. 🥴 It’s really annoying when I just see garbage in Netscape 2 or IE5.

Screenshots and videos: https://movq.de/v/348819c482
In the process of tweaking my little static HTML index/thumbnail creator so that it a) properly supports dark/ligh mode and, more importantly, b) gracefully degrades on ancient browsers.

Why? Because I often exchange data via HTTP with old systems and my tooling automatically invokes that indexer/thumbnailer script. 🥴 It’s really annoying when I just see garbage in Netscape 2 or IE5.

Screenshots and videos: https://movq.de/v/348819c482
In the process of tweaking my little static HTML index/thumbnail creator so that it a) properly supports dark/ligh mode and, more importantly, b) gracefully degrades on ancient browsers.

Why? Because I often exchange data via HTTP with old systems and my tooling automatically invokes that indexer/thumbnailer script. 🥴 It’s really annoying when I just see garbage in Netscape 2 or IE5.

Screenshots and videos: https://movq.de/v/348819c482
In the process of tweaking my little static HTML index/thumbnail creator so that it a) properly supports dark/ligh mode and, more importantly, b) gracefully degrades on ancient browsers.

Why? Because I often exchange data via HTTP with old systems and my tooling automatically invokes that indexer/thumbnailer script. 🥴 It’s really annoying when I just see garbage in Netscape 2 or IE5.

Screenshots and videos: https://movq.de/v/348819c482
Found this in an old copyright notice from 1993:

> These images are not for use with the Microsoft Windows environment. Using these patterns in a Windows environment consitutes a copyright violation.

Someone clearly didn’t like Windows.
Found this in an old copyright notice from 1993:

> These images are not for use with the Microsoft Windows environment. Using these patterns in a Windows environment consitutes a copyright violation.

Someone clearly didn’t like Windows.
Found this in an old copyright notice from 1993:

> These images are not for use with the Microsoft Windows environment. Using these patterns in a Windows environment consitutes a copyright violation.

Someone clearly didn’t like Windows.
Found this in an old copyright notice from 1993:

> These images are not for use with the Microsoft Windows environment. Using these patterns in a Windows environment consitutes a copyright violation.

Someone clearly didn’t like Windows.
@quark

> I think you are worrying about a non-issue.

That’s what I do best. 😏
@quark

> I think you are worrying about a non-issue.

That’s what I do best. 😏
@quark

> I think you are worrying about a non-issue.

That’s what I do best. 😏
@quark

> I think you are worrying about a non-issue.

That’s what I do best. 😏
@aelaraji @quark Yep, I like it as well. 😅

There’s another situation that I’m not quite happy with.

Suppose there’s a twt like this:

2024-08-28T19:57:58Z @person_a @person_b Hey! 👋

There’s no hash, so --fetch-context won’t do anything at the moment.

*Option A*: jenny asks interactively to fetch those feeds *once*.

No thread hash found
Do you want to fetch the entire feed https://foo.example.com/tw.txt? \n y
Do you want to fetch the entire feed gemini://a.b.c/tw.txt? \n n

(Bonus points for skipping feeds that you already follow.)

*Option B*: There could be an external/third-party tool that scans a twt for all mentions and asks the user if they want to *follow* them (permanently). Why an external tool? The thing is, the follow file has been completely user-managed so far and I kind of want to keep it that way. And if this is an external tool, then users can do all kinds of fancy stuff, like using fzf or whatever. Or it could allow the user to *preview* the feed before following it. I don’t want to have stuff like that in the core program, it depends too much on users’ preferences.

To “implement” option B, I’d only add some hints to the docs, maybe an example.

I think I’m leaning towards option B at the moment. 🤔
@aelaraji @quark Yep, I like it as well. 😅

There’s another situation that I’m not quite happy with.

Suppose there’s a twt like this:

2024-08-28T19:57:58Z @person_a @person_b Hey! 👋

There’s no hash, so --fetch-context won’t do anything at the moment.

*Option A*: jenny asks interactively to fetch those feeds *once*.

No thread hash found
Do you want to fetch the entire feed https://foo.example.com/tw.txt? [Y/n] y
Do you want to fetch the entire feed gemini://a.b.c/tw.txt? [Y/n] n

(Bonus points for skipping feeds that you already follow.)

*Option B*: There could be an external/third-party tool that scans a twt for all mentions and asks the user if they want to *follow* them (permanently). Why an external tool? The thing is, the follow file has been completely user-managed so far and I kind of want to keep it that way. And if this is an external tool, then users can do all kinds of fancy stuff, like using fzf or whatever. Or it could allow the user to *preview* the feed before following it. I don’t want to have stuff like that in the core program, it depends too much on users’ preferences.

To “implement” option B, I’d only add some hints to the docs, maybe an example.

I think I’m leaning towards option B at the moment. 🤔
@aelaraji @quark Yep, I like it as well. 😅

There’s another situation that I’m not quite happy with.

Suppose there’s a twt like this:

2024-08-28T19:57:58Z @person_a @person_b Hey! 👋

There’s no hash, so --fetch-context won’t do anything at the moment.

*Option A*: jenny asks interactively to fetch those feeds *once*.

No thread hash found
Do you want to fetch the entire feed https://foo.example.com/tw.txt? [Y/n] y
Do you want to fetch the entire feed gemini://a.b.c/tw.txt? [Y/n] n

(Bonus points for skipping feeds that you already follow.)

*Option B*: There could be an external/third-party tool that scans a twt for all mentions and asks the user if they want to *follow* them (permanently). Why an external tool? The thing is, the follow file has been completely user-managed so far and I kind of want to keep it that way. And if this is an external tool, then users can do all kinds of fancy stuff, like using fzf or whatever. Or it could allow the user to *preview* the feed before following it. I don’t want to have stuff like that in the core program, it depends too much on users’ preferences.

To “implement” option B, I’d only add some hints to the docs, maybe an example.

I think I’m leaning towards option B at the moment. 🤔
@aelaraji @quark Yep, I like it as well. 😅

There’s another situation that I’m not quite happy with.

Suppose there’s a twt like this:

2024-08-28T19:57:58Z @person_a @person_b Hey! 👋

There’s no hash, so --fetch-context won’t do anything at the moment.

*Option A*: jenny asks interactively to fetch those feeds *once*.

No thread hash found
Do you want to fetch the entire feed https://foo.example.com/tw.txt? [Y/n] y
Do you want to fetch the entire feed gemini://a.b.c/tw.txt? [Y/n] n

(Bonus points for skipping feeds that you already follow.)

*Option B*: There could be an external/third-party tool that scans a twt for all mentions and asks the user if they want to *follow* them (permanently). Why an external tool? The thing is, the follow file has been completely user-managed so far and I kind of want to keep it that way. And if this is an external tool, then users can do all kinds of fancy stuff, like using fzf or whatever. Or it could allow the user to *preview* the feed before following it. I don’t want to have stuff like that in the core program, it depends too much on users’ preferences.

To “implement” option B, I’d only add some hints to the docs, maybe an example.

I think I’m leaning towards option B at the moment. 🤔
@aelaraji @quark Yep, I like it as well. 😅

There’s another situation that I’m not quite happy with.

Suppose there’s a twt like this:

2024-08-28T19:57:58Z @person_a @person_b Hey! 👋

There’s no hash, so --fetch-context won’t do anything at the moment.

*Option A*: jenny asks interactively to fetch those feeds *once*.

No thread hash found
Do you want to fetch the entire feed https://foo.example.com/tw.txt? [Y/n] y
Do you want to fetch the entire feed gemini://a.b.c/tw.txt? [Y/n] n

(Bonus points for skipping feeds that you already follow.)

*Option B*: There could be an external/third-party tool that scans a twt for all mentions and asks the user if they want to *follow* them (permanently). Why an external tool? The thing is, the follow file has been completely user-managed so far and I kind of want to keep it that way. And if this is an external tool, then users can do all kinds of fancy stuff, like using fzf or whatever. Or it could allow the user to *preview* the feed before following it. I don’t want to have stuff like that in the core program, it depends too much on users’ preferences.

To “implement” option B, I’d only add some hints to the docs, maybe an example.

I think I’m leaning towards option B at the moment. 🤔
@prologic The equator is your enemy. Stay away from it, as far as you can! 😱

(I just looked it up, your “winter” is barely cooler than our “summer”, according to those fancy climate diagrams and my rough understanding of them. 😅)
@prologic The equator is your enemy. Stay away from it, as far as you can! 😱

(I just looked it up, your “winter” is barely cooler than our “summer”, according to those fancy climate diagrams and my rough understanding of them. 😅)
@prologic The equator is your enemy. Stay away from it, as far as you can! 😱

(I just looked it up, your “winter” is barely cooler than our “summer”, according to those fancy climate diagrams and my rough understanding of them. 😅)
@prologic The equator is your enemy. Stay away from it, as far as you can! 😱

(I just looked it up, your “winter” is barely cooler than our “summer”, according to those fancy climate diagrams and my rough understanding of them. 😅)
@lyse Oh my goodness...! 🤣
@lyse Oh my goodness...! 🤣
@lyse Oh my goodness...! 🤣
@lyse Oh my goodness...! 🤣
@quark Oh dear, 87% humidity probably don’t feel great, either. 🥴 That’s what I have in the bathroom after leaving the shower. 😂

> I am ready for our winter too, you know, that whole week

lol 😅
@quark Oh dear, 87% humidity probably don’t feel great, either. 🥴 That’s what I have in the bathroom after leaving the shower. 😂

> I am ready for our winter too, you know, that whole week

lol 😅
@quark Oh dear, 87% humidity probably don’t feel great, either. 🥴 That’s what I have in the bathroom after leaving the shower. 😂

> I am ready for our winter too, you know, that whole week

lol 😅
@quark Oh dear, 87% humidity probably don’t feel great, either. 🥴 That’s what I have in the bathroom after leaving the shower. 😂

> I am ready for our winter too, you know, that whole week

lol 😅
35°C and rising … can haz winter?
35°C and rising … can haz winter?
35°C and rising … can haz winter?
35°C and rising … can haz winter?
@quark @falsifian FWIW, this has landed in main. 👌
@quark @falsifian FWIW, this has landed in main. 👌
@quark @falsifian FWIW, this has landed in main. 👌
@quark @falsifian FWIW, this has landed in main. 👌
@quark Hmmmm, threads with unread messages are always un-collapsed here. 🤔 I can’t even collapse them on purpose, mutt doesn’t let me.

Maybe that’s a mutt vs. neomutt thing?
@quark Hmmmm, threads with unread messages are always un-collapsed here. 🤔 I can’t even collapse them on purpose, mutt doesn’t let me.

Maybe that’s a mutt vs. neomutt thing?
@quark Hmmmm, threads with unread messages are always un-collapsed here. 🤔 I can’t even collapse them on purpose, mutt doesn’t let me.

Maybe that’s a mutt vs. neomutt thing?
@quark Hmmmm, threads with unread messages are always un-collapsed here. 🤔 I can’t even collapse them on purpose, mutt doesn’t let me.

Maybe that’s a mutt vs. neomutt thing?
@quark I think just putting it there as a second line should work. 😅
@quark I think just putting it there as a second line should work. 😅
@quark I think just putting it there as a second line should work. 😅
@quark I think just putting it there as a second line should work. 😅
@quark Ah, startinsert, didn’t even know that existed, tbh. 😅

It doesn’t work because the editor command is currently not run through sh -c ..., i.e. it is supposed to be just a path like /usr/bin/vim. I was just stumped by this myself and I think I’ll soon push a patch to allow setting something like vim -c foo.

In the meantime, your best option is probably putting this in your .vimrc:

au BufRead,BufNewFile jenny-posting.eml normal $

(I use something similar to disable hard text wrapping after 72 chars for twtxt postings.)
@quark Ah, startinsert, didn’t even know that existed, tbh. 😅

It doesn’t work because the editor command is currently not run through sh -c ..., i.e. it is supposed to be just a path like /usr/bin/vim. I was just stumped by this myself and I think I’ll soon push a patch to allow setting something like vim -c foo.

In the meantime, your best option is probably putting this in your .vimrc:

au BufRead,BufNewFile jenny-posting.eml normal $

(I use something similar to disable hard text wrapping after 72 chars for twtxt postings.)
@quark Ah, startinsert, didn’t even know that existed, tbh. 😅

It doesn’t work because the editor command is currently not run through sh -c ..., i.e. it is supposed to be just a path like /usr/bin/vim. I was just stumped by this myself and I think I’ll soon push a patch to allow setting something like vim -c foo.

In the meantime, your best option is probably putting this in your .vimrc:

au BufRead,BufNewFile jenny-posting.eml normal $

(I use something similar to disable hard text wrapping after 72 chars for twtxt postings.)
@quark Ah, startinsert, didn’t even know that existed, tbh. 😅

It doesn’t work because the editor command is currently not run through sh -c ..., i.e. it is supposed to be just a path like /usr/bin/vim. I was just stumped by this myself and I think I’ll soon push a patch to allow setting something like vim -c foo.

In the meantime, your best option is probably putting this in your .vimrc:

au BufRead,BufNewFile jenny-posting.eml normal $

(I use something similar to disable hard text wrapping after 72 chars for twtxt postings.)
(The Yarn police feed, that is.)
(The Yarn police feed, that is.)
(The Yarn police feed, that is.)
(The Yarn police feed, that is.)
@yarn_police I was *just* about to remove this feed from my config because it was stale … 😂
@yarn_police I was *just* about to remove this feed from my config because it was stale … 😂
@yarn_police I was *just* about to remove this feed from my config because it was stale … 😂
@yarn_police I was *just* about to remove this feed from my config because it was stale … 😂
@quark Uhm, yeah, that can’t be set in the config file (only by overriding the VISUAL environment variable). It probably should. I’ll fix it.

What’s the goal, though? I usually hit Shift-A in Vim to append text to the end of the line. Is that what you want? 😅
@quark Uhm, yeah, that can’t be set in the config file (only by overriding the VISUAL environment variable). It probably should. I’ll fix it.

What’s the goal, though? I usually hit Shift-A in Vim to append text to the end of the line. Is that what you want? 😅
@quark Uhm, yeah, that can’t be set in the config file (only by overriding the VISUAL environment variable). It probably should. I’ll fix it.

What’s the goal, though? I usually hit Shift-A in Vim to append text to the end of the line. Is that what you want? 😅
@quark Uhm, yeah, that can’t be set in the config file (only by overriding the VISUAL environment variable). It probably should. I’ll fix it.

What’s the goal, though? I usually hit Shift-A in Vim to append text to the end of the line. Is that what you want? 😅
The next jenny release will (probably) stop supporting the old “Hash Tag Extension”, which was deprecated at the end of 2022. It was once used for threading and looked like this:

#tsvhqdq

I don’t see them being used in the wild anymore. But if you happen to fetch really old feeds (or some archived feeds), things might break a little.
The next jenny release will (probably) stop supporting the old “Hash Tag Extension”, which was deprecated at the end of 2022. It was once used for threading and looked like this:

#tsvhqdq

I don’t see them being used in the wild anymore. But if you happen to fetch really old feeds (or some archived feeds), things might break a little.
The next jenny release will (probably) stop supporting the old “Hash Tag Extension”, which was deprecated at the end of 2022. It was once used for threading and looked like this:

#tsvhqdq

I don’t see them being used in the wild anymore. But if you happen to fetch really old feeds (or some archived feeds), things might break a little.
The next jenny release will (probably) stop supporting the old “Hash Tag Extension”, which was deprecated at the end of 2022. It was once used for threading and looked like this:

#tsvhqdq

I don’t see them being used in the wild anymore. But if you happen to fetch really old feeds (or some archived feeds), things might break a little.
@aelaraji lol 😅🙈
@aelaraji lol 😅🙈
@aelaraji lol 😅🙈
@aelaraji lol 😅🙈
I think I’m not going to query Yarn pods for the moment. Let’s first see how often I’d actually need that. 🤔
I think I’m not going to query Yarn pods for the moment. Let’s first see how often I’d actually need that. 🤔
I think I’m not going to query Yarn pods for the moment. Let’s first see how often I’d actually need that. 🤔
I think I’m not going to query Yarn pods for the moment. Let’s first see how often I’d actually need that. 🤔
@quark Yay 🥳
@quark Yay 🥳
@quark Yay 🥳
@quark Yay 🥳
@lyse That is one crazy looking mushroom. 😳 How about tasting it? 🤪

I’m so glad the temperatures were down a bit. Went on a long walk as well, first time in weeks. And there were so few cars yesterday! It was surprisingly quiet.
@lyse That is one crazy looking mushroom. 😳 How about tasting it? 🤪

I’m so glad the temperatures were down a bit. Went on a long walk as well, first time in weeks. And there were so few cars yesterday! It was surprisingly quiet.
@lyse That is one crazy looking mushroom. 😳 How about tasting it? 🤪

I’m so glad the temperatures were down a bit. Went on a long walk as well, first time in weeks. And there were so few cars yesterday! It was surprisingly quiet.
@lyse That is one crazy looking mushroom. 😳 How about tasting it? 🤪

I’m so glad the temperatures were down a bit. Went on a long walk as well, first time in weeks. And there were so few cars yesterday! It was surprisingly quiet.
There was a garbage bag incident last night and I had to clean up the kitchen for two hours. 😂 Now I’m sore as fuck. Good thing I have a day off today, huh? 🤪
There was a garbage bag incident last night and I had to clean up the kitchen for two hours. 😂 Now I’m sore as fuck. Good thing I have a day off today, huh? 🤪
There was a garbage bag incident last night and I had to clean up the kitchen for two hours. 😂 Now I’m sore as fuck. Good thing I have a day off today, huh? 🤪
There was a garbage bag incident last night and I had to clean up the kitchen for two hours. 😂 Now I’m sore as fuck. Good thing I have a day off today, huh? 🤪
@falsifian @bender I pushed an alternative implementation to the fetch-context branch. This integrates the whole thing into mutt/jenny.

You will want to configure a new mutt hotkey, similar to the “reply” hotkey:

macro index,pager C "\\
set my_pipe_decode=\\$pipe_decode nopipe_decode\\
jenny -c\\
set pipe_decode=\\$my_pipe_decode; unset my_pipe_decode" \\
"Try to fetch context of current twt, like a missing root twt"

This pipes the mail to jenny -c. jenny will try to find the thread hash and the URL and then fetch it. (If there’s no URL or if the specific twt cannot be found in that particular feed, it could query a Yarn pod. That is not yet implemented, though.)

The whole thing looks like this:

https://movq.de/v/0d0e76a180/jenny.mp4

In other words, when there’s a missing root twt, you press a hotkey to fetch it, done.

I think I like this version better. 🤔

(This needs a lot of testing. 😆)
@falsifian @bender I pushed an alternative implementation to the fetch-context branch. This integrates the whole thing into mutt/jenny.

You will want to configure a new mutt hotkey, similar to the “reply” hotkey:

macro index,pager C "\
set my_pipe_decode=\$pipe_decode nopipe_decode\
jenny -c\
set pipe_decode=\$my_pipe_decode; unset my_pipe_decode" \
"Try to fetch context of current twt, like a missing root twt"

This pipes the mail to jenny -c. jenny will try to find the thread hash and the URL and then fetch it. (If there’s no URL or if the specific twt cannot be found in that particular feed, it could query a Yarn pod. That is not yet implemented, though.)

The whole thing looks like this:

https://movq.de/v/0d0e76a180/jenny.mp4

In other words, when there’s a missing root twt, you press a hotkey to fetch it, done.

I think I like this version better. 🤔

(This needs a lot of testing. 😆)
@falsifian @bender I pushed an alternative implementation to the fetch-context branch. This integrates the whole thing into mutt/jenny.

You will want to configure a new mutt hotkey, similar to the “reply” hotkey:

macro index,pager C "\
set my_pipe_decode=\$pipe_decode nopipe_decode\
jenny -c\
set pipe_decode=\$my_pipe_decode; unset my_pipe_decode" \
"Try to fetch context of current twt, like a missing root twt"

This pipes the mail to jenny -c. jenny will try to find the thread hash and the URL and then fetch it. (If there’s no URL or if the specific twt cannot be found in that particular feed, it could query a Yarn pod. That is not yet implemented, though.)

The whole thing looks like this:

https://movq.de/v/0d0e76a180/jenny.mp4

In other words, when there’s a missing root twt, you press a hotkey to fetch it, done.

I think I like this version better. 🤔

(This needs a lot of testing. 😆)
@falsifian @bender I pushed an alternative implementation to the fetch-context branch. This integrates the whole thing into mutt/jenny.

You will want to configure a new mutt hotkey, similar to the “reply” hotkey:

macro index,pager C "\
set my_pipe_decode=\$pipe_decode nopipe_decode\
jenny -c\
set pipe_decode=\$my_pipe_decode; unset my_pipe_decode" \
"Try to fetch context of current twt, like a missing root twt"

This pipes the mail to jenny -c. jenny will try to find the thread hash and the URL and then fetch it. (If there’s no URL or if the specific twt cannot be found in that particular feed, it could query a Yarn pod. That is not yet implemented, though.)

The whole thing looks like this:

https://movq.de/v/0d0e76a180/jenny.mp4

In other words, when there’s a missing root twt, you press a hotkey to fetch it, done.

I think I like this version better. 🤔

(This needs a lot of testing. 😆)
@prologic Yeah, I need to clean this up in jenny. It still supports a ton of old formats that aren’t used anymore at all. 🧟
@prologic Yeah, I need to clean this up in jenny. It still supports a ton of old formats that aren’t used anymore at all. 🧟
@prologic Yeah, I need to clean this up in jenny. It still supports a ton of old formats that aren’t used anymore at all. 🧟
@prologic Yeah, I need to clean this up in jenny. It still supports a ton of old formats that aren’t used anymore at all. 🧟
@bender Yeah, I switched to OpenBSD a couple of years ago when sysupgrade(8) became available. I like it a lot, requires very little maintenance. 👌
@bender Yeah, I switched to OpenBSD a couple of years ago when sysupgrade(8) became available. I like it a lot, requires very little maintenance. 👌
@bender Yeah, I switched to OpenBSD a couple of years ago when sysupgrade(8) became available. I like it a lot, requires very little maintenance. 👌