@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?
tt URLs View now automatically selects the first URL that I probably are going to open. In decreasing order, the URL types are:
@lyse@lyse.isobeef.org That sounds useful. š¤
@lyse@lyse.isobeef.org I can tell you this right now, writing assembly / machine code is fucking hard work⢠š Iām sure @movq@www.uninformativ.de can affirm 𤣠And when it all goes to shit⢠(which it does often), man is debugging fucking hard as hell! Without debug symbols I canāt use the regular tools like lldb or gdb š
println(1, 2) was bring printed as 1 2 in the bytecode VM and 1 nil when natively compiled to machine code on macOS. In the end it turned out the machine code being generated / emitted meant that the list pointers for the rest... of the variadic arguments was being slot into a register that was being clobbered by the mu_retain and mu_release calls and effectively getting freed up on first use by the RC (reference counting) garbage collector š¤¦āāļø
@prologic@twtxt.net Tada, congratulations! I find that rather interesting, thanks for telling us. :-)
Whoo! I fixed one of the hardest bugs in mu (µ) I think Iāve had to figure out. Took me several days in fact to figure it out. The basic problem was, println(1, 2) was bring printed as 1 2 in the bytecode VM and 1 nil when natively compiled to machine code on macOS. In the end it turned out the machine code being generated / emitted meant that the list pointers for the rest... of the variadic arguments was being slot into a register that was being clobbered by the mu_retain and mu_release calls and effectively getting freed up on first use by the RC (reference counting) garbage collector š¤¦āāļø
@zvava@twtxt.net By hashing definition, if you edit your message, it simply becomes a new message. Itās just not the same message anymore. At least from a technical point of view. As a human, personally I disagree, but thatās what Iām stuck with. Thereās no reliable way to detect and ācorrectā for that.
Storing the hash in your database doesnāt prevent you from switching to another hashing implementation later on. As of now, message creation timestamps earlier than some magical point in time use twt hash v1, messages on or after that magical timestamp use twt hash v2. So, a message either has a v1 or a v2 hash, but not both. At least one of them is never meaningful.
Once you āupgradeā your database schema, you can check for stored messages from the future which should have been hashed using v2, but were actually v1-hashed and simply fix them.
If there will ever be another addressing scheme, you could reuse the existing hash column if it supersedes the v1/v2 hashes. Otherwise, a new column might be useful, or perhaps no column at all (looking at location-based addressing or how it was called). The old v1/v2 hashes are still needed for all past conversation trees.
In my opinion, always recalculating the hashes is a big waste of time and energy. But if it serves you well, then go for it.
The compiler technique Iām using here is to not āemitā most of the runtime if itās actually never used in your program, and also dropping dead code in the SSA pass.
My little toy operating system from last year runs in 16-bit Real Mode (like DOS). Since Iāve recently figured out how to switch to 64-bit Long Mode right after BIOS boot, I now have a little program that performs this switch on my toy OS. It will load and run any x86-64 program, assuming itās freestanding, a flat binary, and small enough (< 128 KiB code, only uses the first 2 MiB of memory).
Here Iām running a little C program (compiled using normal GCC, no Watcom trickery):
https://movq.de/v/b27ced6dcb/los86%2D64.mp4

Next steps could include:
- Use Rust instead of C for that 64-bit program?
- Provide interrupt service routines. (At the moment, it just keeps interrupts disabled.)
@thecanine@twtxt.net Is it because youāve used white pixels around it to sort of give it aht 3D look? š Hmm? š¤
2025 end the year rewind:
Compared to only 3 new artworks in 2024 and next to no work, on other projects, this year I not only met the self-imposed goal of monthly pixelart, but exceeded it by 50%, with 18 additions in total.
Relicensed the majority of canine faction owned art and projects, under two less restrictive Creative Commons licensees*. This also applies retroactively, to everyone who used/archived our art and projects, back when the old license didnāt allow it.
Disappointed by the current state of the Internet and continued lack of competition among browsers, completely reworked the main website* and made Smol Drive** (a new image gallery project), both made to be compatible with as many web and Gemini browsers, as possible.
*see https://thecanine.smol.pub
**see https://thecanine.smol.pub/smolbox
@movq@www.uninformativ.de Very nice! I often wish other languages had something similar. Sometimes, I use lambdas, but that also looks ugly and feels a bit like a misuse. Other times, just the normal blocks are enough, but itās not the same. Especially with the mutability aspects as the article explains. Typically, I just put it in a function or ignore it if itās just a few lines.
This feels useful: Rustās Block Pattern
@lyse@lyse.isobeef.org I was surprised by that as well. š I thought these were features that you can use, but no, you must do all this.
By the way, I now fixed the issue that I mentioned at the end and it works on the netbook now. š„³

Iām using Debian minimal, a UNIX-like operating system with xorg and Openbox installed, as well as the Konqueror web browser. Google claims Iām a robot. You probably want to say that itās not mandatory to use Google services, and youāre right.
@kiwu@twtxt.net Assembly is usually the most low-level programming language that you can get. Typical programming languages like Python or Go are a thick layer of abstraction over what the CPU actually does, but with Assembler you get to see it all and you get full control. (With lots of caveats and footnotes. š )
Iām interested in the boot process, i.e. what exactly happens when you turn on your computer. In that area, using Assembler is a must, because you really need that fine-grained control here.
@lyse@lyse.isobeef.org Yeah, well, given that I didnāt need this for such a long time, itās probably not an essential tool. š
Iāve often wanted to have an outline of text documents, though, and tagbar/ctags can do that as well:


This isnāt as powerful as the āNavigatorā tool in StarOffice/LibreOffice (which can be used to rearrange the document), but still pretty useful:
https://www.uninformativ.de/blog/postings/2024-05-23/0/so31.mp4
@movq@www.uninformativ.de Interesting. I never found a big use for these kind of lists in general. But I might give it a shot again.
If your very popular project with lots of stars on GitHub is over 10 years old, and youāre still at a pre-1.0 version because youāre using SemVer and a 1.0 would mean making some kind of commitment and thatās somehow not desirable for you, then I think youāre doing something wrong. š¤
Wasnāt expecting it to work because my previous attempts didnāt. Using lynx on the terminal on my raspberyy pi, and navigating here took so long. So did sending these messages, and now I have to go.
Bro i used to love ubuntu soo much they lost me when I found out that canonicalās (or whatever the companyās name is) C-tier hired a proud surveillance advocate
@shinyoukai@neko.laidback.moe it was a mess, we are better without it. Until a new mobile client comes (not holding my breath), Yarn is very usable on the mobile, just using the browser.
Webp, though it has been around for a long while, wasnāt fully supported on all browsers until recently. The other formats have been in use for such a long time, proving to work just fine, that the advantages Webp provides havenāt been seemingly enough to merit a switch.
Google is also the one behind Webp, and, well, people donāt trust, nor like, them much.
@zvava@twtxt.net I figure I will know when it is ready, the day I see you using it. Canāt wait! :-)
@movq@www.uninformativ.de lovely, thanks for sharing! Now you know what I will be using today on a loop.
can you use bluedwarf.top instead? my username is lardbgard
Use more WebP, I guess.
- Lossless PNG, 635 kB:

- Lossless WebP, 469 kB:

- Lossy WebP, 110 kB:

- Lossy JPEG, 110 kB:

@prologic@twtxt.net Here you go:
(LTT = āLinus Tech Tipsā, thatās the host.)
LTT: There was a recent thing from a major tech company, where developers were asked to say how many lines of code they wrote ā and if it wasnāt enough, they were terminated. And there was someone here that was extremely upset about that approach to measuring productivity, becauseā
Torvalds: Oh yeah, no, you shouldnāt even be upset. At that point, thatās just incompetence. Anybody who thinks thatās a valid metric is too stupid to work at a tech company.
LTT: You do know who you just said that about, right?
Torvalds: No.
LTT: Oh. Uh, he was a prominent figure in the, uh, improved efficiency of the US government recently.
Torvalds: Oh. Apparently I was spot on.
or use Bluedwarf.top its a lot better
Or use Ripple (XRP)! Very fast transactions without consuming much energy.
Use Bitcoin Cash (BCH)! The original Bitcoin before some alterations.
But it is weird that none of the slot plates (that I can find) appear to have the correct pin order. š¤
The two mainboards I have here use this order:
2468x
13579
But the slot plates use this:
12345
6789x
I tripped over this at first and wondered why it didnāt work.
Has this changed recently or what? š„“
@prologic@twtxt.net Ah, shit, you might be right. You can even buy these slot plates on Amazon. I didnāt even think to check Amazon, I went straight to eBay and tried to find it there, because I thought āitās so old, nobody is going to use that anymore, I need to buy second-handā. š¤¦š¤¦š¤¦
It really shows that I built my last PC so long ago ⦠I know next to nothing about current hardware. š¢
@prologic@twtxt.net Bwahahaha! I tried to establish some form of āconventionā for commit messages at work (not exactly what you linked to, though), but itās a lost cause. š Nobody is following any of that. Nobody wants to invest time in good commit messages. People just want to get stuff done.
Iām just glad that 80% are at least somewhat useful ā instead of āwipā or āshit i screwed upā.
@lyse@lyse.isobeef.org I couldnāt agree more! I think good commit messages are very useful, however, and Iād much prefer the conventional mood style for Commit messages, but rather prefer telling a story rather than this weird syntax all over the shop!
Godboltās Compiler Explorer support for Vim-like editing is amazing. Sometimes I almost forget that Iām using a website.
@shinyoukai@neko.laidback.moe Are you using your Gitea username instead of got@ ? Are you forwarding auth?
@prologic@twtxt.net he uses subdomains. Which do you think the identity be associated with? (hint, āit is not so hard!ā).
@shinyoukai@neko.laidback.moe yeah, thatās the only reason why I use sub-domains when trying anything federated (I believe Matrix has the same problem), in case things didnāt go as planned I can just migrate and take it down.
@itsericwoodward@itsericwoodward.com Nice to see someone else also participating! š„³
(Btw, they donāt want us to share our inputs: https://www.reddit.com/r/adventofcode/wiki/faqs/copyright/inputs/ Yeah, itās a bit annoying. I also have to do quite a bit of filtering on my repo ā¦)
FWIW, day 03 and day 04 where solved on SuSE Linux 6.4:


Performance really is an issue. Anything is fast on a modern machine with modern Python. But that old stuff, oof, it takes a while ⦠š
Should have used C or Java. 𤪠Well, maybe I do have to fall back on that for later puzzles. Weāll see.
@bender@twtxt.net Nothing will make me use Discord, though. š Not voluntarily.
@prologic@twtxt.net I couldnāt find the exact blog post from before, one that used redirection directives in its nginx config. but I found [this one ](https://melkat.blog/p/unsafe-pricing#:~:text=Something%20else%20Iāve%20been%20doing%20this%20year,%20fine.) mentioning a similar process but done differently.
@lyse@lyse.isobeef.org no wonder I picked that cake (albeit coincidentally), I adore almonds, and hazelnuts! Your teammates are absolutely amazing, dude! A very nice project farewell! On leaving places I have a small anecdote.
I know someone who on 3 February 2004 left his job to go elsewhere. At the time his teammates threw a party, and gave him a very nice portable storage. Twenty days later, he returned, and jokingly they asked him for the storage, and money spent on farewell party back. I heard, from a close source, that he gave them his middle finger, but donāt quote me on that. ššš
@prologic@twtxt.net right! Iāve been looking at used ones I might be able to useā¦
Before smartphones people used to use the Sony Camcorders, but even though they still exist today, theyāre uber expensive š
@prologic@twtxt.net Using your own language?! Thatās really nice! I hope you get home soon so you can give the code a try. š
Thinking about doing Advent of Code in my own tiny language mu this year.
mu is:
- Dynamically typed
- Lexically scoped with closures
- Has a Go-like curly-brace syntax
- Built around lists, maps, and first-class functions
Key syntax:
- Functions use
fnand braces:
fn add(a, b) {
return a + b
}
- Variables use
:=for declaration and=for assignment:
x := 10
x = x + 1
- Control flow includes
if/elseandwhile:
if x > 5 {
println("big")
} else {
println("small")
}
while x < 10 {
x = x + 1
}
- Lists and maps:
nums := [1, 2, 3]
nums[1] = 42
ages := {"alice": 30, "bob": 25}
ages["bob"] = ages["bob"] + 1
Supported types:
int
bool
string
list
map
fn
nil
mu feels like a tiny little Go-ish, Python-ish language ā curious to see how far I can get with it for Advent of Code this year. š