Just putting random stuff I’m working on and/or thinking about.

I’ll try to update this daily. RSS should reflect this.


Rio comes back (and bites in the ass) by not allowing a window resize through wctl unless the window is current (in focus).

bar now writes to stdout the item that was clicked by the user.


bar and riow are now cooperating. bar reads standard input line by line and shows it along with the battery charge and date/time. If bar is installed, riow will use it instead of aux/statusmsg.

I’m planning to make bar also write whatever text (in between delimeters) was clicked on to standard output. Then it will be possible to customize it in various ways. For example, clicking on the date/time will make bar send it to stdout, where a script could in this case launch a calendar.

Received a raspi 4 from echoline!

Found my old (2008) thesis on L4 microkernel in LaTeX format, as well as the source code of the microkernel I implemented back then.


No computers.


Gonna be baking cookies!

Just say no to computers.

(I really have to answer emails…)


If CPU temperature or battery status are not available for reading, aux/acpi will no longer expose the file. Simplifies programs that read them.

Querying battery status every second (hello, stats(1)) using ACPI is apparently enough to drain laptop’s battery faster than one would expect. Changed that to minimum 10s period, and 5s for CPU temperature using ACPI.

Fixed Mod4 (“Windows” key) on USB keyboards so it’s mapped the same way as on built-in keyboards. Fixes riow keyboard controls on things like Raspberry PI.

Had to update 9gc again after old 9gridchan registry had some issues. The chat address is hardcoded for now, with no registry being used to lookup the hostname/port whatsoever, until this can be fixed properly later, by moving over to new registry (, that is).


Not much happened today besides one isolated kernel crash.

[ftrvx@ftrv:~]$ date --date=@$(pcalc 0x60000000 | awk '{print $1}')
Thu 14 Jan 2021 09:25:36 AM CET


Fixed another missing feature in mcfs: header stripping. Only with no lacing for now, as I don’t have any other samples to test it with. The lucky person who find these will get an error message that hopefull will make sense.

A very quick addition: “iconv” tool in imgtools. For now all it can do is convert an image to a specific channel configuration, ie xrgb32 or grey8, etc. Same as the stock tool, but with more friendly names for channel configurations.

Updated resample in the same repo to keep the original format if possible, and to assume premultiplied alpha by default (if there is alpha channel). Also added cropping via -r argument.


Small things today.

9p zone is taking shape!

Added gemini:// and ftp:// to “linkifying” logic of mothra (it’s executed on urls inside plain text, not enclosed in proper tags).

A very small change to my Gemini client gemnine: don’t print URL description if it’s the same as the URL itself.

Seems like I could use webfs URL resolving logic without copying any code, like mothra does.


A log from before (on 9gridchan), regarding voice/video chat with 9p:

sigrid → I think voice chat is mostly just gluing mq, audio/mixfs and audio/opus^(dec enc) together
sigrid → with each participant having their own stream
sigrid → if you want to mute someone - don't mix their stream
sigrid → each new participant can write their stream name to a defined stream like "new" in the group
sigrid → and just remove their stream when they leave
sigrid → mq -m /n/voicechat
/n/videochat/{channel}/{participant}/^(audio avatar name video)
sigrid → hope filenames speak for themselves
sigrid → as a bonus the entire session may be recorded while this whole thing is happening

Obviously, 9p brings in latencies.

Fixed root not being writable in ext4srv.

Added -c CHAN option to 9gc (9gridchan chat client for Unix-likes) to join a different channel (yeah, we now have TWO!).


Mirroring 9front FQA now.

Yet another project who dis: some kind of feed reader/aggregator?. I’m still not sure exactly whether I want it to be just plain text or have a UI so the feeds and items are organized better. Rendering HTML to text (hello, Mastodon feeds) is disgusting, but I know no other way:

{echo .ll 9999i; echo .pl 1no; echo .po 4; cat | html2ms} | nroff -N

Yeah, setting line length to a huge number, and page length? Just no.


watch and clear are in snippets. They don’t destroy the entire terminal, unlike in other operating systems. clear only removes programs output, leaving the commands that were executed.

Cleaned up, reworked a bit, and added my XML parser to snippets. The parser is very simple and works as streaming one as well.

Thanks to kvik’s mq we can already play streaming WEBM/MKV with treason:

mq -m /n/mq
cd /n/mq
echo data coalesce > ctl
echo replay all > ctl
youtubedr -i 247 -o video &
youtubedr -i 249 -o audio &
treason -a audio video

I need to fix mcfs so the same thing can be done with MP4 containers.

Checking a (maybe) faster memcpy implementation:

TEXT memcpy(SB),1,$0
	MOVQ p2+8(FP), SI
	MOVL n+16(FP), CX

Benchmarking video playback with treason gave 104s vs 108s before. 4s difference, probably not worth it in this case.


“Vendored” some of the 3rd party libraries in treason after it has been reported they either can’t be fetched or take a long time to do so. They were huge. Now the installation is much faster.

It also builds and runs on 386 now.


Did more plumb-related work in zuke.

Vitamin D seems to be the thing I missed very much.


It’s been snowing all day long. Finally, a proper winter. Tried playing vidyagames and got bored with each one of them (three in total) after 5 minutes. Meh. So far I manage to exercise a bit every day, which makes me feel a bit better.

Changed bar to update the battery charge every 10s to reduce CPU load. /dev/screen is now only being read when actually needed.

Updated mp3dec (pulled upstream minimp3) and set a define that made the size of the executable even smaller: 119864 bytes vs 260255 bytes (stock 9front’s mp3dec).

zuke gets “audio” port plumbs with playlists now. A music file can be plumbed as well, but as of now zuke will play the file only if the currently loaded playlist contains it already.

c9 now builds under Plan 9. Would be great to add a higher level API and perhaps use for something under 9, as an alternative to what there is already.

Added more stuff in snippets.


Fixing bugs here and there.

cal now has an option -s for those who prefer some other day to be the start of the week.

Working on plumbing for zuke. It needs to play what’s being plumbed. Thinking it should run audio/mkplist on the files that aren’t in the currently loaded playlist, and probably convert *.m3u playlists on the fly as well. That will definitely make changing playlists on the fly much easier than adding a full blown tab-based UI in zuke itself.

juke(1) actually does work, somewhat. Guess last time I tried it, I made a mistake in the file that was fed to playlistfs. Still, it looks horrible and requires editing tags manually???

Reading up papers on Dis VM. I kinda want to make a hobby OS with it that is loosely based on 9 and Inferno, just to play with some ideas.

Went to the city. Not many people wear masks, as usual.


Back to having access to a computer.

Catching up with Beats ‘n breaks livestream while coding.

Pushed audio/flacenc to 9front.

Fixed a bug in libvorbis port. coughs Guess who introduced it in the first place coughs.


Having last day of vacation. Work tomorrow.


Since I want to redo the UI part of neindaw, I’m looking at Andrew’s layout to do the work for me. The rest will probably be a set of flat b/w controls drawn with lines and circles. I want to make those controls easy to bind to MIDI knobs.

Looking forward to incorporating Paul’s soundpipe into neindaw as well.

After yesterday’s recording of vocals with Audacity (ahem) I have to write something for 9front…


Wrote audio/flacenc. Need to add error handling, then I can push it to 9front.

Fixed 32-bit compilation warnings in mcfs reported by qwx. Made a small change to make non-seekable streams work with mcfs and immediately scrapped it because it’s useless for treason unless mcfs becomes an actual filesystem first.

Looked at my CUE sheet parsing code but did not have time to do anything about it. The computer access time has finished.

Downloaded a ~250 pages pdf about CBT for adults with Aspergers. Since healthcare system in Sweden continuosly did not give a shit about my issues, I’m gonna be my own therapist. Hopefully this book will give me pointers to what should I work on so I can be less fucked in the head when dealing with people and stressful situations I keep ending up in.

Hanged a Teitanblood poster on a wall.

Last update: January 26, 2021 07:25PM