# 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 196314
# self = https://watcher.sour.is?offset=170999
# next = https://watcher.sour.is?offset=171099
# prev = https://watcher.sour.is?offset=170899
[47°09′22″S, 126°43′23″W] Resetting transponder
[47°09′38″S, 126°43′34″W] --bad checksum--
@aelaraji Sometimes that's the most valuable though! Feedback!
@aelaraji Sometimes that's the most valuable though! Feedback!
@prologic I'm glad to! it just kinda feel a bit off when it's all I can do 😅
@prologic I'm glad to! it just kinda feel a bit off when it's all I can do 😅
@prologic I'm glad to! it just kinda feel a bit off when it's all I can do 😅
@quark Mine is a little overkill 😂 but I need to do something for practice:

h
#!/bin/bash
set -e
trap 'echo "!! Something went wrong...!!"' ERR

#============= Variables ==========#

# Source files
LOCAL_DIR=$HOME/twtxt

TWTXT=$LOCAL_DIR/twtxt.txt
HTML=$LOCAL_DIR/log.html
TEMPLATE=$LOCAL_DIR/template.tmpl

# Destination
REMOTE_HOST=remotHostName     # Host already setup in ~/.ssh/config

WEB_DIR="path/to/html/content"
GOPHER_DIR="path/to/phlog/content"
GEMINI_DIR="path/to/gemini-capsule/content"

DIST_DIRS=("$WEB_DIR" "$GOPHER_DIR" "$GEMINI_DIR")


#============ Functions ===========#

# Building log.html:

build_page() {
	twtxt2html -T $TEMPLATE $TWTXT > $HTML
}

# Bulk Copy files to their destinations:

copy_files() {
	for DIR in "${DIST_DIRS[@]}"; do
    # Copy both `txt` and `html` files to the Web server and only `txt`
    # to gemini and gopher server content folders
		if [ "$DIR" == "$WEB_DIR" ]; then
			scp -C "$TWTXT" "$HTML" "$REMOTE_HOST:$DIR/"
		else
			scp -C "$TWTXT" "$REMOTE_HOST:$DIR/"
		fi
	done
}

#========== Call to functions ===========$

build_page && copy_files
@quark Mine is a little overkill 😂 but I need to do something for practice:

h
#!/bin/bash
set -e
trap 'echo "!! Something went wrong...!!"' ERR

#============= Variables ==========#

# Source files
LOCAL_DIR=$HOME/twtxt

TWTXT=$LOCAL_DIR/twtxt.txt
HTML=$LOCAL_DIR/log.html
TEMPLATE=$LOCAL_DIR/template.tmpl

# Destination
REMOTE_HOST=remotHostName     # Host already setup in ~/.ssh/config

WEB_DIR="path/to/html/content"
GOPHER_DIR="path/to/phlog/content"
GEMINI_DIR="path/to/gemini-capsule/content"

DIST_DIRS=("$WEB_DIR" "$GOPHER_DIR" "$GEMINI_DIR")


#============ Functions ===========#

# Building log.html:

build_page() {
	twtxt2html -T $TEMPLATE $TWTXT > $HTML
}

# Bulk Copy files to their destinations:

copy_files() {
	for DIR in "${DIST_DIRS[@]}"; do
    # Copy both `txt` and `html` files to the Web server and only `txt`
    # to gemini and gopher server content folders
		if [ "$DIR" == "$WEB_DIR" ]; then
			scp -C "$TWTXT" "$HTML" "$REMOTE_HOST:$DIR/"
		else
			scp -C "$TWTXT" "$REMOTE_HOST:$DIR/"
		fi
	done
}

#========== Call to functions ===========$

build_page && copy_files
@quark Mine is a little overkill 😂 but I need to do something for practice:

h
#!/bin/bash
set -e
trap 'echo "!! Something went wrong...!!"' ERR

#============= Variables ==========#

# Source files
LOCAL_DIR=$HOME/twtxt

TWTXT=$LOCAL_DIR/twtxt.txt
HTML=$LOCAL_DIR/log.html
TEMPLATE=$LOCAL_DIR/template.tmpl

# Destination
REMOTE_HOST=remotHostName     # Host already setup in ~/.ssh/config

WEB_DIR="path/to/html/content"
GOPHER_DIR="path/to/phlog/content"
GEMINI_DIR="path/to/gemini-capsule/content"

DIST_DIRS=("$WEB_DIR" "$GOPHER_DIR" "$GEMINI_DIR")


#============ Functions ===========#

# Building log.html:

build_page() {
\ttwtxt2html -T $TEMPLATE $TWTXT > $HTML
}

# Bulk Copy files to their destinations:

copy_files() {
\tfor DIR in "${DIST_DIRS[@]}"; do
    # Copy both `txt` and `html` files to the Web server and only `txt`
    # to gemini and gopher server content folders
\t\tif [ "$DIR" == "$WEB_DIR" ]; then
\t\t\tscp -C "$TWTXT" "$HTML" "$REMOTE_HOST:$DIR/"
\t\telse
\t\t\tscp -C "$TWTXT" "$REMOTE_HOST:$DIR/"
\t\tfi
\tdone
}

#========== Call to functions ===========$

build_page && copy_files
[47°09′10″S, 126°43′41″W] Reading: 1.51 Sv
I've been using Codeium too the last week or so ! It's pretty good and like @xuu said is a pretty desent Junior assistant, it helps me write good docs and the tab completion is amazing!

It of course completely sucks at doing anything "intelligent" or complex, but if you just use it as a fancier auto complete it's actually half way decent 👌
I've been using Codeium too the last week or so ! It's pretty good and like @xuu said is a pretty desent Junior assistant, it helps me write good docs and the tab completion is amazing!

It of course completely sucks at doing anything "intelligent" or complex, but if you just use it as a fancier auto complete it's actually half way decent 👌
@quark I admit I find the general "click here to share blah" generally wasteful, useless and unengaging really. Not just Wordle.

I admittedly however, I've been guilty of doing this sometimes myself. 🤦‍♂️ sometimes though I think it's OK to show your achievements. 👌
@quark I admit I find the general "click here to share blah" generally wasteful, useless and unengaging really. Not just Wordle.

I admittedly however, I've been guilty of doing this sometimes myself. 🤦‍♂️ sometimes though I think it's OK to show your achievements. 👌
This might be quite unpopular, but I truly dislike Wordle. The reason isn’t rooted on any psychological issue, it is much, much more simple: people share their Wordle result(s)---I figure they feel good about themselves---and for me it is only uneven, unaligned, wasteful noise. I don’t even want to show you an example, but I am sure you know what I am talking about.

Thank gods those posting their hideous squares have finally quieted down. LOL.
This might be quite unpopular, but I truly dislike Wordle. The reason isn’t rooted on any psychological issue, it is much, much more simple: people share their Wordle result(s)---I figure they feel good about themselves---and for me it is only uneven, unaligned, wasteful noise. I don’t even want to show you an example, but I am sure you know what I am talking about.

Thank gods those posting their hideous squares have finally quieted down. LOL.
🧮 USERS:1 FEEDS:2 TWTS:1096 ARCHIVED:78954 CACHE:2471 FOLLOWERS:17 FOLLOWING:14
Testing the new custom template option. Got to modify it more, but baby steps.
Testing the new custom template option. Got to modify it more, but baby steps.
@prologic woot! Fast! I think you need to change your nick to "fastlogic" instead. :-D
@prologic woot! Fast! I think you need to change your nick to "fastlogic" instead. :-D
@quark LOL 😂 No worries! 😉
@quark LOL 😂 No worries! 😉
@quark All fixed! 🥳 pleasure doing business with y'all. 🤣
@quark All fixed! 🥳 pleasure doing business with y'all. 🤣
Thank you for adding the feature so fast, @prologic! Look at how beautiful this one renders now. Oh my!
Thank you for adding the feature so fast, @prologic! Look at how beautiful this one renders now. Oh my!
@lyse Just as an aside, shouldn't you assume utf-8 anyway these days if not specified? 🤔 I mean basically everything almost always uses utf-8 encoding right? 😅
@lyse Just as an aside, shouldn't you assume utf-8 anyway these days if not specified? 🤔 I mean basically everything almost always uses utf-8 encoding right? 😅
@quark Okay fair 👌
@quark Okay fair 👌
@movq So basically on-call, but you don't get paid for it? 🤔
@movq So basically on-call, but you don't get paid for it? 🤔
@prologic sorry but nope. Neither jenny, nor yarnd supports it at all. This was treated as a thread because I picked one of @falsifian's twtxts (with the "old subject"), and replied to it (hence starting the thread).
@prologic sorry but nope. Neither jenny, nor yarnd supports it at all. This was treated as a thread because I picked one of @falsifian's twtxts (with the "old subject"), and replied to it (hence starting the thread).
@quark aye aye captain 🤣
@quark aye aye captain 🤣
@quark It's a good thin yarnd makes this user configurable via a preference 🤣 And displays both 😅
@quark It's a good thin yarnd makes this user configurable via a preference 🤣 And displays both 😅
@quark LOL 😂 Thanks!
@quark LOL 😂 Thanks!
@quark You are right, whilst it _technically_ works, its not well supported. Too much of the code would have to change to support that, and it's not worth the value.
@quark You are right, whilst it _technically_ works, its not well supported. Too much of the code would have to change to support that, and it's not worth the value.
Oh, and you can't imagine the level of control I am commandeering by restraining me from editing that previous "missing-one-backtick" twtxt. LOL!
Oh, and you can't imagine the level of control I am commandeering by restraining me from editing that previous "missing-one-backtick" twtxt. LOL!
So yeah no, whilst it _technically_ works, neither jenny nor yarnd support it very well. Only at a very basic level.
So yeah no, whilst it _technically_ works, neither jenny nor yarnd support it very well. Only at a very basic level.
It _actually_ has treated this as a thread, but it gets a bit weird, because we thread based on the content address of a root twt.
It _actually_ has treated this as a thread, but it gets a bit weird, because we thread based on the content address of a root twt.
@aelaraji this is the little script I am using on my publish_command:


#!/usr/bin/env bash

twtxt2html -t "Quark's twtxt feed" /var/www/sites/ferengi.one/twtxt.txt > /var/www/sites/ferengi.one/index.html


I named it twtxtit. :-)
@aelaraji this is the little script I am using on my publish_command:


#!/usr/bin/env bash

twtxt2html -t "Quark's twtxt feed" /var/www/sites/ferengi.one/twtxt.txt > /var/www/sites/ferengi.one/index.html


I named it twtxtit. :-)
@prologic based on @falsifian's findings, I don't believe this is quite accurate.

> "yarnd (_at least_) doesn't support creating such a custom TwtSubject, but it will reply and respect and thread one if one was constructed."
@prologic based on @falsifian's findings, I don't believe this is quite accurate.

> "yarnd (_at least_) doesn't support creating such a custom TwtSubject, but it will reply and respect and thread one if one was constructed."
@falsifian yes, that happened around 2 years ago, on commit 5923078ea5.
@falsifian yes, that happened around 2 years ago, on commit 5923078ea5.
Make that three issues. Mostly because the other two were feeling kind of lonely. So, yeah. Ha!
Make that three issues. Mostly because the other two were feeling kind of lonely. So, yeah. Ha!
@quark It looks like the part about traditional topics has been removed from that page. Here is an old version that mentions it: https://web.archive.org/web/20221211165458/https://dev.twtxt.net/doc/twtsubjectextension.html . Still, I don't see any description of what is actually allowed between the parentheses. May be worth noting that twtxt.net is displaying the twts with the subject stripped, so some piece of code is recognizing it as a subject (or, at least, something to be removed).
Opened a couple of issues on twtxt2html. Maybe @prologic will get to them after he has completed his luxurious recharging cycle. LOL.
Opened a couple of issues on twtxt2html. Maybe @prologic will get to them after he has completed his luxurious recharging cycle. LOL.
@lyse fully agree. I have never been a fan of relative times to begin with, so that one will go away, foh sho! :-D
@lyse fully agree. I have never been a fan of relative times to begin with, so that one will go away, foh sho! :-D
@falsifian based on Twt Subject Extension, your subject is invalid. You can have custom subjects, that is, not a valid hash, but you simply can't put anything, and expect it to be treated as a TwtSubject, me thinks.
@falsifian based on Twt Subject Extension, your subject is invalid. You can have custom subjects, that is, not a valid hash, but you simply can't put anything, and expect it to be treated as a TwtSubject, me thinks.
(replyto http://darch.dk/twtxt.txt 2024-09-15T12:50:17Z) Hmm, but yarnd also isn't showing these twts as being part of a thread. @prologic you said yarnd respects customs subjects. Shouldn't these twts count as having a custom subject, and get threaded together?
(replyto http://darch.dk/twtxt.txt 2024-09-15T12:50:17Z) yarnd just doesn't render the subject. Fair enough. It's (replyto http://darch.dk/twtxt.txt 2024-09-15T12:50:17Z), and if you don't want to go on a hunt, the twt hash is weadxga: https://twtxt.net/twt/weadxga
(replyto http://darch.dk/twtxt.txt 2024-09-15T12:50:17Z) @sorenpeter I like this idea. Just for fun, I'm using a variant in this twt. (Also because I'm curious how it non-hash subjects appear in jenny and yarn.)

URLs can contain commas so I suggest a different character to separate the url from the date. Is this twt I've used space (also after "replyto", for symmetry).

I think this solves:

- Changing feed identities: although @mckinley points out URLs can change, I think this syntax should be okay as long as the feed at that URL can be fetched, and as long as the current canonical URL for the feed lists this one as an alternate.
- editing, if you don't care about message integrity
- finding the root of a thread, if you're not following the author

An optional hash could be added if message integrity is desired. (E.g. if you don't trust the feed author not to make a misleading edit.) Other recent suggestions about how to deal with edits and hashes might be applicable then.

People publishing multiple twts per second should include sub-second precision in their timestamps. As you suggested, the timestamp could just be copied verbatim.
En su trono con su cetro
#catsoftwtxt
En su trono con su cetro
#catsoftwtxt
En su trono con su cetro
/https://duque-terron.cat/media/photos/IMG_2049.jpeg) #catsoftwtxt
@falsifian I can confirm, it's fixed. Thank you! Indeed, this is some wild quoting.

I still do not understand why the encoding suddenly broke, though. :-? Anyway. I concentrate on my rewrite and do things the right™ way. ;-) Still long ways to go.
@aelaraji yes, it is ignoring the template right now. I also test it. So, something's broken, @prologic.
[47°09′35″S, 126°43′55″W] Transfer aborted
@bender I know, I know… A relative time in a static HTML document is questionable at best. ;-)
@prologic I have some ideas:

* Add smartypants rendering, just like Yarn has.
* Add the ability to create individual twtxts, each named after their hash.
* Fix the formatting of the help. :-P*
@prologic I have some ideas:

* Add smartypants rendering, just like Yarn has.
* Add the ability to create individual twtxts, each named after their hash.
* Fix the formatting of the help. :-P*
Woot, yes! It works perfectly. By the time you see my twtxt, it is already at the main Ferengi.one website.
Woot, yes! It works perfectly. By the time you see my twtxt, it is already at the main Ferengi.one website.
OK, OK, the third time is the charm. Maybe?
OK, OK, the third time is the charm. Maybe?
Hmm, this didn't work, because I made a mistake. Now I have corrected it, let's see how it goes now.
Hmm, this didn't work, because I made a mistake. Now I have corrected it, let's see how it goes now.
Trying to figure out how to use the publish_command to vomit the HTML into a file, using twtxt2html.
Trying to figure out how to use the publish_command to vomit the HTML into a file, using twtxt2html.
@bender that's not your change, silly robot, it is mine! LOL. I am finding @prologic's tool handy to refer to previous posts (as reference, for example).
@bender that's not your change, silly robot, it is mine! LOL. I am finding @prologic's tool handy to refer to previous posts (as reference, for example).
@aelaraji this is my change on main.go (but it can be done on a template now, so no reason to touch the code):


                                 <time class="dt-published" datetime="{{ $twt.Created | date "2006-01-02T15:04:05Z07:00" }}">
                                        {{ $twt.Created | date "2006-01-02 15:04:05 MST" }}
                                  </time>


See https://ferengi.one. I am going to further customise things, but that's a start.
@bender LOL normally things (in the vanilla template) render like <time class="dt-published" datetime="2024-09-17T15:05:19+01:00"> 2024-09-17 14:05:19 +0000 UTC+0000 </time> the datetime=... atribute is in my local time UTC+1 then the text within the tag is in UTC+0

The thing is, I've been poking at the template as well, but nothing changes. I literally whole portionsm added in lorem text just to see if it would do anything, then twtxt2html -T ./layout.html <link to twtxt file> | less shows same thing as before! nothing changes. LOL I'm not sure I'm going at it the right way.
@bender LOL normally things (in the vanilla template) render like <time class="dt-published" datetime="2024-09-17T15:05:19+01:00"> 2024-09-17 14:05:19 +0000 UTC+0000 </time> the datetime=... atribute is in my local time UTC+1 then the text within the tag is in UTC+0

The thing is, I've been poking at the template as well, but nothing changes. I literally whole portionsm added in lorem text just to see if it would do anything, then twtxt2html -T ./layout.html <link to twtxt file> | less shows same thing as before! nothing changes. LOL I'm not sure I'm going at it the right way.
@bender LOL normally things (in the vanilla template) render like <time class="dt-published" datetime="2024-09-17T15:05:19+01:00"> 2024-09-17 14:05:19 +0000 UTC+0000 </time> the datetime=... atribute is in my local time UTC+1 then the text within the tag is in UTC+0

The thing is, I've been poking at the template as well, but nothing changes. I literally whole portionsm added in lorem text just to see if it would do anything, then twtxt2html -T ./layout.html <link to twtxt file> | less shows same thing as before! nothing changes. LOL I'm not sure I'm going at it the right way.
Never mind this one, figured it out. I am so silly! :-D
What's wrong with the timestamps, @prologic? See https://aelaraji.com/log.html, all are +0000 UTC+0000. Same on a local test I am running.

I tried changing {{ $twt.Created | date "2006-01-02T15:04:05Z07:00" }} to {{ $twt.Created | date "2006-01-02T15:04:05" }}, but no dice. I don't really care about the timezone. LOL.
It should be fixed now. Just needed some unusual quoting in my httpd.conf: https://mail-archive.com/misc@openbsd.org/msg169795.html
@lyse Sorry, I don't think I ever had charset=utf8. I just noticed that a few days ago. OpenBSD's httpd might not support including a parameter with the mime type, unfortunately. I'm going to look into it.=
Added some css to display the toc aside on emile.space
@lyse Ouch. 🥴 Well, jenny always decodes as UTF-8 (because the spec says so) and this hasn’t caused any issues – yet.
@lyse Ouch. 🥴 Well, jenny always decodes as UTF-8 (because the spec says so) and this hasn’t caused any issues – yet.
@lyse Ouch. 🥴 Well, jenny always decodes as UTF-8 (because the spec says so) and this hasn’t caused any issues – yet.
@lyse Ouch. 🥴 Well, jenny always decodes as UTF-8 (because the spec says so) and this hasn’t caused any issues – yet.