i made a little twtxt feed fixer for when a feed uses other whitespace instead of tabs.
Xuu /zuː/ I am AWESOME! ○△□ ⍼
Nice! totally legit government page: https://tour.diplomaticrooms.state.gov/?id=0&xml=https://sour.is/awesome.html
Bro.. Gitea I think you are drunk. How is Jan 2024 5 days ago?
One benefit with bluesky is your username is also a website. And not a clunky URL with slashes and such. I wish twtxt adopted that. I have advocated for webfinger to for twtxt to let us do something like it with usernames. Nostr has something like it
By default the bsky.social urls all redirect to their feeds like: hmpxvt.bsky.social Many custom urls will redirect to some kind of linktree or just their feed cwebonline.com or la.bonne.petite.sour.is or if you are a major outlet just to your web presence like https://theonion.com or https://netflix.com
Its just good SEO practice
Do all nostr addresses take you to the person if typed into a browser? That is the secret sauce. No having to go to some random page first. no accounts. no apps to install. just direct to the person.
This is so neat.
https://emilyliu.me/blog/open-network
When yarn used to have blogs I thought something like this would be a great feature. Having the blog comments tied to a twtxt subject for the blog post.
Interesting list of features to protect users and communities on bluesky. I wonder if any make sense in text context.
Spent some time cleaning up my AoC code to get ready for December 1st. Anyone else doing it this year? @prologic we have to setup a new team each year?
This is pretty neat! An IP KVM that doesn't cost a gagillion dollars. I might just back it. https://www.kickstarter.com/projects/jetkvm/jetkvm
@prologic Hi. i have noticed sometimes when i hit the back button i lose all the surrounding layout and just have a list of twts.
Interesting.. QUIC isn't very quick over fast internet.
QUIC is expected to be a game-changer in improving web application performance. In this paper, we conduct a systematic examination of QUIC's performance over high-speed networks. We find that over fast Internet, the UDP+QUIC+HTTP/3 stack suffers a data rate reduction of up to 45.2% compared to the TCP+TLS+HTTP/2 counterpart. Moreover, the performance gap between QUIC and HTTP/2 grows as the underlying bandwidth increases. We observe this issue on lightweight data transfer clients and major web browsers (Chrome, Edge, Firefox, Opera), on different hosts (desktop, mobile), and over diverse networks (wired broadband, cellular). It affects not only file transfers, but also various applications such as video streaming (up to 9.8% video bitrate reduction) and web browsing. Through rigorous packet trace analysis and kernel- and user-space profiling, we identify the root cause to be high receiver-side processing overhead, in particular, excessive data packets and QUIC's user-space ACKs. We make concrete recommendations for mitigating the observed performance issues.
Kinda cool tool for bringing together all your timeline based data across socials.
Google Chrome will have Gemini LLM built into the browser.
You can't catch the kill signal. Should this be syscall.SIGTERM instead of os.Kill, xuu? https://git.sour.is/sour-is/go-paste/src/branch/main/main.go#L21
You are totally right.. i think i was going for SIGTERM and SIGQUIT
I would love to see a world where ones twtxt feed is defined by webfinger. So @xuu@txt.sour.is
=> https://text.sour.is/user/xuu/twtxt.txt
Then my identity can exist independent of the feed location. And I can host multiple protocol types for my feed. Ie. http/gopher/Gemini/irc DCC/etc
Go 1.22.0 introduces a new experiment for range functions. Have you tried them out? What do you think it can make easier to accomplish?
Twtxt spec enhancement proposal thread 🧵
Adding attributes to individual twts similar to adding feed attributes in the heading comments.
https://git.mills.io/yarnsocial/go-lextwt/pulls/17
The basic use case would be for multilingual feeds where there is a default language and some twts will be written a different language.
As seen in the wild: https://eapl.mx/twtxt.txt
The attributes are formatted as [key=value]
They can show up in the twt anywhere it is not enclosed by another element such as codeblock
or part of a markdown link.
man... day17 has been a struggle for me.. i have managed to implement A* but the solve still takes about 2 minutes for me.. not sure how some are able to get it under 10 seconds.
Solution: https://git.sour.is/xuu/advent-of-code/src/branch/main/day17/main.go A* PathFind: https://git.sour.is/xuu/advent-of-code/src/branch/main/search.go
some seem to simplify the seen check to only be horizontal/vertical instead of each direction.. but it doesn't give me the right answer
I found these write-ups for advent of code. They are quite well done and a great learning resouce for algorithms!
Spent some time getting my air sensors tied together into a dashboard. :-D
In the holiday spirit i have donned my Santa hat. (shamelessly stolen from @movq)
With the global ordering for our private leader board we are all 1st place winners!!
I have been really impressed with the cool visualizations in pygame that @gereleth over on Twitter has been making. #AdventOfCode
So today's #adventofcode was solved with no programming. Just a bit o maths and wolfram/alpha
This day one advantage of code was pretty neat looking.
https://twitter.com/gereleth/status/1730495736070938786?s=09
Code here: https://github.com/gereleth/aoc_python/blob/main/src/year2023/day01vis.py
If anyone is doing advent of code this year i created a private leader board for twtxters! 3463928-93bf7cfa
Neat.. Gitea cloud for a hosted alternative to github and gitlab. https://blog.gitea.com/gitea-cloud/
Interesting thing happening over on Xitter. Apparently some of the women in tech accounts are being exposed as being run by men that hire women to pose for images/videos. They would be invited to tech conferences but would always drop out last minute.
Makes me wonder if maybe there is need for a sort of verifiable web of trust is needed where influencers can be proven as authentic by others. This will only get worse as AI generative content gets pushed into our feeds.
So.. Of y'all that had covid. Did you have at the end a night where for no reason your brain amped up to 11 and can't sleep at all? It happened to me last night and my FIL the night before.
I went to bed at 8 and woke up full on anxiety attack at 12 and could not calm my head until around 7 am. Today has sucked a lot.
Read this interesting retro about discords migration path from Mongo to Cassandra to now ScyllaDB.
https://discord.com/blog/how-discord-stores-trillions-of-messages
This is some cool development for the go 1.22 standard http mux. Its adding the ability to have path vars and define methods for handlers. Also the errors are quite helpful if you have conflicting paths!
https://eli.thegreenplace.net/2023/better-http-server-routing-in-go-122/
moved my yarn to a new server.. will see if it still has the slow cache issue.
cc: @prologic
Whelp. The suckification of social media is continuing to expand. Twitter only allows 600 tweets per day unless you pay and then its 6k per day.
An official FBI document dated January 2021, obtained by the American association "Property of People" through the Freedom of Information Act.
This document summarizes the possibilities for legal access to data from nine instant messaging services: iMessage, Line, Signal, Telegram, Threema, Viber, WeChat, WhatsApp and Wickr. For each software, different judicial methods are explored, such as subpoena, search warrant, active collection of communications metadata ("Pen Register") or connection data retention law ("18 USC§2703"). Here, in essence, is the information the FBI says it can retrieve:
-
Apple iMessage: basic subscriber data; in the case of an iPhone user, investigators may be able to get their hands on message content if the user uses iCloud to synchronize iMessage messages or to back up data on their phone.
-
Line: account data (image, username, e-mail address, phone number, Line ID, creation date, usage data, etc.); if the user has not activated end-to-end encryption, investigators can retrieve the texts of exchanges over a seven-day period, but not other data (audio, video, images, location).
-
Signal: date and time of account creation and date of last connection.
-
Telegram: IP address and phone number for investigations into confirmed terrorists, otherwise nothing.
-
Threema: cryptographic fingerprint of phone number and e-mail address, push service tokens if used, public key, account creation date, last connection date.
-
Viber: account data and IP address used to create the account; investigators can also access message history (date, time, source, destination).
-
WeChat: basic data such as name, phone number, e-mail and IP address, but only for non-Chinese users.
-
WhatsApp: the targeted person's basic data, address book and contacts who have the targeted person in their address book; it is possible to collect message metadata in real time ("Pen Register"); message content can be retrieved via iCloud backups.
-
Wickr: Date and time of account creation, types of terminal on which the application is installed, date of last connection, number of messages exchanged, external identifiers associated with the account (e-mail addresses, telephone numbers), avatar image, data linked to adding or deleting.
TL;DR Signal is the messaging system that provides the least information to investigators.
Interesting thoughts about multi thread vs single thread performance.
What is a good device for home virtualization these days? I have been looking at the Intel NUC 13 pro's. Basically I want something "quiet" (ie not a screaming banshee 1U), smallish, but with lots of threads and rams. Disk will come from an external NAS.
an interesting observation in a post twitter reality is how services that are sprouting up to claim some of the refugees are setting themselves up as closed gardens. without the option to federate with other services. like spoutable, counter.social, post, clubhouse and such.

From my small experience in writing an event database, I am inclined to agree with this.
it could have been some with running out of disk space for my twt cache.
The parse is correct. this seems to be something with the markdown render.
@prologic !XO!1GcUL/ZbHj+CZnedB67ddd0tt3y1ppSLY7wbzMhraUeubCUH8LRT61pz6jPyOEa2wYYupwP7tu1cwR9mNN/k+No7PEw13kqBy6YvDU8jettw25Lkj3gZ+R4J1q6d0GWKKGx+OsYmJMPev7BL+5SCnt08qQYmgGAVhyhJZMkndIgk=!OX!
@prologic I have updated to kinda follow this. It now redirects to other webfingers if the resource has a different hostname. I'm still not sure what I should put multiple services with the same domain name. Like if they were to have conflicting properties.
Trying to wrap my head around webfinger..
my first thoughts about it were that a subject of acct:me@sour.is would have a listing of rel's for the different accounts that are related to me (ie. yarn, salty, twitter, mastodon, etc...)
but maybe my thinking is at the wrong level.. that each of those accounts would be on a subject level and the rels are describing different aspects of that account. so i would have salty:acct:xuu@sour.is, twitter:acct:xuu, mastodon:acct:xuu@chaos.social, yarn:acct:xuu@ev.sour.is and then i could have a main acct:me@sour.is that links them together as aliases.
I found okta will do something similar with its accounts to show as okta:acct:user@domain so maybe I am on to something?
Did something chchange with how the discover feed is generated? My pods logout mode now only shows my twts. It used to be all twts from watcher observation like my logged on discover tab. @prologic
An interesting read about testing code using nullable states instead of mocks.
https://www.jamesshore.com/v2/projects/testing-without-mocks/testing-without-mocks
I learned how to make gopls syntax highlight go templates in VSCodium.
By adding the following to my config
i could go from
into
I made a thing. Its a multi password type checker. Using the PHC string format we can identify a password hashing format from the prefix $name$
and then dispatch the hashing or checking to its specific format.
Tell me you write go like javascript without telling me you write go like javascript:
import "runtime/debug"
var Commit = func() string {
if info, ok := debug.ReadBuildInfo(); ok {
for _, setting := range info.Settings {
if setting.Key == "vcs.revision" {
return setting.Value
}
}
}
return ""
}()
PSA: DMs on social media sites are not truely PMs. This is why we have a separate tool for private messaging from yarn. Always remember, if you don't own the infra (or the parts at the ends of e2e encryption) you don't own the data. and the true owners can view it any way they want!
https://twitter.com/TinkerSec/status/1587040089057759235?t=At-8r9yJPiG6xF17skTxwA&s=19
It should be illegal for firealarms to sound a low battery after 10pm and before 8 am.
Huh.. CloudFlare finally did the right thing.. Though reputation probably damaged.
Hi, I am playing with making an event sourcing database. Its super alpha but I thought I would share since others are talking about databases and such.
It's super basic. Using tidwall/wal as the disk backing. The first use case I am playing with is an implementation of msgbus. I can post events to it and read them back in reverse order.
I plan to expand it to handle other event sourcing type things like aggregates and projections.
Find it here: sour-is/ev
#!/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
@prologic hmm so each individual feed on your pod sub's my feed? Wouldn't that flood your server for each post?
One down! More to go.
BREAKING: Russian billionaire Alisher Usmanov's super yacht, one of the biggest in the world, seized in Germany - Forbes
![]()
Oof.. No hints in the first guess.
Wordle 219 4/6*
⬛⬛⬛⬛⬛
🟨🟨⬛⬛⬛
⬛🟨🟩⬛⬛
🟩🟩🟩🟩🟩
I always end up on the 4th try
Wordle 217 4/6
⬛🟩🟩⬛⬛
⬛🟩🟩🟨⬛
⬛🟩🟩⬛🟩
🟩🟩🟩🟩🟩
I happy to be reaffirmed that Java is hopelessly over engineered.
Web3 is a scam. Case in point. The complexity of systems increasing the points of failure. From this article.
vs.
Wob3.11 is a scam. Pass it on. https://threadreaderapp.com/thread/1455625844504743938.html
How fair ye î̸͚n̸͔͋ ̴̰̃t̸̲͝ḧ̸͙́e̴̱͛ ̸̈́ͅd̷̜̕e̵̬̚p̷̨̽t̴͍͆h̶͙̓ṡ̶̩o̵̪̎f̴̧̉ ̵̳̄̄Z̸̩̗̉͊̎a̸͎̹͚̓̌͋l̸͎̰̤̚g̸̛̖̬͇̾ö̵̲͖?̸̫̦̉̇ͅ ̷̡͚̑̓͊
@prologic should we enable all unicode glyphs for tags? https://txt.sour.is/conv/55yrura
@prologic check out this project for detecting language in two like strings. Could be useful when paired with translation services.
Any of y'all seen https://briarproject.org? It's another fledgling decentralized chat like session but minus the weird blockchain.. it has group chat, forums, and blogs. Also can work via Bluetooth or tor.
briar://aaeutr6pvvr5pgachwlajy5x372xxjvs6btsmmk5kr4ygzps3k3eu
Bookmarking this to read over a few more times. https://dave.cheney.net/practical-go/presentations/qcon-china.html #practical #GO
The keys that have some use would be nick, url/feedurl, avatar, lang
Are you able to coax your webserver to add the charset to the content type header? Browsers are having a hard time thinking you are sending latin-1
content-type: text/plain; charset=utf-8
Yesterday was rough. Finding it hard to focus on things today.
@prologic https://github.com/JonLundy/twtxt/tree/xuu/integrate-lextwt I made a stats command for the new parser that extracts a bunch of info about a twtxt file. run like: go run ./cmd/stats https://twtxt.net/user/prologic/twtxt.txt
@oevl @prologic (#) for the most part a subject is just the content in the perens. Usually it's a tag. It appears near the start after any mentions. It can also contain text like (re: subjects)
So excited for Go embedded files. https://golangtutorial.dev/tips/embed-files-in-go/
@prologic do you have any info on how the '!' tags are supposed to work? are they just a different kind of hash tag?
@prologic just an off the wall question about hashes. why not use the time+message as it was in the original twtxt.txt file? is it because it's just not store anyplace?
also how set in stone is using user+url? vs user@domain? the latter would mean the url could change without invalidating the hash.
My latest work over the last few days. a twtxt parser. so far looking promising. Faster and less memory than the regex version. 😁
Did some work on WKD handling. Can update keys with HKP posts :) Ugh need to work on docs and unit tests. Boooorrring.
This is an OpenPGP proof that connects my OpenPGP key to this Twtxt account. See https://key.sour.is/id/me@sour.is for more.
[Verifying my OpenPGP key: openpgp4fpr:20AE2F310A74EA7CEC3AE69F8B3B0604F164E04F]