# nick = skinshafi
so... should I scream buuug ? 🤔
@prologic@twtxt.net I’ve seen plenty but I doubt you could use any (other than PHP) to actually serve your pages, anything you want to serve, you put in a ~/public_xyz folder (your php files go there too for Apache to serve), no config files/server setting.
But don’t take my word for it, I just got there and still yet to meet people and learn a bit of IT wizardry from them ;)
@movq@www.uninformativ.de if it’s just notifications that are bothering you could just go to your /settings/preferences/notifications and uncheck as much boxes as you need … unless you’ve already done that, then… sorry, not sorry we love your posts my friend!! xD And just so you know, you put a smile on my face whenever I stumble upon any of your retro-computing posts! 😁
Pinellas County Running: 3.14 miles, 00:08:34 average pace, 00:26:55 duration
needed to get out. was going a bit crazy.
#running
Trying one last thing before going Berserk on that MF …
I had to go to the office today and both train rides worked out just fine. Surprising!
What’s made you unlock twitch.tv?
A couple of events where my only choices for watching them are: Twitch, Youtube or Fartbook.
What are you doing differently?
TL;DR: I stopped going there unless I have to for the reason above.
I used to spend Waaaaay too much time on the platform. I had a whole setup using Streamlink, MPV and Chatterino where sometimes, I’d have up to 10 concurrent open streams all day long on a secondary monitor (thanks to tiling window managers’ magic), some I was interested in watching, some I moderated for a couple of friends and some I’ve had open just for support (helping new streamers in the community with their numbers till they take off and such). Theeen something happened to one of my loved ones, so I had to stop all the nonsense and spend that time and attention with the person who deserves it the most. I blocked the platform at first since I had a habit to type twit...
as soon as I opened a browser 😅 (addiction is real) and now I don’t. (That reflex got replaced with typing twtxt...
instead 😂)
go build is working but not go build main.go
@prologic@twtxt.net I’ve just seen that one as well as MicroBin on selfh.st , it looks prettier on your instance than it did on their live demo 😆. But I’ve already started playing around with microBin and will see how things go from there.
Termux
same thing @doesnm uses and it worked 👍 Media
@doesnm@doesnm.p.psf.lt No it’s all good… I’ve just rebuilt it from master and it doesn’t look like anything is broken:
~/GitRepos> git clone https://github.com/plomlompom/htwtxt.git
Cloning into 'htwtxt'...
remote: Enumerating objects: 411, done.
remote: Total 411 (delta 0), reused 0 (delta 0), pack-reused 411 (from 1)
Receiving objects: 100% (411/411), 87.89 KiB | 430.00 KiB/s, done.
Resolving deltas: 100% (238/238), done.
~/GitRepos> cd htwtxt
master ~/GitRepos/htwtxt> go mod init htwtxt
go: creating new go.mod: module htwtxt
go: to add module requirements and sums:
go mod tidy
master ~/GitRepos/htwtxt> go mod tidy
go: finding module for package github.com/gorilla/mux
go: finding module for package golang.org/x/crypto/bcrypt
go: finding module for package gopkg.in/gomail.v2
go: finding module for package golang.org/x/crypto/ssh/terminal
go: found github.com/gorilla/mux in github.com/gorilla/mux v1.8.1
go: found golang.org/x/crypto/bcrypt in golang.org/x/crypto v0.29.0
go: found golang.org/x/crypto/ssh/terminal in golang.org/x/crypto v0.29.0
go: found gopkg.in/gomail.v2 in gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
go: finding module for package gopkg.in/alexcesaro/quotedprintable.v3
go: found gopkg.in/alexcesaro/quotedprintable.v3 in gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc
master ~/GitRepos/htwtxt> go build
master ~/GitRepos/htwtxt> ll
.rw-r--r-- aelaraji aelaraji 330 B Fri Nov 22 20:25:52 2024 go.mod
.rw-r--r-- aelaraji aelaraji 1.1 KB Fri Nov 22 20:25:52 2024 go.sum
.rw-r--r-- aelaraji aelaraji 8.9 KB Fri Nov 22 20:25:06 2024 handlers.go
.rwxr-xr-x aelaraji aelaraji 12 MB Fri Nov 22 20:26:18 2024 htwtxt <-------- There's the binary ;)
.rw-r--r-- aelaraji aelaraji 4.2 KB Fri Nov 22 20:25:06 2024 io.go
.rw-r--r-- aelaraji aelaraji 34 KB Fri Nov 22 20:25:06 2024 LICENSE
.rw-r--r-- aelaraji aelaraji 8.5 KB Fri Nov 22 20:25:06 2024 main.go
.rw-r--r-- aelaraji aelaraji 5.5 KB Fri Nov 22 20:25:06 2024 README.md
drwxr-xr-x aelaraji aelaraji 4.0 KB Fri Nov 22 20:25:06 2024 templates
Termux
same thing @doesnm uses and it worked 👍 Media
I’m cloned repo and go mod init/go mod tidy/go build, only master are broken?
@bender@twtxt.net Glad you could find it useful … as for like
I’m glad they’re not a thing here xD otherwise we wouldn’t be having as much conversations going on in here. but I get it, and do appreciate it. 🙏
@bender@twtxt.net here:
FROM golang:alpine as builder
ARG version
ENV HTWTXT_VERSION=$version
WORKDIR $GOPATH/pkg/
RUN wget -O htwtxt.tar.gz https://github.com/plomlompom/htwtxt/archive/refs/tags/${HTWTXT_VERSION}.tar.gz
RUN tar xf htwtxt.tar.gz && cd htwtxt-${HTWTXT_VERSION} && go mod init htwtxt && go mod tidy && go install htwtxt
FROM alpine
ARG version
ENV HTWTXT_VERSION=$version
RUN mkdir -p /srv/htwtxt
COPY --from=builder /go/bin/htwtxt /usr/bin/
COPY --from=builder /go/pkg/htwtxt-${HTWTXT_VERSION}/templates/* /srv/htwtxt/templates/
WORKDIR /srv/htwtxt
VOLUME /srv/htwtxt
EXPOSE 8000
ENTRYPOINT ["htwtxt", "-dir", "/srv/htwtxt", "-templates", "/srv/htwtxt/templates"]
Don’t forget the --build-arg version="1.0.7"
for example when building this one, although there isn’t much difference between the couple last versions.
P.S: I may have effed up changing htwtxt’s files directory to /srv/htwtxt
when the command itself defaults to /root/htwtxt
so you’ll have to throw in a -dir whenever you issue an htwtxt command (i.e: htwtxt -adduser somename:somepwd -dir /srv/htwtxt
… etc)
@doesnm@doesnm.p.psf.lt I tried to go install github.com/plomlompom/htwtxt@1.0.7
as well as
# this is snippet from what I used for the Dockerfile but I guess it should work just fine.
cd ~/go/pkg && wget -O htwtxt.tar.gz https://github.com/plomlompom/htwtxt/archive/refs/tags/1.0.7.tar.gz
tar xf htwtxt.tar.gz && cd htwtxt-1.0.7 && go mod init htwtxt && go mod tidy && go install htwtxt
both worked just fine…
@bender@twtxt.net highly probably, unless I learn go and implement it myself (or someone else more capable does) … but I’m so lazy I’d just copy them from twtxt.net and call it a day xD and yeah, it’s kinda rough the way things are…
- I don’t see a way to follow others, all I can do is go to the /feeds URI for a list of the server’s users/feeds.
- I still couldn’t figure out how to get a direct link to a user’s twtxt file, curling /feeds/usernick spits out a list of the user usernick twts, so I guess you could use that to follow them.
- no way to add in your
# nick = usernick
/# url = proto://domain.ltd/path/to/twtxt.txt
…etc. Probably because that wasn’t part of the spec back then?
So yeah, it would make for a nice project while learning Go. :P
Hehe, although it isn’t a fancy language PHP has improved a lot since the old PHP 5 days ¯_(ツ)_/¯ It’s 3 to 5 times slower than Go, so I think that’s not too bad
but for real, i really want that sword and I’m perfectly content running my daily dev stuff using an rpi. i actually used to do client work on an old rpi laptop kit, i only stopped using that baby because the battery controller let the battery go flat.
@doesnm@doesnm.p.psf.lt up to you. I have mine to rotate at 1,000 twtxts. I have vomited over 400, so far. I have some way to go till rotation. :-D
@bender@twtxt.net You’d be surprised how many lifetime old accounts I still have, scattered all over the internet. I just don’t have much energy to go through deleting each and every single one of them. xD and here is a bonus image for LOLs
OpenAI, Google, Anthropic admit they can’t scale up their chatbots any further
Once you’ve trained your large language model on the entire written output of humanity, where do you go?
So we’re going to destroy the environment for AI slop that isn’t fit for purpose now and, if you believe the above post, never will be.
Easy run: 3.13 miles, 00:09:51 average pace, 00:30:54 duration
nice chill run. first day where my resting heart rate was back down to low 50s. no idea what was going on because i did not feel sick but maybe it was just all the stress from life and a crazy october?
#running
@eapl.me@eapl.me Neat.
So for twt metadata the lextwt parser currently supports values in the form [key=value]
https://git.mills.io/yarnsocial/go-lextwt/src/branch/main/parser_test.go#L692-L698
@eapl.me@eapl.me here are my replies (somewhat similar to Lyse’s and James’)
Metadata in twts: Key=value is too complicated for non-hackers and hard to write by hand. So if there is a need then we should just use #NSFS or the alt-text file in markdown image syntax

if something is NSFWIDs besides datetime. When you edit a twt then you should preserve the datetime if location-based addressing should have any advantages over content-based addressing. If you change the timestamp the its a new post. Just like any other blog cms.
Caching, Yes all good ideas, but that is more a task for the clients not the serving of the twtxt.txt files.
Discovery: User-agent for discovery can become better. I’m working on a wrapper script in PHP, so you don’t need to go to Apaches log-files to see who fetches your feed. But for other Gemini and gopher you need to relay on something else. That could be using my webmentions for twtxt suggestion, or simply defining an email metadata field for letting a person know you follow their feed. Interesting read about why WebMetions might be a bad idea. Twtxt being much simple that a full featured IndieWeb sites, then a lot of the concerns does not apply here. But that’s the issue with any open inbox. This is hard to solve without some form of (centralized or community) spam moderation.
Support more protocols besides http/s. Yes why not, if we can make clients that merge or diffident between the same feed server by multiples URLs
Languages: If the need is big then make a separate feed. I don’t mind seeing stuff in other langues as it is low. You got translating tool if you need to know whats going on. And again when there is a need for easier switching between posting to several feeds, then it’s about building clients with a UI that makes it easy. No something that should takes up space in the format/protocol.
Emojis: I’m not sure what this is about. Do you want to use emojis as avatar in CLI clients or it just about rendering emojis?
Righto, @eapl.me@eapl.me, ta for the writeup. Here we go. :-)
Metadata on individual twts are too much for me. I do like the simplicity of the current spec. But I understand where you’re coming from.
Numbering twts in a feed is basically the attempt of generating message IDs. It’s an interesting idea, but I reckon it is not even needed. I’d simply use location based addressing (feed URL + ‘#’ + timestamp) instead of content addressing. If one really wanted to, one could hash the feed URL and timestamp, but the raw form would actually improve disoverability and would not even require a richer client. But the majority of twtxt users in the last poll wanted to stick with content addressing.
yarnd actually sends If-Modified-Since
request headers. Not only can I observe heaps of 304 responses for yarnds in my access log, but in Cache.FetchFeeds(…)
we can actually see If-Modified-Since
being deployed when the feed has been retrieved with a Last-Modified
response header before: https://git.mills.io/yarnsocial/yarn/src/commit/98eee5124ae425deb825fb5f8788a0773ec5bdd0/internal/cache.go#L1278
Turns out etags with If-None-Match
are only supported when yarnd serves avatars (https://git.mills.io/yarnsocial/yarn/src/commit/98eee5124ae425deb825fb5f8788a0773ec5bdd0/internal/handlers.go#L158) and media uploads (https://git.mills.io/yarnsocial/yarn/src/commit/98eee5124ae425deb825fb5f8788a0773ec5bdd0/internal/media_handlers.go#L71). However, it ignores possible etags when fetching feeds.
I don’t understand how the discovery URLs should work to replace the User-Agent
header in HTTP(S) requests. Do you mind to elaborate?
Different protocols are basically just a client thing.
I reckon it’s best to just avoid mixing several languages in one feed in the first place. Personally, I find it okay to occasionally write messages in other languages, but if that happens on a more regularly basis, I’d definitely create a different feed for other languages.
Isn’t the emoji thing “just” a client feature? So, feed do not even have to state any emojis. As a user I’d configure my client to use a certain symbol for feed ABC. Currently, I can do a similar thing in tt
where I assign colors to feeds. On the other hand, what if a user wants to control what symbol should be displayed, similar to the feed’s nick? Hmm. But still, my terminal font doesn’t even render most of emojis. So, Unicode boxes everywhere. This makes me think it should actually be a only client feature.
i do kinda like htmx, but i might end up going my own way with my own similar library that matches better with my use patterns which are really not compatible with any extra scripting. so less flexible, but possible more powerful in the end.
After testing Vivaldi for a couple of weeks I am convinced this is a great browser and to support the team behind it, I decided to start sending them a couple of Euro monthly, just to keep the momentum going.
@movq@www.uninformativ.de Ta! Absolutely, go for it. :-)
I’m seeing strange lights in the sky. None of my cameras are sensitive enough to make a video.
It’s probably one of two things:
- A ship on the nearby river with a lightshow going. It’s rare but it happens.
- A steap hill nearby, cars driving “upwards”, and since super bright LED lights are normal nowadays, they reflect from the clouds.
Either way, looks fancy.
@movq@www.uninformativ.de i’ve wondered the same thing.. dansup can be pretty erratic and i don’t really trust the guy. thankfully (at least from my perspective) he’s not the only game in town. though i think going UI-first is kind of jumping the gun. the fediverse doesn’t really have the infrastructure in place to support video publishing at the scale that a tiktok user might expect. based on some of dansups statements regarding palestine, i’m sure its partially an effort to control what kind of content makes it into fedi’s tiktok streams for the first while.
@prologic@twtxt.net yeah short Nick is going to be unique enough. There is always olong Nick that adds the domain for differentiation.
After the behaviour of a clearly very angry feed author over the past few days, I’m very tempted to give up on Twtxt and allow it to go back to being dead. What really is the point of building and supporting a way to exchange little pieces of text with one another in a completely decentralised way, if you’re just going to keep humping up against such hostility? I don’t know why I do this anymore.
After the behaviour of a clearly very angry feed author over the past few days, I’m very tempted to give up on Twtxt and allow it to go back to being dead. What really is the point of building and supporting a way to exchange little pieces of text with one another in a completely decentralized way, if you’re just going to keep bumping up against such hostility? I don’t know why I do this anymore.
mon niveau serait de 13-kyu, je ne sais pas si c’est bien :/ https://play.baduk.org/go-test/start.php?
@movq@www.uninformativ.de Although my recent breakage/down time was more of a result of human error than it is something to blame on software itself, I do get your point; and will highly probably end up going the same route in the near future. It’s just that in order to south my forever itching curiosity, I have to learn and try some things first.
@doesnm@doesnm.p.psf.lt Much appreciated!! 🙏 I’ll go through the files and see if I can understand any of it. I might learn a thing or two along the way.
Web interface is deleted in https://git.mills.io/saltyim/saltyim/commit/376de2702319686c902ec03b8ca1e17b020fc639 but seems incorrectly (in source i see git lfs metadata). Can be builded if you grab https://git.mills.io/saltyim/saltyim/src/commit/15a64de82829/internal/web/app.wasm and place it in source (go directory has cached source) and rebuild
There is a pressing need to hold Israel accountable, not only for its longstanding violations of international law, but specifically for its longstanding refusal to abide by its Charter obligations. In the face of this recalcitrance, the UN must move towards expelling Israel from the organization, not only because the UN exists to uphold international law, but also to maintain the UN’s integrity as an organization. The persistent, open violations by Israel of binding UNSC resolutions cannot go unpunished. The current situation, where Israel openly accuses the UN of bias, refuses to cooperate with the organization on multitude levels, defies binding orders of the ICJ, physically attacks UN premises and staff, and even moves towards designating a UN agency as a terrorist organization, is a clear threat to the authority of the UN – an issue which the UNSC raised explicitly in the case of South Africa. To allow the situation to continue would show that international legal norms, and rules of the UN binding member states, are applied on the basis of double standards: specifically, that states allied to powerful Western countries are afforded impunity. https://opiniojuris.org/2024/10/09/israel-must-be-expelled-from-the-united-nations/
Honestly… not much. Have abandon two projects (both private) on Golang and one related to cryptography. My mostly languages are Python and Javascript (also can PHP). After writing code on Go i spend same time on fixing dumb errors
@3r1c@3r1c.net I think I’m gonna like that blog. 😅 https://unixdigest.com/articles/is-the-madness-ever-going-to-end.html
Grand Canyon Rim To Rim: 27.90 miles, 00:28:36 average pace, 13:17:46 duration
grand canyon rim-to-rim with kelly and craig. it was a blast! a lot of firsts: crazy elevation, head lamps, poles. i had a really good time and then we started to encounter some elevation. definitely could feel the altitude as soon as there was an incline. then after so many large steps up my quads started to feel it. at one point everything seized up and i fell down. luckily craig jumped in my leg and started stretching it out which helped a lot. the rest of it from there it was slow going but only once the large steps were sparse we cruised ahead. definitely would do it again.
#running #race
i don’t normally reach for go when starting a project, but this pubsub gemini thing seems like a great addition to ~solderpunk/molly-brown and i was already intended on adding titan support so i might as well get familiar with the codebase.
Same! Great joke!
I share I did write up an algorithm for it at some point I think it is lost in a git comment someplace. I’ll put together a pseudo/go code this week.
Super simple:
Making a reply:
- If yarn has one use that. (Maybe do collision check?)
- Make hash of twt raw no truncation.
- Check local cache for shortest without collision
- in SQL:
select len(subject) where head_full_hash like subject || '%'
- in SQL:
Threading:
- Get full hash of head twt
- Search for twts
- in SQL:
head_full_hash like subject || '%' and created_on > head_timestamp
- in SQL:
The assumption being replies will be for the most recent head. If replying to an older one it will use a longer hash.
@prologic@twtxt.net I wanted to wait for things to settle down. It’s still unclear to me in which direction we’re going – and if that new/different stuff is even possible to implement in jenny. That said, I’ve been really busy with private stuff these last few days, I’ve lost track of most of what you’re discussing. 🥴
If we stuck with Blake2b for Twt Hash(es); what do we think we need to reasonably go to in bit length/size?
=> https://gist.mills.io/prologic/194993e7db04498fa0e8d00a528f7be6
e.g: (turns out @xuu@txt.sour.is is right about Blak2b being easy/simple too!):
$ printf "%s\t%s\t%s" "https://example.com/twtxt.txt" "2024-09-29T13:30:00Z" "Hello World!" | b2sum -l 32 -t | awk '{ print $1 }'
7b8b79dd
Apparently Drama
is tech entities’ new Going Viral
PR stunt. After the Wordpress vs. WPE mayhem, Godot starts it’s own, Who/what’s next?
@prologic@twtxt.net Regarding the new way of generating twt-hashes, to me it makes more sense to use tabs as separator instead of spaces, since the you can just copy/past a line directly from a twtxt-file that already go a tab between timestamp and message. But tabs might be hard to “type” when you are in a terminal, since it will activate autocomplete…🤔
Another thing, it seems that you sugget we only use the domain in the hash-creation and not the full path to the twtxt.txt
$ echo -e "https://example.com 2024-09-29T13:30:00Z Hello World!" | sha256sum - | awk '{ print $1 }' | base64 | head -c 12
@bender@twtxt.net HAHA I’ve just bookmarked that Repo to go through it tomorrow 👌
if twtxt 2 is dropping gemini support, i will probably move on and spend more time on my gemini social zine protocol instead. i think the direction of the protocol is probably fine, but for me web is a tier 2 publishing channel. if the choice is between gemini and http i’m always going to pick gemini. its been a fun ride, but i guess this is where i get off.
@anth@a.9srv.net you wrote:
“Edits and Deletions should go; see also Section 6. This is probably the worst example of this document pushing a text document to do more protocol-like things.”
Edit and deletions are precisely what brought us here. Currently, if one replies to a twtxt, and the original gets later edited, it breaks replies, and potentially drastically changes context.