Newest entries.

Previous month.


Fixes for libtags: all module formats metadata is treated as CP437 now. Empty textual tags are now ignored.

Cosmetic fixes and c9 submodule update for 9pro.


Made image resampler slightly faster in Netsurf for Plan 9.


Today’s listen that I got a few years back on an audio cassette. Check out Extreme Ultimate in general, lots of great stuff there. I particularly love Necro Deathmort.

kvik provided issue reports and fixes for c9 which are now merged.


sshnet to a Windows machine worked. That machine provides network to Raspi 4 with 9front over ethernet. I need to set this Raspi so that I can rcpu there.

I also need to test rndis with Raspi.


Repackaged treason with latest small fixes.


No computers?


Optimized resample in imgtools to make it faster. It’s still too slow to use for video scaling in treason.

Today’s listen.


Fixed a small bug in zuke that caused a wrong duration and volume to show on 32-bit platforms.

Added support for NAL lengths other than 4 to mcfs. That should make some old MP4/H.264 videos playable.

Fixed sleep/delay functionality in npe. Apparently I typed one extra zero and the timings were off in some cases.

A random quote about Scottish that I found very funny:

When they were small I asked my Aussie kids to say goodnight in Scottish to their visiting Grandmother.
Guid nicht. Instead of wishing her a good night they pronounced it “Get nicked”. Which required a lot of explaining.

9front yoga


I got a klaxon for my bike. It does make a funny noise!

Shiny klaxon


Today’s listen.

Updated and rebuilt youtubedr for Plan 9. Faster downloads but also incompatible command line arguments. Youtube on 9 docs updated.


Added more op stubs to pdffs. This doesn’t do anything but helps to have a list of all ops in one place, rather than scattered across PDF spec.

Today’s listen.


Nice weather. No computers.


No computers today. I spent this week writing Java at work and that makes me not want to do any coding. I need to change my job.

On something better, long dresses (specifically maxi slim) are totally my thing now. Also I tried out my old earrings (my earlobes are stretched now) and it looks fine! And doesn’t hurt at all, something I was not sure about, stretching considered.


I got an e-reader (Boox Nova 3) which I immediately rooted. Today I also installed openssh, so I can copy documents from 9front to the reader and even open them remotely. I could do 9p as well but sshfs is enough. I want to try attaching the ereader to the side of my laptops display and configure plumber to open PDFs there. That’d be lit.


Yesterday I went to a local “russian” shop and bought lots of sweets along with сметана. Today I made traditional belarusian potato pancakes which we all ate way too fast to take a good picture, so here’s the last one left on a plate.


uxn now includes a mkfile to build it on 9front! Audio programs run well and produce sounds :)


zuke is now shipped with 9front. All of the juke is removed, but you probably didn’t even know it was there to begin with :P


Reading PDF spec. Checking embedded font formats out. Should be pretty doable to do rendering. Hopefully pdffs will be accepted for GSOC via Plan 9 project so it gets much further during summer. PDF reader with MIT license for everyone!

Hope my e-reader comes soon, can’t wait to stop reading from a laptop screen X__x.


No computers.


Some more work on pdffs.


Today’s listen.

pdffs is now successfully extracting CCITTFax images as TIFF. Those can be viewed with page. That’s a new addition to already working DCT, JBIG2 and JPEG2000 extraction.


Added m4a playback support to zuke.

Fixed sources syncing to /n/


Computer music of 1970s: Analysis of Jean-Claude Risset’s Songes (unfortunately, only in French).

Small bytebeat(?) in 10 minutes:

// boop.c
// 6c -FTVw boop.c && 6l -o boop boop.6
// ./boop | audio/pcmconv -i f32c1r44100 >/dev/audio 

#include <u.h>
#include <libc.h>

#define RATE 44100.0
#define SZ(x) (int)(x*RATE)
#define S(n,d) float n[SZ(d)]
#define FS(n) for(i = 0; i < nelem(n); i++)
#define NS(n) nelem(n)
#define TRW(f,i) (PI*2*(f)/RATE*(i))
#define LF(n) ((double)(NS(n) - i) / NS(n))
#define CF(n) cos(PI*(1.0-LF(n))/2.0)
#define SA(x,n) (((x) & (n)) ? -1 : 1)

main(int, char **)
	int i, j, k;
	S(s₀, 0.09);
	S(s₁, 0.04);
	S(s₂, 0.03);

	for(k = 0; k < 1024; k++){
		for(j = 0; j < 4; j++){
			FS(s₁) s₁[i]  = 0.7 * fabs(
						+ 800+20*j
						+ 200*SA(k,3)
						+ 120*SA(k,8)
						- 160*SA(k,16),
			FS(s₂) s₂[i]  = 0.2 * cos(
						TRW(1 + (k % 8)*((k % 16)+j), i)

			FS(s₀) s₀[i]  = sin(TRW(60+20*j + 10*(k % 4), i))*CF(s₀);
			FS(s₁) s₀[i] += s₁[i];
			FS(s₂) s₀[i] += s₂[i];
			FS(s₀) s₀[i] /= 3.0;

			write(1, s₀, sizeof(s₀));



Fixed a small bug in mp3dec and aacdec: the proc wasn’t waiting for pcmconv to finish, sometimes causing trouble.


Went to a forest. It was really cold but quiet and calming. Took a few pictures on my crappy phone of which I liked one:

A tree trying to run away.


No computers.

Decided to start cooking (and baking) traditional Belarusian/Russian things. Want to find out what my friends from Syria think about those when they taste it.


Extensible efficient non-linear pattern matching with backtracking for non-free data types


Worked more on the parser of my programming language. Got declarations, constants and arrays work. It’s slowly shaping. I’m thinking of doing interpretation only, since I want to write the compiler in that same very language as soon as possible, so I don’t waste time on C version.

Older entries




Last update: May 17, 2021 08:32PM