# 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 235514
# self = https://watcher.sour.is?offset=232034
# next = https://watcher.sour.is?offset=232134
# prev = https://watcher.sour.is?offset=231934
❤️ 🎶: The Last Day of Earth by som hevin
❤️ 🎶: Obsessed by jujuland
❤️ 🎶: clockwork by BIRA
[47°09′52″S, 126°43′20″W] Taking samples
@andros Here is everything written down I know to this stuff: https://github.com/upputter/testing-twtxt-dm/blob/main/README.md
https://github.com/parakeet-nest/awesome-slms SLMs List that can run on a Pi5 8GB #IA
@arne Amazing!!! 😋
@arne Amazing!!! 😋
❤️ 🎶: あなたの口ぐせ by 川中美幸
Does it counted? my cubieboard
❤️ 🎶: サクラガミ by Sachiko Kobayashi
❤️ 🎶: Why is love so hard for me (feat.Jeon Gunho) by GyeongseoYeji, Jeon Gunho
@eapl.me @andros Eureka! It works! https://github.com/upputter/testing-twtxt-dm
PBKDF2_KEY_SIZE = 48 was the turning point! My dirty little crypt.class.php can en- and decrypt, accoridng to the OpenSSL standard and options used in https://twtxt.dev/exts/direct-message.html
Good article: NGINX, try_files is evil too
https://www.getpagespeed.com/server-setup/nginx-try_files-is-evil-too
Good article: NGINX, try_files is evil too
https://www.getpagespeed.com/server-setup/nginx-try_files-is-evil-too
I really like the concept of "twt". It's the perfect blend of txt and twtxt. An abbreviated form. Even though it's the name given to posts, I personally find it very nice.
#twtxt
I really like the concept of "twt". It's the perfect blend of txt and twtxt. An abbreviated form. Even though it's the name given to posts, I personally find it very nice.
#twtxt
Nice photo. The fire looks like magic.
Nice photo. The fire looks like magic.
I don't think so, at least the tests I did passed. If you're pretty sure it's a bug, please create an issue in the repository with the specific case and I'll investigate it.
There are 2 buttons to make replicas, one makes a replica in the thread where the twt is located (this is the one that should be used the most, as it serves a thread), the other creates a replica to a specific twt.
I'll let you know a bit about the status: I'm just now implementing the thread screen. There you can be sure where you are. It's a bit confusing right now, sorry. I think the client is still in alpha. When I've finished what I'm doing, and the direct message system, I'll freeze development and focus on creating more tests, looking for bugs and making small visual adjustments.
I don't think so, at least the tests I did passed. If you're pretty sure it's a bug, please create an issue in the repository with the specific case and I'll investigate it.
There are 2 buttons to make replicas, one makes a replica in the thread where the twt is located (this is the one that should be used the most, as it serves a thread), the other creates a replica to a specific twt.
I'll let you know a bit about the status: I'm just now implementing the thread screen. There you can be sure where you are. It's a bit confusing right now, sorry. I think the client is still in alpha. When I've finished what I'm doing, and the direct message system, I'll freeze development and focus on creating more tests, looking for bugs and making small visual adjustments.
I don't think so, at least the tests I did passed. If you're pretty sure it's a bug, please create an issue in the repository with the specific case and I'll investigate it.
There are 2 buttons to make replicas, one makes a replica in the thread where the twt is located (this is the one that should be used the most, as it serves a thread), the other creates a replica to a specific twt.
I'll let you know a bit about the status: I'm just now implementing the thread screen. There you can be sure where you are. It's a bit confusing right now, sorry. I think the client is still in alpha. When I've finished what I'm doing, and the direct message system, I'll freeze development and focus on creating more tests, looking for bugs and making small visual adjustments.
@eapl_en Your notes are amazing! I'm going to save them for when I do my implementation. Great job!
@eapl_en Your notes are amazing! I'm going to save them for when I do my implementation. Great job!
[47°09′10″S, 126°43′17″W] Storm recedes -- back to normal work
@xuu I guess so 🤣 Looks nice, bit of a rats nest though 🤣
@xuu Works for me over here 👈
@aelaraji Works 👌
@andros is it me or twtxt-el generates a wrong twt hash when I use the [ ↳ Reply to twt ] button?
@andros is it me or twtxt-el generates a wrong twt hash when I use the [ ↳ Reply to twt ] button?
Test Test... is this Borked too!? 🤔
[47°09′51″S, 126°43′34″W] Automatic systems disengaged due to heavy rain
👋 Hello @prologic, you were web mentioned on https://txt.sour.is/twt/kg4e3pq
👋 Hello @prologic, you were web mentioned on https://txt.sour.is/twt/kg4e3pq
@prologic huh.. i added sour.is and img.sour.is to my whitelist but its not showing inline for me
we posting setup pics?

@bender Yup!
@prologic Those aren't actually serving anything public-facing. I've thought about it, but for now I'm sticking with VPSs, partly because I don't relish the risk of weeks of downtime if something goes wrong while I'm travelling.
@prologic Here's mine. A pile of three laptops, a switch and a fibre modem connected by ethernet cables, sitting on a table in an unfinished basement.
Okay, I won't park there. A car-sized pile of snow with a sign planted in it saying "No Parking" "Snow Removal". It occupies one or two parking spots on the side of a street.
If you're "late to the game" regarding the #OSAID #OpenSource #AI definition from @osi@osi and what is the criticism to it all about, this blog post from @sj@sj, while specifically directed to @mozillaofficial@mozillaofficial, has a good enough amount of linkdump to be clarifying:

https://samjohnston.org/2024/12/18/a-forgotten-manifesto-mozilla-betrays-its-own-values-on-open-source-ai/
If you're "late to the game" regarding the #OSAID #OpenSource #AI definition from @osi@osi and what is the criticism to it all about, this blog post from @sj@sj, while specifically directed to @mozillaofficial@mozillaofficial, has a good enough amount of linkdump to be clarifying:

https://samjohnston.org/2024/12/18/a-forgotten-manifesto-mozilla-betrays-its-own-values-on-open-source-ai/
Edit #issuecomment-18968
@eapl.me @andros here's another variant as per eapl's suggestion (#issuecomment-18968)\n
@eapl.me @andros here's another variant as per eapl's suggestion (#issuecomment-18968)[https://git.mills.io/yarnsocial/twtxt.dev/issues/9#issuecomment-18968]
@twtxt.net the Mills.io?
🧮 USERS:1 FEEDS:2 TWTS:1254 ARCHIVED:84848 CACHE:2758 FOLLOWERS:18 FOLLOWING:14
On my blog: Real Life in Star Trek, Face of the Enemy https://john.colagioia.net/blog/2025/02/20/face-enemy.html #scifi #startrek #closereading
Running - 4 miles: 4.00 miles, 00:09:31 average pace, 00:38:05 duration
so boring
#running #treadmill
Running - 4 miles: 4.00 miles, 00:09:31 average pace, 00:38:05 duration
so boring
#running #treadmill
Running - 4 miles: 4.00 miles, 00:09:31 average pace, 00:38:05 duration
so boring
#running #treadmill
@lyse it depends if you already have the needed libraries, and auxiliary packages installed. If you do, then a few hundred MiB, for sure.
@movq not at all. Almost everyone I know uses an iPhone, so Messages is the standard. Many others simply use Facebook Messenger.
I'm happy to note that tomorrow is already Friday. However, looking back on the week, I can't think of anything terribly useful I've accomplished. Hard to distinguish it from a plain zero. Again. Hmm. Anyway, looking forward to the weekend.
@bender Hmmm, does that mean it’s not that popular in the US? 🤔
@bender Hmmm, does that mean it’s not that popular in the US? 🤔
@bender Hmmm, does that mean it’s not that popular in the US? 🤔
I hope not, @bender! I haven't checked, but I'd reckon it to be at most a single digit MiB number. How wrong am I?
@lyse and by „install\n the package "imagemagick"“ you mean installing a multi-GiB set of tools and libraries. :-D
@lyse and by „install[ing] the package "imagemagick"“ you mean installing a multi-GiB set of tools and libraries. :-D
@movq I cannot start to tell you how much I despise WhatsApp, but if I want to keep in touch with family and friends in Europe, I am forced to use it. WhatsApp use is pervasive in Europe.
The Americans are spreading links to sites with European alternatives for popular services, yet here I am, scheduling appointments with the construction workers over WhatsApp.
The Americans are spreading links to sites with European alternatives for popular services, yet here I am, scheduling appointments with the construction workers over WhatsApp.
The Americans are spreading links to sites with European alternatives for popular services, yet here I am, scheduling appointments with the construction workers over WhatsApp.
@nff Nice! Yeah, it's all about having fun. :-) The simplicity got me hooked. Happy hacking!
@off_grid_living No right click thing, but in the terminal:

convert -strip -quality 70 -resize 300x original.jpg resized.jpg

"original.jpg" being the filename of the input file and "resized.jpg" the filename of the output. You can play around with the width, "300x" means 300 pixels wide and the height is determined automatically to still remain in the same ratio. The quality is how much to compress it. The closer to 0 the value gets, the worse the result, but also smaller in file size. More towards 100 and the quality improves together with a larger file size.

You have to install the package "imagemagick" for this to work, I believe.
@off_grid_living Oh, I'm ready for my retirement, too. :-D Still have some decades to go, unfortunately.
I always wanted to go and live in the country side, it seems I can't manage to for financial reasons
@off_grid_living You could try starting it in the terminal in order to spot errors. Just open the GNOME Terminal or something like that and then type in "kolourpaint" and hit Enter.
@eapl.me Nope, I switched to the openssl library in PHP. But our rubberducking 🦆 seems to be working. Your find https://crypto.stackexchange.com/a/79855 for the IV generation may be the breakthrough ...
@bender Lol! :-D
[47°09′10″S, 126°43′54″W] Automatic systems disengaged due to blizzard
here is my progress so far: https://github.com/eapl-gemugami/twtxt-direct-message-php
The encryption part seems to work, if I decrypt it the message with OpenSSL.
I think it can help you for some key parts not well explained in OpenSSL documentation.

@andros reading your spec I wrote a few notes here: https://github.com/eapl-gemugami/twtxt-direct-message-php/blob/main/direct_message_spec.md

@arne I haven't check your repo yet, although you are using sodium, right?
@alice U2FsdGVkX187WpPAJXCusqEoTb3/tD62xN+TxudcTsPI+LqOJLPkl9aNE9MLg8lYRLfd9mSE33N6JeA0okLJ6Q==
@arne Here are the results of the german jury:

Known salt (B64): Tb9oj07UhwU= (8)
Known key (B64): MII0yj+MC0mHNx254Voar80bi9P7jmocs0+x+inaxBE=
Known iv (B64): l/PvkDjOKMFZe73KptrvWw== (16)
Shared Key (B64): ql8zvN03p6kroSwNrcKbxk4zSBQFkgQZEumvqVIDMAE=
** DECRYPT **
Encrypted Message: ...
Decoded Salt (B64): Tb9oj07UhwU= (8)
PBKDF2 KEY (B64): MII0yj+MC0mHNx254Voar80bi9P7jmocs0+x+inaxBE=
iv (B64): JanbU1jI30lb6yfjq/adjA== (16)
Decrypted Message: 

😭
@eapl.me Here is what I've got so far: https://github.com/upputter/testing-twtxt-dm

There is a "00_well_known_message.enc" file, which I have the encryption paremters for (https://github.com/upputter/testing-twtxt-dm/blob/9fdf3be6aa8fe810a4cb275375dbb3d4a2a958ee/wellknown_test.php#L28).

According to my finding, I assume, that the saltsize in openssl is "8" and the PBKDF2 algo is "sha256".
Open Web Conversations ?~L~X https://notiz.blog/b/DUX
Open Web Conversations ?~L~X https://notiz.blog/b/DUX
Open Web Conversations ⌘ https://notiz.blog/b/DUX
Open Web Conversations ⌘ https://notiz.blog/b/DUX
I thought hCaptcha was getting off the rails. Try making an X account using a VPN service!
Those are some impressive wigs: https://imgur.com/gallery/life-imitates-video-game-5KlJBhj I wonder how it feels to wear such a thing for a day – especially in summer. 😅🥵
Those are some impressive wigs: https://imgur.com/gallery/life-imitates-video-game-5KlJBhj I wonder how it feels to wear such a thing for a day – especially in summer. 😅🥵
Those are some impressive wigs: https://imgur.com/gallery/life-imitates-video-game-5KlJBhj I wonder how it feels to wear such a thing for a day – especially in summer. 😅🥵
[47°09′29″S, 126°43′41″W] Wind speed: 91kph -- batteries low
@andros Could you share (perhaps in the extension document) the private key for alice?

I want to compare that I can read the encrypted message both from OpenSSL CLI and from the PHP OpenSSL library, following the spec.
@alice JmgrTxTqbGBtzGFh30wL0cozfVOZiFSTuZ5c+k+5t9TtGkw4foOA80V2che2f3pXPVzBEZsuXg7y+7G5fD/5Qw==
trying to implement it quickly, I get the same questions than you

# https://www.php.net/manual/en/function.openssl-pbkdf2.php
    $password = $sharedKey;
    $salt = openssl_random_pseudo_bytes(16);  # What's the salt length ?
    $keyLength = 20;  # What's the key length here ?
    $iterations = 100000;
    $generatedKey = openssl_pbkdf2($password, $salt, $keyLength, $iterations, 'sha256');
    echo bin2hex($generatedKey)."\n";
    echo base64_encode($generatedKey)."\n";

    $iv = openssl_random_pseudo_bytes(16); // AES-256-CBC requires 16-byte IV
    $cipherText = openssl_encrypt($message, 'aes-256-cbc', $generatedKey, OPENSSL_RAW_DATA, $iv);
    return base64_encode($iv . $cipherText);
I haven't taken a look into that extension, although I think you could use the OpenSSL library: https://www.php.net/manual/en/function.openssl-encrypt.php
@arne With the OpenSSL option -p one can get an output of salt, key and iv. My stupid PHP-code can get everything right from the encrypted data (from OpenSSL) - except the iv! Damn "evpKDF" 😔
@prologic I've been there yesterday w/o success.
@arne I _think_ you want to use the sodium_crypto functions/modules for PHP 🤔🤔
@arne Hi! I love that you're implementing it! Maybe, when we're both done, we could test the clients by communicating both.
I don't think I'm going to be able to help you much, my knowledge of OpenSSL and PHP is not as high as I'd like it to be.
Maybe the OpenSSL version uses SHA-1 by default in PHP. Or that the IV is derived together with the key (not generated separately). But I'm not able to answer your questions, sorry.
I'm invoking the commands directly, without any libraries in between. Maybe that would help you?
@arne Hi! I love that you're implementing it! Maybe, when we're both done, we could test the clients by communicating both.
I don't think I'm going to be able to help you much, my knowledge of OpenSSL and PHP is not as high as I'd like it to be.
Maybe the OpenSSL version uses SHA-1 by default in PHP. Or that the IV is derived together with the key (not generated separately). But I'm not able to answer your questions, sorry.
I'm invoking the commands directly, without any libraries in between. Maybe that would help you?
Had some fun with my old Mandelbrot renderer: https://movq.de/v/83110057f5/
Had some fun with my old Mandelbrot renderer: https://movq.de/v/83110057f5/
Had some fun with my old Mandelbrot renderer: https://movq.de/v/83110057f5/
#musiquinta sobre "cachorro", a música que tinha em mente acho que já aqui a divulguei numa outra musiquinta, e em vez disso deixo-vos aqui uma música para chorar:

Ashram - Lucky's Song (My Dog)
https://youtu.be/oJ37mmym_LA