@bender@twtxt.net Fixed 𤣠Nobody was following that feed š
yarnd had no reason to āpullā it in.
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.)
@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 ā¦
yes, yes thatās right. Mu (µ) now has a built-in LSP server for fans of VS Code / VSCodium š
You just 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!
@movq@www.uninformativ.de Hehe. :-) This steep footpath connects a hiking parking lot outside the village and the edge of the village in a fairly straight line. Garden owners are allowed to drive their vehicles down from the village to their lots on this pathway and up again. These two poles are placed about a third up from the botton on a short, comparatively flat section to stop people from taking this shortcut to get down to the country road. Said road goes through the village but there are hairpins getting up and down. The road markings have been added recentlyish. I suspect to warn shooting down cyclists of the danger ahead. I havenāt seen something like this anywhere else either. :-)
My mate and I went on a hike earlier. Yesterday, we had lovely 12°C. But today, it was down to at most 4°C. Oh well. At least the sun was out and and there was just a tiny bit of wind. We knew upfont that scarf, beanie and gloves were mandatory. Especially at the more windy sections like up top the hills. The view was absolutely terrible, but we made the best of it.
With the sun shining on us during our lunch break at a forest edge bench, we still enjoyed the lookout in 01. I brought some old carpet scraps to sit on and was happily surprised that they isolated even better than I had hoped for. Some hot tea helped us staying warm.
After five hours we returned just after sunset. Iām quite tired now, completely out of shape.
@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. š )
Well, the Atom feed entry IDs changed, too. I had to mark everything as read again.
@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? š¤£
Wow, as I anticipated, this is waaay out of my capabilities to really understand it. But Iām quite happy to just have spotted a mistake in an explanatory comment in section 4.5.2 āThe icode Arrayā. Of course, it should be /e + tc + /i + ni + t\0. Letās hope that my e-mail with the patch actually makes it into Briamās inbox. I fear GMail just hides it in the spam folder.
./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.
Iām kind of curious to know how much Assembly I need vs. How much of a microkernel can I build purely in Mu (µ)? š¤
./bin/mu -B -o ... -p muos/amd64 ... target.
@movq@www.uninformativ.de Yes!
Did you do the whole dance with BIOS boot and everything?
Yup! Farkān LBA shit and all, loading up the GDT, TSS and switching to x86_64 long mode š¤£
Btw @movq@www.uninformativ.de youāve inspired me to try and have a good āol crack at writing a bootloader, stage1 and customer microkernel (µKernel) that will eventually load up a Mu (µ) program and run it! 𤣠I will teach Mu (µ) to have a ./bin/mu -B -o ... -p muos/amd64 ... target.
Could it be that Source Sans Pro changed recently? No⦠Somehow at some point Ⳡwas replaced with ⹠in my markdown files⦠I have no idea how this happened.
#Unicode #Typography
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ā¦
And tcell seems to support my urxvt in general: https://github.com/gdamore/tcell/blob/v2/terminfo/r/rxvt/term.go#L144
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).
@movq@www.uninformativ.de that some lovely development from the initial one. Curious to know where this will lead!
Here am I looking at the different 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ā¦
So far, it appears as if I can have either only Ctrl or Alt as modifiers. But not in combination. And Shift is just never ever set at all. Interesting.
Some work on the menu system to brighten my mood a little bit. No mouse support yet.
This week, Mu (µ) get s bit more serious and starts to refactor the native backend (a lot). Soon⢠we will support darwin/arm64, linux/arm64 and linux/amd64 (Yes, other forms of BSD will come!) ā Mu (µ) also last week grew concurrency support too! š¤£
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.
@movq@www.uninformativ.de Sorry, I meant the builtin module:
$ python3 -m pep8 file.py
/usr/lib/python3/dist-packages/pep8.py:2123: UserWarning:
pep8 has been renamed to pycodestyle (GitHub issue #466)
Use of the pep8 tool will be removed in a future release.
Please install and use `pycodestyle` instead.
$ pip install pycodestyle
$ pycodestyle ...
I canāt seem to remember the name pycodestyle for the life of me. Maybe thatās why I almost never use it.
rustfmt. I now use similar tools for Python (black and isort).
@movq@www.uninformativ.de Welcome to the dark side š¤£
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. š¤£š
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? š¤š¤Æ
@shinyoukai@neko.laidback.moe Whoohoo! Thatās a start to cross-platform support š¤£
** being goblin **
In response to my most recent week notes, Adrian shared this lovely quote on goblins with me. It comes from my favorite game designer, Avery Alder,
being goblin is a way of flagging that you want to include people not in spite of their sloppiness and uneven emotional growth, but because of itāāābecause goblins come as they are, and they grow in community with one another. Being goblin means being intergenerational in an un-pr ⦠ā Read more
@movq@www.uninformativ.de Aha! Well, happy hacking. A tiling window manager seems to be good fun. :-)
It drizzled all morning when we picked up the old christmas trees in town with the scouts. Right after lunch the snow storm suddenly hit and dumped three centimeters of snow in just 15 minutes. I cycled home in these crazy conditions, freezing rain hammered my face. As soon as I arrived, it stopped. Itās now down to drizzling again.
All my soaked gear is now hung up to dry. The next 11 months, Iām going to find needles over needles in all kind of impossible places.
@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).
Most of it should work on other platforms, the bytecode VM that is. You may run into some platform quirks though that rely on syscall() ā Let me know what you run into and Iāll try to fix them nw. The problem right now is I havenāt even begun to start work on another platform/architecture yet.
Mu (µ) is coming along really nicely 𤣠Few things left to do (in order):
- Finish the concurrency support.
- Add support for sockets
- Add support for
linux/amd64
- Rewrite the heap allocator
- Rewrite Mu (µ) in well umm Mu (µ) š
Hereās a screenshot showing off the builtin help(): 
@shinyoukai@neko.laidback.moe the whole bridge idea is a mistake done twice (I encouraged the first time, it was a mistake to do so). In this case, the āBabel Towerā works; there is no need to interact with āothersā, let it be just twtxt.
** no beautiful things **
Thereās this line in The Hobbit that haunts me. For one thing, it is part of a wider problematic habit running throughout all of Tolkien that, moving in the mythopoetic space, leads to these sweeping statements that define or collapse an entire culture into a single stroke. It seems to me to be like the most damning thing you could say about a culture, though:
Now goblins are cruel, wicked, and bad-hearted. They make no beautiful things, but they make many clever ones.
Emphasis my own, and the quote ⦠ā Read more
@movq@www.uninformativ.de Oh, I see. Unfortunately, there seems to be no box drawing character for a corner with a diagonal line. Indeed, this is probably the best you can do.
Is the single character enough to hit it comfortably with the mouse, though? Maybe one additional to the left and above could be something to think about. Not sure. Of course this complicates it a bit more. Personally, I like fullscreen windows, so Iām definitely the wrong guy to judge this or even comment on. :-)
@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 ā¦
Hey folks! We have recently had a wonderful new release of #py5, read about the new 3D trimesh integration feature and the matplotlib TextPath integration.
That release was quickly followed by a release to fix some small issues that surfaced this last week. Please check out py5 0.10.9a1 and join us at https://github.com/py5coding/py5generator/discussions to share your experiences!
#CreativeCoding #Processing #Python #genuary (sorry for the hashtag spamming, I couldnāt resist!)
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. š¤
@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.
@bender@twtxt.net Theyāre not completely impossible, but C makes it much easier to run into them. I think the key point is that in those āsafeā languages, buffer overflows are caught and immediately crash the program (if not handled otherwise) instead of silently corrupting memory, not being noticed right away and maybe only later crashing at a different location, where it can be very hard to find the actual root cause. This is a big improvement in my book.
Some programmers are indeed horrible. Iām guilty myself. :-)
I like the article.
I came across this on āWhy Is SQLite Coded In Cā, which I found interesting:
āThere has lately been a lot of interest in āsafeā programming languages like Rust or Go in which it is impossible, or is at least difficult, to make common programming errors like memory leaks or array overruns.ā
If thatās true, then encountering those issues means the programmer is, simply, horrible?
@movq@www.uninformativ.de I quite like this part:
Many people write programs, but few stick with a program long enough to distill it.
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. š¤
@movq@www.uninformativ.de Yiha! Even autoscroll, very nice! The naming certainly drew inspiration from Urwid. I like it. Looking forward to eventually checking out its inner workings. :-)
@bender@twtxt.net I also went back to my duty today and fixed a problem I created right before vanishing into the holidays. Of course, I discovered more problems while fixing the one thing. Luckily, another public holiday tomorrow. :-)
During my time off, I was a very lazy rat. I planned on doing some woodworking again, but instead I started watching Itchy Bootās Africa season: https://www.youtube.com/watch?v=pMvfS5mbsiI&list=PL8M9dV_BySaXNvQ_V1q4UU-DirPQlX0ZP
@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 No, I had my break/holiday earlier. I chose to work through, except the public holidays of course.
@movq@www.uninformativ.de hear hear! If anything, holiday breaks help to validate the fact that we are prepared for retirement. At least, I am!
@movq@www.uninformativ.de Ahh nice! Itās been several decades since Iāve played that! Probably 3 actually come to think of it š¤£
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? š
@movq@www.uninformativ.de I think they are Windows users, going by the lack of attention to detail, and the fact they love DFS. Ha!
Ending three luxurious do-what-I-please weeks; tomorrow is back to work. What do you all do during your break (and this assumes you had one, even if short)? I mostly did nothing, which in itself was truly something! So much, I long to do it all over again. A man can dream, right? Haha!
Trying to build a native heap allocator that grows and isnāt statically wired into the binaryās image is fuckān hard⢠as š¤£
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. š¤
@movq@www.uninformativ.de I noticed that your feedās last modification timestamp was missing in my database. I cannot tell for certain, but I think it did work before. Turns out, your httpd now sends the Last-Modified with UTC instead of GMT. Current example:
Sat, 03 Jan 2026 06:50:20 UTC
Iām not a fan of this timestamp format at all, but according to the HTTP specification, HTTP-date must always use GMT for a timezone, nothing else: https://httpwg.org/specs/rfc9110.html#http.date
** 2026.01 week notes **
Will I succeed in making week notes a weekly activity this year?
Only time will tell!
ā¦also, I meanā¦I feel like the answer is alreadyānoā and that is fine, but anyways.
- I donāt usually take the holidays off from work, it is a nice time to catch up on stuff while still being able to hang out with my family who are all off from school and work.
- Iāve moved where I work in the house so that it is easier for me to hang out with the dog whoās struggling to go up and down stairs, which is kinda problematic since ⦠ā Read more
Mu (µ) is now getting much closer to where I want it to be, it now has:
- A
processstdlib module (very basic, but it works)
- An
ffistdob module that supportsdlopen/dlsymand calling C functions with a nice mu-esque wrapperffi.fn(...)
- A
sqlitestdlib module (also very basic) that shows off the FFI capabilities
š
@movq@www.uninformativ.de What I wish for once on this miserable planet is for coporations one day ohave a different set of reasons to exist and thrive other than:
but since the only goal of that manufacturer is to make money, they do it
Life becomes very boring and uninteresting when your only goal in life is to āmake more fucking moneyā š° Fuck 𤬠Fuck this Corporatocracy we live in š¤¦āāļø
@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.
@movq@www.uninformativ.de Iām pretty sure I know a bunch of people who love to blow up their money. :-(
Holy shit! :-O At least, the walls didnāt shake here. But we also had some very loud explosions, maybe they were far enough away. :-? Of course, the bangs continued last night.
Maybe some politicians need to be personally attacked with this sort of shit first in order to ban it once and forever.
** December Adventure, 2025 **
At the end of my #DecemberAdventure, I re-learned what I learned last year:
that 20 minutes a day can be surprisingly productive,
that I am happiest in writing code when itās just for me or for a small group of people I know personally.
I find stats and data tracking antithetical to the experience of feeling joy, so Iāve got no bona fide numbers about this, but this yearās [December Adventure ⦠ā Read more
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?
I keep thinking about this piece on students that have not learned yet about folder/directory structuresā¦
I have met many students like that, I wonder if I could help them get it better, or if I shouldnāt worry about it at all (theyāll mostly get used to it without much help).
The only good thing about this absolute craziness is that I can restock my rocket sticks. I picked up twelve along the way. Unfortunately, it looks like 99.999% of ammunition is bombs instead of rockets. Some sections of my street look exactly like an arbitrary Pakistanian town that Iāve seen online.
There was surprisingly much snow in the woods. Also, all ponds have frozen over. I didnāt expect that. Not at all. There were even illegal ice skating tracks in the natural reserve. We came across a large puddle and it was at least 10cm solid ice to the ground. Crazy!
fib(35) doesn't regress too badly as I continue to evolve the language.
@lyse@lyse.isobeef.org Itās actually not nearly as half bad as I really thought it would be. Just having to eventually deal with the ālowering downā to machine code / ARM64 assembly in the end once youāve verified the semantics in the VM.
fib(35) doesn't regress too badly as I continue to evolve the language.
@prologic@twtxt.net Not bad for a start, ey! Looking forward to see you going down these rabbit holes and opening one can of worms after the other. :ā-D Very, very impressive, hats off to you. :-)
println("Hello World"):
@lyse@lyse.isobeef.org A āHello Worldā binary is ~372KB in size. I currently have peephole optimization and deac code optimizations in play, and a few other performance related ones, but nothing too fancy. I have a test case that ensures fib(35) doesnāt regress too badly as I continue to evolve the language.
@javivf@adn.org.es Heck yeah, letās do this! :-) Welcome to 2026.
Opinion / Question timeā¦
Do you think Mu (µ)ās native compiler and therefore emitted machine code āruntimeā (which obviously adds a bit of weight to the resulting binary, and runtime overheads) needs to support āruntime stack tracesā, or would it be enough to only support that in the bytecode VM interpreter for debuggability / quick feedback loops and instead just rely on flat (no stacktraces) errors in natively built compiled executables?
So in effect:
Stack Traces:
- Bytecode VM Interpreter: ā
- Native Code Executables: ā
Hmmm š¤
Excluding merges, 1 author has pushed 171 commits to main and 175 commits to all branches. On main, 294 files have changed and there have been 52880 additions and 18269 deletions.
From the Mu (µ) Gitea Activity Tab
@shinyoukai@neko.laidback.moe Happy New Year to you too! š„³
@dce@hashnix.club Happy New Year to you too! š„³
@movq@www.uninformativ.de Well, just a very limited subset thereof:
- inline and multiline code blocks using single/double/triple backticks (but no code blocks with just indentation)
- markdown links using using
[text](url)
- markdown media links using

And thatās it. No bold, italics, lists, quotes, headlines, etc.
Just like mentions, plain URLs, markdown links and markdown media URLs are highlighted and available in the URLs View. Theyāre also colored differently, similarly to code segments.
I definitely should write some documentation and provide screenshots.
It totally sounds like an active warzone around here. So, I just went on a very, very, very quick stroll to check out our sunset from ontop our hill (were all the bangs are way more horrible): https://lyse.isobeef.org/abendhimmel-2025-12-31/
@movq@www.uninformativ.de Mu (µ)ās startup latency appears to be ~10ms on my machine:
$ time ./bin/mu ./foo.mu
real 0m0.011s
user 0m0.004s
sys 0m0.006s
The baseline here is about 55 ms for nothing, btw. Python aināt fast to start up.
$ time python -c 'exit(0)'
real 0m0.055s
user 0m0.046s
sys 0m0.007s
I assume you made the thing load quickly, didnāt you?
Thatās the problem with Python. If you have a couple of files to import, it will take time.
I want this to be reasonably fast on my old Intel NUC from 2016 (Celeron N3050 @ 1.60GHz) and I already notice that the program startup takes about 95 ms (or 125 ms when there are no .pyc files yet). Thatās still fine, but it shows that Iāll have to be careful and keep this thing very small ā¦
Python 3.14 will bring lazy imports, maybe that can help in some cases.
Well, you girls and guys are making cool things, and I have some progress to show as well. š
https://movq.de/v/c0408a80b1/movwin.mp4
Scrolling widgets appears to work now. This is (mostly) Unicode-aware: Note how emojis like āš ā are double-width ācharactersā and the widget system knows this. It doesnāt try to place a āš ā in a location where thereās only one cell available.
Same goes for that weird āƤā thingie, which is actually āaā followed by U+0308 (a combining diacritic). Python itself thinks of this as two ācharactersā, but they only occupy one cell on the screen. (Assuming your terminal supports this ā¦)
This library does the heavy Unicode lifting: https://github.com/jquast/wcwidth (Take a look at its implementation to learn how horrible Unicode and human languages are.)
The program itself looks like this, itās a proper widget hierarchy:
https://movq.de/v/1d155106e2/s.png
(There is no input handling yet, hence some things are hardwired for the moment.)
@shinyoukai@neko.laidback.moe Because you might not want to commit all changed files in a single commit. I very often make use of this and create several commits. In fact, I like to git add --patch to interactively select which parts of a file go in the next commit. This happens most likely when refactoring during a feature implementation or bug fix. I couldnāt live without that anymore. :-)
If you have a much more organized way of working where this does not come up, you can just git commit --all to include all changed files in the next commit without git adding them first. But new files still have to be git added manually once.
os.UserConfigDir() up until a few seconds ago! I always implemented that myself.
@shinyoukai@neko.laidback.moe Yeah, they donāt truly support XDG. In fact, I looked in the Go stdlib source code to notice all the differences and shortcomings.
$HOME is not specified it tries to resolve the user's home directory by user.Current().HomeDir. Maybe that's overkill, I have to check the XDG spec.
Ok, the standard library implementation is wonky at best, at least in regards to XDG, because it really doesnāt implement it properly. https://github.com/golang/go/issues/62382 I stick to my own code then. It doesnāt properly support anything else than Linux or Unixes that use XDG, but personally, I donāt care about them anyway. And the cross-platform situation is a giant mess. Unsurprisingly.
os.UserConfigDir() up until a few seconds ago! I always implemented that myself.
Hmm, mine also resolves a leading tilde in these variables. And if $HOME is not specified it tries to resolve the userās home directory by user.Current().HomeDir. Maybe thatās overkill, I have to check the XDG spec.
But Iām definitely missing os.UserDataDir(). Thatās a bummer.
@movq@www.uninformativ.de Thanks! Iāll have a look at SnipMate. Currently, Iām (mis)using the abbreviation mechanism to expand a code snippet inplace, e.g.
autocmd FileType go inoreab <buffer> testfunc func Test(t *testing.T) {<CR>}<ESC>k0wwi
or this monstrosity:
autocmd FileType go inoreab <buffer> tabletest for _, tt := range []struct {<CR> name string<CR><CR><BS>}{<CR> {<CR> name: "",<CR><BS>},<CR><BS>} {<CR> t.Run(tt.name, func(t *testing.T) {<CR><CR>})<CR><BS>}<ESC>9ki<TAB>
But this of course has the disadvantage that I still have to remove the last space or tab to trigger the expansion by hand again. Itās a bit annoying, but better than typing it out by hand.
@lyse@lyse.isobeef.org Well, I used SnipMate years ago (until 2012). IIRC, itās more than just āinsert a bit of text hereā, it can also jump to the correct next location(s) and stuff like that. Donāt remember why I stopped using it.
Then I used nothing for a long time. Just before Christmas, I made my own plugin (⦠of course ā¦), which does everything I need at the moment (and nothing more).
It can insert simple templates and then jump to the next location:
https://movq.de/v/67cdf7c827/sisni%2Dpython.mp4
And replace a string after insertion:
https://movq.de/v/67cdf7c827/sisni%2Dheader.mp4
(Itās not public (yet?) and it also uses vim9script, so I guess it wouldnāt work on your system.)
Question to my fellow Vimers: Which snippet insertion mechanism are you using or can you (not) recommend?
** Year in review, 2025 **
Here, an obligatory end of year wrap up kinda post that, as I started to write in what I assume is the classical platonic form for all blogs wherein I reflect thoughtfully on stuff I read, or games I played, or projects I twiddled at, and what not, I became overwhelmed by the act of creating a kinda cursory and meandering review, because, what, in this run on sentence, do I have to contribute that I really wanna commit to you, dear reader?
Instead, letās try the following.
Right now, in 2025, Iāve go ⦠ā Read more
Pro tip: Donāt keep the christmas biscuits close to the bird fat balls. I nearly mixed up the bags. :-D
lldb or gdb š
@prologic@twtxt.net Oh yeah, I bet it is horrible to troubleshoot.