@bender@twtxt.net Apologies, Iām still working through some layout issues with TwtStrm and frequently miss mentionsā¦
Magic: the Gathering does not use a Game Master (although professional referees are often used in sanctioned events). While the game has alot of thematic crossover with with D&D (or fantasy games in general), the system is much more of an abstract, card-dueling system involving things like āthe stackā and insanely specific rules on card timing and interactions.
Like, we joke about āIām sending my army of (goblins / elves / angels / whatever) at you,ā but thatās about as far into the ārole-playingā element most magic games get in my experience (and most of the āofficialā competitive games Iāve played at my FLGS were even more abstract and less thematic, although itās been years since I played in one of those).
@kiwu@twtxt.net I returned home from an on-site week at work. Commute was an adventure every day. It started off with a canceled train on Monday morning. Luckily, some very good mates granted my asylum. But even with shorter rides, I faced delays due to fuckwits on the tracks, then the train was terminated early due to the large delay, so we had to change trains. On the bright side, they then sent an entirely empty one, but I donāt get why they just didnāt continue with the first one instead. Due to another delayed train I didnāt catch my connection and the next one was canceled, so I had to wait for the following one. Super great fun. Iām very exhausted now and am very glad that I had already filed in flex time for tomorrow before the on-site event was scheduled.
Meeting my workmates in person was actually nice. Itās okay to do that once a quarter, I donāt need to do that more often. We should have had more meetings, though, trying to work in the office was expectedly incredibly inefficient. We certainly would have had more topics to actually discuss and think about. And most of them would have really benefited from nearly everybody being in the same room. Anyway.
Today, I even met my workmates from past projects in the office, too. So, the socializing was great.
@bender@twtxt.net Iām already using it for tracktivity (meant for tracking activities and events, like weather, food consumption, stuff like that), which is basically a somewhat-fancy CSV editor:
https://movq.de/v/f26eb836ee/s.png
I have a couple of other projects where I could use it, because they are plain curses at the moment. Like, one of them has an āedit boxā, but you canāt enter Unicode, because it was too complicated. That would benefit from the framework.
Either way, itās the most satisfying project in a long time and Iām learning a ton of stuff.
Iām trying to implement configurable key bindings in tt. Boy, is parsing the key names into tcell.EventKeys a horrible thing. This type consists of three information:
- maybe a predefined compound key sequence, like Ctrl+A
- maybe some modifiers, such as Shift, Ctrl, etc.
- maybe a rune if neither modifiers are present nor a predefined compound key exists
Itās hardcoded usage results in code like this:
func (t *TreeView[T]) InputHandler() func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
return t.WrapInputHandler(func(event *tcell.EventKey, setFocus func(p tview.Primitive)) {
switch event.Key() {
case tcell.KeyUp:
t.moveUp()
case tcell.KeyDown:
t.moveDown()
case tcell.KeyHome:
t.moveTop()
case tcell.KeyEnd:
t.moveBottom()
case tcell.KeyCtrlE:
t.moveScrollOffsetDown()
case tcell.KeyCtrlY:
t.moveScrollOffsetUp()
case tcell.KeyTab, tcell.KeyBacktab:
if t.finished != nil {
t.finished(event.Key())
}
case tcell.KeyRune:
if event.Modifiers() == tcell.ModNone {
switch event.Rune() {
case 'k':
t.moveUp()
case 'j':
t.moveDown()
case 'g':
t.moveTop()
case 'G':
t.moveBottom()
}
}
}
})
}
This data structure is just awful to handle and especially initialize in my opinion. Some compound tcell.Keys are mapped to human-readable names in tcell.KeyNames. However, these names always use - to join modifiers, e.g. resulting in Ctrl-A, whereas tcell.EventKey.Name() produces +-delimited strings, e.g. Ctrl+A. Gnaarf, why this asymmetry!? O_o
I just checked k9s and theyāre extending tcell.KeyNames with their own tcell.Key definitions like crazy: https://github.com/derailed/k9s/blob/master/internal/ui/key.go Then, they convert an original tcell.EventKey to tcell.Key: https://github.com/derailed/k9s/blob/b53f3091ca2d9ab963913b0d5e59376aea3f3e51/internal/ui/app.go#L287 This must be used when actually handling keyboard input: https://github.com/derailed/k9s/blob/e55083ba271eed6fc4014674890f70c5ed6c70e0/internal/ui/tree.go#L101
This seems to be much nicer to use. However, I fear this will break eventually. And itās more fragile in general, because itās rather easy to forget the conversion or one can get confused whether a certain key at hand is now an original tcell.Key coming from the library or an āextendedā one.
I will see if I can find some other programs that provide configurable tcell key bindings.
@lyse@lyse.isobeef.org Itās not super comfortable, thatās right.
But these mouse events come with a caveat anyway:
ncurses uses the XM terminfo entry to enable mouse events, but it looks like this entry does not enable motion events for most terminal emulators. Reporting motion events is supported by, say, XTerm, xiate, st, or urxvt, it just isnāt activated by XM. This makes all this dragging stuff useless.
For the moment, I edited the terminfo entry for my terminal to include motion events. That canāt be a proper solution. Iām not sure yet if Iām supposed to send the appropriate sequence manually ā¦
And the terminfo entries for tmux or screen donāt include XM at all. tmux itself supports the mouse, but Iām not sure yet how to make it pass on the events to the programs running inside of it (maybe thatās just not supported).
To make things worse, on the Linux VT (outside of X11 or Wayland), the whole thing works differently: You have to use good old gpm to get mouse events (gpm has been around forever, I already used this on SuSE Linux). ncurses does support this, but this is a build flag and Arch Linux doesnāt set this flag. So, at the moment, Iām running a custom build of ncurses as a quick hack. š And this doesnāt report motion events either! Just clicks. (I donāt know if gpm itself can report motion events, I never used the library directly.)
tl;dr: The whole thing will probably be ākeyboard firstā and then the mouse stuff is a gimmick on top. As much as Iād like to, this isnāt going to be like TUI applications on DOS. Iāll use āWindowsā for popups or a multi-window view (with the āWindowManagerā being a tiny little tiling WM).
And now the event loop is not a simple loop around cursesā getch() anymore but it can wait for events on any file descriptor. Hereās a simple test program that waits for connections on a TCP socket, accepts it, reads a line, sends back a line:
https://movq.de/v/93fa46a030/vid-1767547942.mp4
And the scrollbar indicators are working now.
Iāll probably implement timer callbacks using timerfd (even though thatās Linux-only). š¤
At around 19 seconds in the video, you can see some minor graphical glitches.
Text mode applications in Unix terminals are such a mess. Itās a miracle that this works at all.
In the old DOS days, you could get text (and colors) on the screen just by writing to memory, because the VGA memory was mapped to a fixed address. We donāt have that model anymore. To write a character to a certain position, you have to send an escape sequence to move the cursor to that position, then more escape sequences to set the color/attributes, then more escape sequences to get the cursor to where you actually want it. And then of course UTF-8 on top, i.e. you have no idea what the terminal will actually do when you send it a āšā.
Mouse events work by the terminal sending escape sequences to you (https://www.xfree86.org/current/ctlseqs.html#Mouse%20Tracking).
ncurses does an amazing job here. Itās fast (by having off-screen buffers and tracking changes, so it rarely has to actually send full screen updates to the terminal) and reliable and works across terminals. Without the terminfo database that keeps track of which terminal supports/requires which escape sequences, weād be lost.
But gosh, what a mess this is under the hood ⦠Makes you really miss memory mapped VGA and mouse drivers.
Day 7 was pretty tough, I initially ended up implementing an exponential in both time and memory solution that I killed because it was eating all the resources on my Mac Studio, and this poor little machine only has 32GB of memory (I stopped it at 118GB of memory, swapping badly!), This is what I ended up doing before/after:
- Before: Time O(2^k Ā· L), memory O(2^k), where k is the number of splitters along a reachable path and L is path length. Exponential in k.
- After: Time O(RĀ·C) (or O(RĀ·C + s) with s split events), memory OĀ©, where R = rows, C = columns. Polynomial/linear in grid size.
@movq@www.uninformativ.de I bet. I wouldnāt be surprised if it more popular in some Discord servers too. I mean, the event itself is quite obscure, so⦠yeah.
Scheduling the next Yarn.social Call for next month, a month in advance. Hope yāall can make the next one š¤
š Reminder that weāre starting up our social calls again (monthly), RSVP here š¤ It starts in 13h27m š Hope to see some/all of you there š
I had a looksie (just to be sure) at the database, and they were thankfully legit test events. But this did spark/trigger me to make sure I have some form of anti-spam measures in place. So I added some per-event / per-rsvp rate-limiting and honeypot(s).
This was a great read, btw. š If you liked Event Horizon, this is for you. Iām gonna get her other two scifi books as well, thatās for sure.
@prologic@twtxt.net so far, yup. I recommend to make the event banner bigger. I almost missed the details of it, as the text is quite tiny.
So just @bender@twtxt.net and I attending our monly call eh?
@movq@www.uninformativ.de This is actually a good positive change I think!
Personally, Iāll probably stretch it out over 24 days. Giving myself more time to solve each puzzle and I really want this event to last the entire month. š
I might even do AoC this year with the elevated stress/pressure! ā The last few times Iāve tried, Iāve always felt far too much pressure and felt like a failure š (mostly ya know because of my vision impairment, I couldnāt keep up!)
Advent of Code will be different this year:
There will only be 12 puzzles, i.e. only December 1 to December 12. This might make it more interesting for some people, because itās (probably) less work and a lower chance of people getting burned out. š¤
Personally, Iāll probably stretch it out over 24 days. Giving myself more time to solve each puzzle and I really want this event to last the entire month. š
Maybe this makes it more interesting for some people around here as well?
Reminder, kick-starting our monthly social call! š Please RSVP if you can make it!
Hey all š Starring up the monthly social call we used to have š¤ Please RSVP here if you can make it! š
is the first url metadata field unequivocally treated as the canon feed url when calculating hashes, or are they ignored if theyāre not at least proper urls? do you just tolerate it if theyāre impersonating someone elseās feed, or pointing to something that isnāt even a feed at all?
and if the first url metadata field changes, should it be logged with a time so we can still calculate hashes for old posts? or should it never be updated? (in the case of a pod, where the end user has no choice in how such events are treated) or do we redirect all the old hashes to the new ones (probably this, since it would be helpful for edits too)
@movq@www.uninformativ.de Oh, nice read!
If Iām in the woods, Iād like to not waste my time with computers and focus on the beauty of nature. ;-) So, Iām not gonna participate in that event. But Iād read your articles on that subject anytime. :-)
psst iāll be at my local event for HTML day!!! iām very excited but very nervous, i donāt even know what iāll be working on! but iāll figure it outā¦
@movq@www.uninformativ.de I also donāt think that Iām a particularly good speaker. :-) The workshop model is a good idea, I like that.
Yeah, itās really good fun. I can highly recommend it. This is also a good way to train (new) developers to think like attackers, how to break in, destroy something or raise awareness of some classes of bugs. Then you can avoid them next time. Itās surprising to me what vulnerabilities come up during this event every time. So, absolutely worth it, win, win.
Theyāre all talks, not real hands-on trainings like you did.
I love listening to good, well-structured talks. Problem is, not everybody is a good speaker and many screw it up. š„“ Iām certainly not a great speaker, which is why I gravitate more towards āworkshopsā, in the hopes that people ask questions and discussions arise. Doesnāt always work out. 𤣠At the very least, I almost always have some other person connect to the projector/beamer/screenshare and then they do the stuff ā this avoids me being wwwwaaaaaaaaayyyy too fast.
We are usually drowned in stress and tight deadlines, hence events like today are super rare ⦠We used to do it more often until ~10 years ago.
Once a year the security guys organize a really great hacking event, though.
Oh dear, Iād love to participate in that. 𤯠That sounds like a lot of fun. (Why donāt we do this?!)
@movq@www.uninformativ.de Interesting internal education sessions are way too infrequent here as well. There are a bunch of āknowledge transferā meetings actually, but 90% of the topics already sound totally boring to me. The other 9% talks turned out to be underwhelming, sadly. I only attended a single one where it was delivered what has been promised. Theyāre all talks, not real hands-on trainings like you did.
Once a year the security guys organize a really great hacking event, though. Teams can volunteer to hand in their software dev instances and all workmates are invited to hack them and report security vulnerabilities. Thatās a lot of fun, but also gets frustrating towards the end when you donāt make any progress. :-) Thereās also some actual hands-on training in advance for preparation of the two days. Unfortunately, I missed the last event due to my own project being very stressful at the time.
When I had a Do What You Want Day I also show my direct teammates what I learned in the hopes of this being interesting to them as well. Iām the only one in my team using this opportunity, sadly.
One of the nicest things about Go is the language itself, comparing Go to other popular languages in terms of the complexity to learn to be proficient in:
- Go:
25keywords (Stack Overflow); CSP-style concurrency (goroutines & channels)
- Python 2:
30keywords (TutorialsPoint); GIL-bound threads & multiprocessing (Wikipedia)
- Python 3:
35keywords (Initial Commit); GIL-bound threads,asyncio& multiprocessing (Wikipedia, DEV Community)
- Java:
50keywords (Stack Overflow); threads +java.util.concurrent(Wikipedia)
- C++:
82keywords (Stack Overflow);std::thread, atomics & futures (en.cppreference.com)
- JavaScript:
38keywords (Stack Overflow); single-threaded event loop &async/await, Web Workers (Wikipedia)
- Ruby:
42keywords (Stack Overflow); GIL-bound threads (MRI), fibers & processes (Wikipedia)
@mana@yarn.girlonthemoon.xyz i LOVEEEE her 2018 BD event sm
FTC Takes Action Against Uber for Deceptive Billing and Cancellation Practices
Comments ā Read more
yarnd UI/UX experience (for those that use it) and as "client" features (not spec changes). The two ideas are quite simple:
This expands the usefulness of Twtxt / Yarn.social to:
- Sharing small posts
- Sharing links
- Sharing media
- Having long conversations
- Voting on topics, opinions or decisions
- RSVPing to virtual or physical events
#event:abc123 RSVP: yes +1
yarnd UI/UX experience (for those that use it) and as "client" features (not spec changes). The two ideas are quite simple:
#event:abc123 Go Meetup ā Sat Apr 27, 3pm @ Darling Harbour
š” I had this crazy idea (or is it?) last night while thinking about Twtxt and Yarn.social š
There are two things I think that could be really useful additions to the yarnd UI/UX experience (for those that use it) and as āclientā features (not spec changes). The two ideas are quite simple:
- Voting ā a way to cast, collect a vote on a decision, topic or opinion.
- RSVP ā a way to ārsvpā to a virtual (pr physical) event.
Both would use āplain textā on top of the way we already use Twtxt today and clients would render an appropriate UI/UX.
SDL2 ported to Mac OS 9
Well, this you certainly donāt see every day. This is a ārough draftā of SDL2 for MacOS 9, using CodeWarrior Pro 6 and 7. Enough was done to get it building in CW, and the start of a āmacosclassicā video driver was created. It DOES seem to basically work, but much still needs to be done. Event handling is just enough to handling Command-Q, there is no audio, etc etc etc. ā« A cast of thousands The hardest part was a video driver for the classic Mac OS, which had to be created mostly f ⦠ā Read more
Thereās a secret art easter egg thing, hidden on my website ( https://thecanine.ueuo.com ), for this years April fools event - itās been there for a few weeks, but now I can finally give hints.
In a couple of days Iāll be giving a talk about #twtxt https://www.meetup.com/es-ES/python-valencia-meetup/events/306769708/
I saw 100% I/O wait in htop today but couldnāt find a process which actually does I/O. Turns out, I/O wait isnāt what it used to be anymore:
https://lwn.net/Articles/989272/
In my case, it was mpd which triggered this:
https://github.com/MusicPlayerDaemon/MPD/issues/2241
mpd doesnāt actually do anything, it just sits there and waits for events. To my understanding, this is similar to something blocking on read(). Iām not quite sure yet if displaying this as I/O wait (or āPSI some ioā) is intentional or not ā but it sure is confusing.

Yeah. Itās mostly a parser at the moment. But I have extended the calendar.txt to include todo.txt and a repeat syntax to generate future occurances of events and todos.
do you mind sharing a picture ?
I canāt find something similar here, but my wife gave this one last year, and Iāve been using it a bit. Iād say itās useful as youāve shared.

We also have a shared calendar in the kitchen for family events, and itās working great.
Black swans occur when an event with a high negative impact but low probability occurs.
The big established parties are all bad traitors. I blame them and their actions to help raise AfD. They just [donāt?] give a fuck about the ordinary people, theyāre only concerned about their private gain and power.
To a large degree, yes. But I think the media is also equally at fault. There was absolutely no reason to invite AfD people to every event and let them talk. This has been going on for over 10 years. When we give them a stage to spread their hate, are we really surprised that hate spreads ⦠?
I donāt know the answers to this desaster. Iām beginning to think that people literally just want an outlet for their frustration, nothing more. Itās not about what particular parties actually plan to do. At least I think this applies to people in their 30ies and 40ies.
I should really fix my calender rendering. A two day event only pops up in the first day, but not in the second. When extended to three days, it correctly shows up in all three days. Meh.
Holly Hill - Long run: 12.06 miles, 00:09:43 average pace, 01:57:15 duration
did not sleep last night. the bed was not too comfortable and i was burning up for some reason. the run went well. it was a decent temperature and i kept the pace pretty moderate (mainly around a 9:30). hit two bridges going back-and-forth between daytona. i did walk a bit around mile ten to recollect myself but a good run nonetheless.
my daughter got first all-around in her gymnastic meet and did really well on all events, too!
#running
Pinellas County - 6 mile run: 6.05 miles, 00:08:49 average pace, 00:53:18 duration
pretty good run. been tough logging this last week or so with all the work, but its going well. there was a lot of people waiting to get in to walsingham park today⦠probably the 5km event i saw posted a couple of weeks ago. i need to be better about planning these things.
#running
Why Upstart from Ubuntu failed
Upstart was an event-based replacement for the traditional System V init (sysvinit) system on Ubuntu, introduced to bring a modern and more flexible way of handling system startup and service management. It emerged in the mid-2000s, during a period when sysvinitās age and limitations were becoming more apparent, especially with regard to concurrency and dependency handling. Upstart was developed by Canonical, the company behind Ubuntu, with the aim of reducing boot time ⦠ā Read more
@movq@www.uninformativ.de Over-ear headphones make moving and turning around quite uncomfortable. But it looks like youāre having a very calm sleep, unlike me, who likes to turn a bit on the side every now and then, too.
When I use noise cancelling devices in bed (absolutely required at scouting events), itās simple ear plugs. I got myself a big pack of 200 pairs nine and a half years ago (oh wow, didnāt realize I have them this long). A lifetime supply. Especially when I reuse them two, three dozen times or so before theyāre worn out and donāt seal properly anymore.
@eapl.me@eapl.me A way to have a more blueskyāish handles in twtxt could be to take inspiration from Bridgy Fed and say: If NICK = DOMAIN then only show @DOMAIN
So instead of @eapl.me@eapl.me it will just be @eapl.me
And it event seem that it will not break webfinger lookup: https://webfinger.net/lookup/?resource=%40darch.dk (at least not for how Iāve implemented webfinger on my sever for a single user;)
ES enrichment⦠à lire. https://glue.ghost.io/leveraging-threat-intel-for-event-enrichment-in-security-onion/
hmm i think i would want something that has support for repeating events. otherwise it looks neat.