@prologic@twtxt.net sure! Give me a couple of minutes to set things up.
Also, you can check the charset again, I did set it up even tho I do observe the problem in my twtxt.txt file on my local machine way before doing scp to the remote one. They show up when I use bat but not when I cat the file nor on neomut.
@lyse@lyse.isobeef.org Thank you! and sorry, I’ve just noticed your twt. About the funky characters, it’s probably something off with my editor, I’ve just ssh-ed from mobile and checked my .txt file, it looked like that when I cat the file but normal on neoutt. I’ll try and see what’s the deal first thing in the morning. (/me wondering if the same thing would happen with this twt)
A lot of quotes I should read one day: http://quotes.cat-v.org/
@prologic@twtxt.net its not.. There are going to be 1000s of copy cat apps built on AI. And they will all die out when the companies that have the AI platforms copy them. It happened all the time with windows and mac os. And iphone.. Like flashlight and sound recorder apps.
UFO Evidence
⌘ Read more
Data Quality
⌘ Read more
It’s a bit harder with cats, because they’re made entirely out of cat. “It’s a bit harder with cats, because they’re made entirely out of cat.” | MetaFilter
📚 Finished reading Feline Philosophy: Cats and the Meaning of Life by John N. Gray
📚 Finished reading Feline Philosophy: Cats and the Meaning of Life by John Gray
Astronomy Numbers
⌘ Read more
Precision vs Accuracy
⌘ Read more
All this time spent being grumpy about how adding my Now updates directly into the html page is uncomfortable, and it just occurred to me I can chug it into a text file and use cat.
Family Reunion
⌘ Read more
#!/bin/sh
# Validate environment
if ! command -v msgbus > /dev/null; then
printf "missing msgbus command. Use: go install git.mills.io/prologic/msgbus/cmd/msgbus@latest"
exit 1
fi
if ! command -v salty > /dev/null; then
printf "missing salty command. Use: go install go.mills.io/salty/cmd/salty@latest"
exit 1
fi
if ! command -v salty-keygen > /dev/null; then
printf "missing salty-keygen command. Use: go install go.mills.io/salty/cmd/salty-keygen@latest"
exit 1
fi
if [ -z "$SALTY_IDENTITY" ]; then
export SALTY_IDENTITY="$HOME/.config/salty/$USER.key"
fi
get_user () {
user=$(grep user: "$SALTY_IDENTITY" | awk '{print $3}')
if [ -z "$user" ]; then
user="$USER"
fi
echo "$user"
}
stream () {
if [ -z "$SALTY_IDENTITY" ]; then
echo "SALTY_IDENTITY not set"
exit 2
fi
jq -r '.payload' | base64 -d | salty -i "$SALTY_IDENTITY" -d
}
lookup () {
if [ $# -lt 1 ]; then
printf "Usage: %s nick@domain\n" "$(basename "$0")"
exit 1
fi
user="$1"
nick="$(echo "$user" | awk -F@ '{ print $1 }')"
domain="$(echo "$user" | awk -F@ '{ print $2 }')"
curl -qsSL "https://$domain/.well-known/salty/${nick}.json"
}
readmsgs () {
topic="$1"
if [ -z "$topic" ]; then
topic=$(get_user)
fi
export SALTY_IDENTITY="$HOME/.config/salty/$topic.key"
if [ ! -f "$SALTY_IDENTITY" ]; then
echo "identity file missing for user $topic" >&2
exit 1
fi
msgbus sub "$topic" "$0"
}
sendmsg () {
if [ $# -lt 2 ]; then
printf "Usage: %s nick@domain.tld <message>\n" "$(basename "$0")"
exit 0
fi
if [ -z "$SALTY_IDENTITY" ]; then
echo "SALTY_IDENTITY not set"
exit 2
fi
user="$1"
message="$2"
salty_json="$(mktemp /tmp/salty.XXXXXX)"
lookup "$user" > "$salty_json"
endpoint="$(jq -r '.endpoint' < "$salty_json")"
topic="$(jq -r '.topic' < "$salty_json")"
key="$(jq -r '.key' < "$salty_json")"
rm "$salty_json"
message="[$(date +%FT%TZ)] <$(get_user)> $message"
echo "$message" \
| salty -i "$SALTY_IDENTITY" -r "$key" \
| msgbus -u "$endpoint" pub "$topic"
}
make_user () {
mkdir -p "$HOME/.config/salty"
if [ $# -lt 1 ]; then
user=$USER
else
user=$1
fi
identity_file="$HOME/.config/salty/$user.key"
if [ -f "$identity_file" ]; then
printf "user key exists!"
exit 1
fi
# Check for msgbus env.. probably can make it fallback to looking for a config file?
if [ -z "$MSGBUS_URI" ]; then
printf "missing MSGBUS_URI in environment"
exit 1
fi
salty-keygen -o "$identity_file"
echo "# user: $user" >> "$identity_file"
pubkey=$(grep key: "$identity_file" | awk '{print $4}')
cat <<- EOF
Create this file in your webserver well-known folder. https://hostname.tld/.well-known/salty/$user.json
{
"endpoint": "$MSGBUS_URI",
"topic": "$user",
"key": "$pubkey"
}
EOF
}
# check if streaming
if [ ! -t 1 ]; then
stream
exit 0
fi
# Show Help
if [ $# -lt 1 ]; then
printf "Commands: send read lookup"
exit 0
fi
CMD=$1
shift
case $CMD in
send)
sendmsg "$@"
;;
read)
readmsgs "$@"
;;
lookup)
lookup "$@"
;;
make-user)
make_user "$@"
;;
esac
I saw the allegedly animated GIF @thecanine@twtxt.net uploaded gets a PNG extension, yet remains animated. I know PNG can be made animated, but I don’t think that’s what’s happening here, so I am puzzled. Let’s see how this Nyam cat looks like.

There is a type of flourishing available to a cat that is only rarely available to us. A human is never simply what she is, but is always striving to become something she is, as yet, not. This is the result of a self-image – a conception of herself and what her life should be – which, when unrealised, can occasion frustration and despair. What the Cat Knows (2020) | Hacker News

💁♂️ If you’re ever on a UNIX machine of some kind without any useful networking utilities like ip or ifconfig, fear now! You can view the network topology of the Kernel by just doing:
cat /proc/net/fib_trie
The tragedy of domestic cats is their minds are as rigid as their bodies are flexible. Cat Psychology & Domestication: Are We Good Owners? · Gwern.net
Suffering is all the more cruel when those suffering do not & cannot understand why. Cat Psychology & Domestication: Are We Good Owners? · Gwern.net
Happy Bring Your Work To Cat Month! The cat pictures will continue until morale improves | MetaFilter
Seems useful to have a set of consistent lexical conventions. # for comments; . for lookup; / for metadata. e.g cat ~.conf.git.core.pager
Thinking about https://zge.us.to/dirconf.html; what if cating a directory rendered its contents as a structured file?
@tx@0x1a4.1337.cx I’ve heard that cats like novelty when it comes to drinking water.