In case youāre bored and need a laugh: https://www.youtube.com/playlist?list=PLP5z5Xlj-uEVYDMR9DVI1tK7ICdM7LeWq
I canāt remember if the hex viewer back then had these options. Donāt even recall what software that was. :-)
The one that I used during my Windows 95 days was āHex Workshopā. It had similar features, just not as promimently displayed. It shows them down there in the statusline as āValueā:
https://movq.de/v/a24558f83f/s.png
Newer versions can probably do more, havenāt checked. š (Assuming this program still exists.)
Apart from selecting text to copy into the clipboard. But that probably has the potential for trouble and interference with button clicks, etc.
Yeah, thatās a big problem: Once you activate mouse mode in the terminal, the terminal loses the ability to select text. š Youād either have to emulate that in the program itself (like Vim does) or give the user an easy way to turn mouse support on/off during runtime.
How did the startup times develop?
Theyāre pretty stable at around 230 ms on my old NUC. Itās just fast enough so that it doesnāt annoy me.
Iām inclined to remove all mouse support, except for moving windows. š¤ I originally wanted this to emulate the behavior of DOS programs, but a) mouse support is a lot of code, b) using the mouse is cumbersome anyway and I would rarely do it.
Slow progress: My hex editor now has an info panel that shows whatās under the cursor. https://movq.de/v/f9586ec65c/s.png
Whatās going on here?
https://imgur.com/gallery/dude-back-trying-to-keep-together-ilY5Ltu
Is that real? Did I just watch a politician genuinely chuckle? Thatās unheard of. Is that even legal?
@lyse@lyse.isobeef.org Sauna is awesome ā if it wasnāt for other people. 𤣠A little mƶkki in Finland with a private sauna, that would be it.
@lyse@lyse.isobeef.org Found some numbers now, theyāre saying it was around 10cm in 3-4 hours. I donāt know, felt like more. š The forecast wasnāt really good either, now that I think about it. They said thereās going to be some snow, okay, fine, but then, boom.
Haha, that old ad is lovely. Those days are over. š¤£
Havenāt watched it to the end yet, but @lyse@lyse.isobeef.org might like this: https://www.youtube.com/watch?v=EarBm4tfMXs
@lyse@lyse.isobeef.org I donāt know a number (wait, why canāt I google a Wetterbericht but only a Wettervorhersage?!), but it was enough for public transportation to shut down. š I think I saw around five trucks on the side of the road who couldnāt continue, too icy. Some cars stranded.
My car has an automatic gearbox and Iām not sure if thatās good or bad in such conditions. š Pretty hard to accelerate without spinning wheels ā¦
@prologic@twtxt.net (While browsing through that, I noticed that https://mu-lang.dev/ itself doesnāt really mention the source code repo, does it? š¤ Like, the quickstart guide begins with āBuild the host: go build ./cmd/muā, but whereās the git clone ⦠command? š
)
Iām not really sure what the goal is. š¤ Do you want to get pull requests for the docs? Or bug reports for mu itself? š¤
Well that was a lot of snow. Barely made it home. (Because, of course, today was the day where I went to the office. š¤£)
Aww man, I need to pick up learning Finnish again. I just love the sound of that language.
Surprisingly, I still understand quite a bit of what sheās saying here: https://www.youtube.com/watch?v=Wfnt5-7QBvQ
I reckon up until then you had to have another first name that clearly differentiated.
Yes, apparently so. (Iām glad we stopped doing that. I donāt get this obsession with the contents of other peopleās pants. š¤¢)
Now Iām wondering, was that also the beginning when parents started giving their kids really weird names?
Did this ever happen or was this an urban myth? Would have to dig up some statistics, I guess. (Anecdotal evidence: None of the people I know gave their kids crazy names. š)
Fell into a bit of a rabbit hole and learned that it took German law until 2008 to actually allow unisex/gender-neutral first names: https://www.bundesverfassungsgericht.de/entscheidungen/rk20081205_1bvr057607.html š¤¦
@bender@twtxt.net Will do. š¤£
@arne@uplegger.eu Das klingt spannend! Setze ich mal auf die Liste. (Bin gerade an The Luminous Dead dran.)
I wonder if my elderly German neighbors have learned enough English by now to understand what Iām swearing about all day long. š¤
@klaxzy@klaxzy.net Nope, not IONOS, but we use them a lot at work. To be honest, I consider them one of the better providers (at least regarding the IaaS stuff that we do). š
My hoster broke UDP, so DNS is broken as well and that takes a lot of things with it. No more email for me, I guess.
Letās hope theyāll fix it soon.
@prologic@twtxt.net (I still donāt know how you can muster up so much motivation and energy (especially when you have a family). Are we the same species?! š )
@lyse@lyse.isobeef.org Abed is a character from Community and ācool cool coolā was one of his āthingsā: https://www.youtube.com/watch?v=vMXYjejIup4
@lyse@lyse.isobeef.org Ohh, Winter Wonderland. Lovely!
Never had frozen hair. š³ With just around 0°C? š¤
@lyse@lyse.isobeef.org (Was that a reference to Abed? š )
argparse takes 50 ms on my NUC, because this pulls in all kinds of fancy stuff behind the scenes, colorization and what not. š®āšØ
Just importing data classes takes another 60 ms ⦠This fancy new stuff is really costly.
Omg, Python. Parsing arguments with argparse takes 50 ms on my NUC, because this pulls in all kinds of fancy stuff behind the scenes, colorization and what not. š®āšØ
Another project where Iām going to use my terminal widget toolkit is a hex editor. This is still very young, obviously, and thereās a lot of work to do (both in the toolkit and this particular application), but Iām making some progress:
https://movq.de/v/2bae14ed16/vid-1769283187.mp4
Since this program is UTF-8 clean (I hope), you can do things like enter multi-byte UTF-8 sequences or paste them from the system clipboard (another hex editor I just tried failed to do this correctly):
https://movq.de/v/e9241034c1/vid-1769283755.mp4
Under the hood, Iām using mmap() with MAP_PRIVATE, which is really cool: I get the entire file as a byte array, no matter how large it is, no need to actually read it upfront; and MAP_PRIVATE means that I can write to this area however I like without changing the underlying file. The kernel does copy-on-write for me. Only when you hit Save, it will write to the filesystem. And itās just a couple lines of code. The kernel does all the magic. š„³
(Thank goodness, they turned it off for the weekend! So itās only 24/5! Whoop, whoop.)
@lyse@lyse.isobeef.org Thatās a long way to walk! š¤Æ
@bender@twtxt.net Naaah, I donāt have a dish washer either, itāll be fine. 𤣠(No it wonāt.)
My washing machine is making funny noises and Iām this š¤ close to just throwing it out and washing everything by hand, instead of buying another expensive enshittified product thatās designed to break down in a couple of years.
Washing is easy anyway, the spin cycle to dry that stuff is the important part ā¦
ChatGPT https://brynet.ca/chatgpt/
@shinyoukai@yume.laidback.moe š with extra 24/7 noise from the construction site outside (construction guys live in a little ācontainerā and they need power, so they have a diesel generator running 24/7)
Great article by Ploum about chatbots/AI and education: https://ploum.net/2026-01-19-exam-with-chatbots.html
When people āmake plansā, I always respond like this:
https://movq.de/v/9a8712846d/at-night.jpg
Finally found the clip where this is from:
go install ./cmd/mu-lsp/... and install the VS extension and hey presto š„³ You get outlines of any Mu source, Find References and Go to Definition!
@prologic@twtxt.net Reminds me to have another look at LSP. Last time I checked, it was super messy in Vim. š¤
Spent basically the entire day (except for the mandatory walk) fighting with Pythonās type hints. But, the result is that my widget toolkit now passes mypy --strict.
I really, really donāt want to write larger pieces of software without static typing anymore. With dynamic typing, you must test every code path in your program to catch even the most basic errors. pylint helps a bit (doesnāt need type hints), but thatās really not enough.
Also, somewhere along the way, I picked up a very bad (Python) programming style. (Actually, I know exactly where I picked that up, but I donāt want to point the finger now.) This style makes heavy use of dicts and tuples instead of proper classes. That works for small scripts, but it very quickly turns into an absolute mess once the program grows. Prime example: jenny. š©
I have a love-hate relationship with Pythonās type hints, because they are meaningless at runtime, so they can be utterly misleading. Iām beginning to like them as an additional safety-net, though.
(But really, if correctness is the goal, you either need to invest a ton of time to get 100% test coverage ā or donāt use Python.)
@shinyoukai@yume.laidback.moe Yeah, I avoided that issue as well. I moved everything on the website except for the twtxt stuff.
@lyse@lyse.isobeef.org The thing is thatās hard to avoid if TYPE_CHECKING, but documentation tools such as pdoc donāt support that ⦠so itās either type hints or API docs. š¤·
I hope I can eventually find a way out of this mess ā¦
@javivf@adn.org.es Oh! Thanks, should be fixed now. š
@lyse@lyse.isobeef.org All that short brown grass, almost looks like Scotland. š¤ (Iāve never been there. š )
What the heck is 06.jpg?
@prologic@twtxt.net Changed the domain of my website (except for twtxt).
@lyse@lyse.isobeef.org (At least I didnāt break all the links again. In late 2015, I switched from a PHP backend to the current static website, which changed just about everything. I hope doing a disruptive change like this one every 10 years is tolerable. š )
@lyse@lyse.isobeef.org Oh, right. Forgot about that. š«¤
Did it work? Am I still here? š¤£
@prologic@twtxt.net I think I found an easy way to redirect anything except the twtxt stuff. Thatās probably better. š¤
So, are you guys up for an experiment?
Iām really not happy with the domain āuninformativ.deā anymore. Iām going to switch to āmovq.deā soon (or maybe something else if I get another fancy idea).
If I keep the url = field in my twtxt file, nothing should break, right? Right? š¤£
@prologic@twtxt.net Yup. š
@bender@twtxt.net gemini-cli, something something https://github.com/google-gemini/gemini-cli/issues/16723
I recently got an email with this byte sequence:
\xf0\x9f\x8e\x81\xf0\x9f\x95\xaf\xef\xb8\x8f
Thatās U+1F381, U+1F56F, U+FE0F. The last one is a āvariation selectorā:
https://unicodeplus.com/U+FE0F
My toolkit renders this incorrectly ā and so do tmux and GNU screen.
Unicode aināt easy. š„“
https://github.com/unix-v4-commentary/unix-v4-source-commentary
A comprehensive, line-by-line commentary on the UNIX Fourth Edition source code (released November 1973; tape recovered from June 1974 distribution).
./bin/mu -B -o ... -p muos/amd64 ... target.
@prologic@twtxt.net Iād love to take a look at the code. š
Iām kind of curious to know how much Assembly I need vs. How much of a microkernel can I build purely in Mu (µ)? š¤
Canāt really answer that, because I only made a working kernel for 16-bit real mode yet. That is 99% C, though, only syscall entry points are Assembly. (The OpenWatcom compiler provides C wrappers for triggering software interrupts, which makes things easier.)
But in long mode? No idea yet. š At least changing the page tables will require a tiny little bit of Assembly.
./bin/mu -B -o ... -p muos/amd64 ... target.
@prologic@twtxt.net Damn, nice! I know exactly what you mean ā the output/screenshot looks trivial, but thereās so much going on behind the scenes. š
Did you do the whole dance with BIOS boot and everything?
tcell.Key constants and typing different key combinations in the terminal to see the generated tcell.EventKeys in the debug log. Until I pressed Ctrl+Alt+Backspace⦠:-D Yep, suddenly there went my Xā¦
@lyse@lyse.isobeef.org ⦠I sure hope that they generate these files from the general terminfo database instead of maintaining their own DB. š³
@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.
tcell.Key constants and typing different key combinations in the terminal to see the generated tcell.EventKeys in the debug log. Until I pressed Ctrl+Alt+Backspace⦠:-D Yep, suddenly there went my Xā¦
@lyse@lyse.isobeef.org Unix terminals are quite limited in that regard. 𫤠You know how Ctrl works? The XOR 0x40 thing? And Alt doesnāt exist at all, itās just a prefixed ESC byte.
I was surprised to see curses knowing about āShift+Tabā, wondering how that is supposed to work. Well, itās an escape sequence, of course (depending on the terminal, of course).
Some work on the menu system to brighten my mood a little bit. No mouse support yet.
@prologic@twtxt.net Probably not, but thanks. š Itāll get better.
@prologic@twtxt.net Work and the general state of (gestures broadly) everything.
Frustration level: Through the roof.
@bender@twtxt.net I vaguely remember this, some leftover from the old-style hashtags? The (#foo) stuff? š¤
Pep8 is deprecated, I think
Hmm, I donāt think it is, this still says āStatus: Activeā: https://peps.python.org/pep-0008/ š¤
Since I used so much Rust during the holidays, I got totally used to rustfmt. I now use similar tools for Python (black and isort).
What have I been doing all these years?! I never want to format code manually again. š¤£š
@shinyoukai@yume.laidback.moe Hopefully, yes. Havenāt tried it yet.
@shinyoukai@neko.laidback.moe mckinley is back? Where? š¤
Okay, I had heard of āRiverā before but I was not aware of this:
https://codeberg.org/river/river
River defers all window management policy to a separate window manager implementing the river-window-management-v1 protocol. This includes window position/size, pointer/keyboard bindings, focus management, window decorations, desktop shell graphics, and more.
This sounds promising and it follows the old X11 model. River does all the nasty Wayland work and I can make just the WM? š¤š¤Æ
@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).
@lyse@lyse.isobeef.org Ah, the lower right corner is different on purpose: Itās where you can click and drag to resize the window. https://movq.de/v/cbfc575ca6/vid-1767977198.mp4 Not sure how to make this easier to recognize. š¤ (Itās the only corner where you can drag, btw.)
@bender@twtxt.net Seriously, if I ever get a CRT monitor again, I want it to be an amber one and then hook it up to some 8086. š Only problem is that this stuff is expensive as hell now ā¦
(The background and the window shadow are not amber and it wouldnāt have looked like that on a real monitor, unless you cranked up the brightness way too high.)
I think my widget toolkit will have an amber theme by default:
https://movq.de/v/22662db9b2/amber.png
My first PC had a monochrome amber screen and I just love looking at this. š
(It looks even better with redshift enabled, but I canāt screenshot that.)
Only downside is that there arenāt that many amber shades in the standard 256 color palette. Or well, maybe thatās actually a good thing, as it probably helps to keep the theme more minimal and less cluttered/noisy. š¤
Work kills the soul
Since most of the jobs that we do nowadays are simply meaningless: Yes. Work kills the soul.
Vacation: Doing crazy things like C on DOS, lots of Rust, bare-metal assembly code, everything is fine.
Back at work: How the fuck do I move an email in this web mail program? Am I stupid? š®āšØ
@lyse@lyse.isobeef.org Iāll let you guys know when/if itās ready to get published. š There are still rough edges and, obviously, very few widgets. Most importantly, a list view and a table widget are missing. But my vacation is over now, so things will crawl to a halt.
@prologic@twtxt.net Yep! I like that this distillation metaphor makes it explicit: You have to go ahead and actually distill something. It doesnāt happen automatically. The metaphor acknowledges that this is work that needs to be done by someone.
āWhat is a PC compatible?ā https://codon.org.uk/~mjg59/blog/p/what-is-a-pc-compatible/
I think this is finally a good metaphor to talk about āsimpleā software:
https://oldbytes.space/@psf/115846939202097661
Distilled software.
I quote in full:
principles of software distillation:
Old software is usually small and new software is usually large. A distilled program can be old or new, but is always small, and is powerful by its choice of ideas, not its implementation size.
A distilled program has the conciseness of an initial version and the refinement of a final version.
A distilled program is a finished work, but remains hackable due to its small size, allowing it to serve as the starting point for new works.
Many people write programs, but few stick with a program long enough to distill it.
I often tried to tell people about āsimpleā or āminimalisticā software, āKISSā, stuff like that, but they never understand ā because everybody has a different idea of āsimpleā. The term āsimpleā is too abstract.
This is worth thinking about some more. š¤
@prologic@twtxt.net Yup, itās been a while since I played that. š Hardly rememberd it, to be honest. And apparently I did everything wrong, because that monster just came along and trashed my city, no way to stop it. š¤Ŗ
@bender@twtxt.net I am so prepared and ready for retirement. 𤣠(Not gonna happen for a while, though. If ever.)
@prologic@twtxt.net SimCity 2000 in DOSBox š
I just wanted to chill a bit, then this fucker came along and burned everything to the ground.
httpd now sends the Last-Modified with UTC instead of GMT. Current example:
@shinyoukai@neko.laidback.moe Not using OpenBSD or httpd? Yeah. Itās been working quite well since ~2017, so, meh, too lazy to switch now. But nothing is set in stone, of course.
@bender@twtxt.net I have another two days of vacation, then itās back to the grindstone for me as well. š¢
Canāt we have vacation all year round? š¤£
@prologic@twtxt.net Computers are great, eh? Soooo many problems to choose from! What do you want to solve today? š
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). š¤
Looks like someone loves Depth First Search.
More widget system progress:
https://movq.de/v/87e2bce376/vid-1767467193.mp4
I like the oldschool shadow effect. š Not sure if Iāll keep it, but itās neat.
The menu bar is still fake.
Had to spend quite a bit of time optimizing the rendering today. This can get really slow really quickly.
Unicode is Pain.
I might be able to start porting my first program (currently uses urwid) soon. š¤
httpd now sends the Last-Modified with UTC instead of GMT. Current example:
@shinyoukai@neko.laidback.moe Yeah, probably. Not going down the CURRENT route, thatās for sure. š
httpd now sends the Last-Modified with UTC instead of GMT. Current example:
@lyse@lyse.isobeef.org Itās already fixed:
https://github.com/openbsd/src/commit/668f1f05e71c5e979d278f1ad4568956226715ea
Question is when that fix will land. š
httpd now sends the Last-Modified with UTC instead of GMT. Current example:
@lyse@lyse.isobeef.org Bah. Yeah, that looks like a bug. Letās see if this already reported upstream. š¤
Finally Skyrim weather. š„³
@eldersnake@we.loveprivacy.club
Steps to world domination:
- āInventā āAIā (by using other peopleās data).
- Get people hyped about it and ideally hooked on it.
- Only provide it as a cloud service. But hey, if you want to, you can run it locally!
- Buy all hardware available on the market, so that nobody but you can build more systems.
- All PCs of consumers and competitors are too weak now and canāt be upgraded anymore.
- Everybody depends on your cloud service! Win!
All of that is possible because corporations donāt have a āconscienceā in capitalism. Nobody forces the RAM manufacturers to sell all their stuff to just one or two buyers, but since the only goal of that manufacturer is to make money, they do it.
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.
On my way to having windows and mouse support:
https://movq.de/v/95bbbbd3e8/basic-windows.mp4
It would be cool to have something like Turbo Vision eventually.
(I considered just using Turbo Vision, but itās a C++ library and thatās not quite what Iām looking for. But itās not yet completely off the table.)
@lyse@lyse.isobeef.org I havenāt spoken to a single person yet who was a fan of all this. Not even the more conservative family members.
Some people have detonated several really loud bombs yesterday. This wasnāt a āBƶllerā. It shook my walls, doors, windows. Family members in other parts of the country reported the same ⦠Is this a new trend?
@javivf@adn.org.es Happy New Year! Letās hope so. š
println("Hello World"):
@prologic@twtxt.net Not bad. š