:: journal :: 2025

short-form posts, dated.

< 2024 · 2026 > · 2026 2025 2024 2023 2022 2021 · tags

There's a very special reason why these research languages never get adopted.

They usually have a wide range of shortcomings or design gaps that make them unsuitable for real programming. It's usually one or two things that shine. The rest are patched with matchsticks and putty.

This is enough to allure an immature academic, they think that if enough languages with these shining bits are amassed, then they will complement the matchsticks and putty in each other. Not so.

Coming up with a constrained, closed world, greenfield and limited-scope theory is the easy bit. Figuring out how to patch all these ideas together to form a whole is thankless work that academics in general don't appreciate, and thus don't do. This is beyond the average industry practitioner: their knowledge of theory and general theoretical intuition required to conjoin the ideas is insufficient.

It's perceived as an engineering task, while deep down it's something far beyond that. Of course, it wouldn't hurt if academics hadn't seen engineers as cross-eyed and bow-legged - their contribution would have otherwise lead to many interesting things.

Every C-language program can have a lick of Common Lisp to it if you're brave enough with the macros.

"The Krichevsky-Trofimov estimator is posterior mean of a Beta-Bernoulli posterior distribution with prior 1/2."

... Is the data compression variant of:

"A monad is a monoid in the category of endofunctors."

The advent of LLMs, reliance on unaudited and massive dependency trees and the spectre of capitalism is haunting information security. It's pretty easy to have missed some fundamental emergent behaviours.

The industry rewards visibility, not responsibility. As a security researcher, you are judged by GitHub stars and followers, conference talks, CVE counts, bug bounties. We are rewarding researchers to pop, drop, and bounce. Disclosing vulnerabilities and getting CVE IDs assigned gets likes, followers, and job offers. In an attention-driven economy, that translates directly into currency. Worryingly, the industry started to mirror academia: publish or perish.

That feedback loop pushes people to be faster, louder, and shallower, feeding an ecosystem already choking as a handful of volunteers maintain code that half the planet depends on. Has anyone even thought what ramifications does this have? If this is what the 'good' guys are finding, what about the bad guys?

We're seeing strange self-emergent behaviours. A LLM redefines what counts as a CVE, flooding the system with noise that looks like productivity. Automated, machine-speed 'responsible' reports overwhelm the humans who actually fix things. Research becomes content, marketing; fixes become footnotes. Ethics are getting crushed by discovery-to-publication cycles in which review and coordination vanish. Conclusively, the security industry has automated attacks against themselves without the benefit of automated remediation or mitigation.

For the next decades we will be fighting social and ethical issues arising from the emergence of LLMs and a predatory attention market, as well as supply chain attacks noting the piss poor security of most Linux desktop systems and protocols (X11?).

There's something that I wanted to complain about regarding open source, but I can't exactly put my finger on what is the real underlying issue. We see great plurality in general tools (how many neofetches, DEs, editors can you name?) and the opposite for less glamorous or more complicated components (bluetooth managers?).

The plurality of general tools combined with the lock-in of purpose-specific tools leads to paradoxical situations: it's often difficult to swap out faulty software, we experience many incompatibilities and struggle with keeping a nontrivial, consistent, stable and functioning desktop system.

The other side of the issue is that open-source is the de-facto standard: large corporations and end users have gotten used to having a basket of golden eggs given as freebies, but what are the developers getting back? Disclosures, bug reports and feature requests. No patches. Only free work.

We can't fix this system and it's futile to try. but i hope that someone, someday has the guts to drop the F from FOSS in a reasonable way, making the ecosystem sustainable and improving its quality due to broad financial incentives.

The state of my Linux Desktop. Featuring the new Alt+Tab switcher. Widgets

The collection of widgets grows! Widgets

I decided to try teaching myself to write with my left hand.

Base32 GUI app polyglot: a valid 32-bit PE EXE for Microsoft Windows and a 64-bit ELF file (GTK3). Fits in under 4K! https://iczelia.net/doc/base32_polyglot.com Base32 Polyglot Base32 Polyglot

I made it to top 225 golfers on code.golf in 27 days.

I'm getting a little upset at people who parrot "unused RAM is wasted RAM". the real answer is: yes, but not in the way you'd think. Amazingly, the operating system already uses the 'unused' RAM as file system cache - but the cache is dropped as soon as an user-mode app demands memory.

This is the fine line that invalidates the argument: nominally, i see nothing with using more RAM than necessary for whatever purpose, as long as it's relinquished immediately once a higher priority task needs memory. There is no mechanism that provides this within the user-mode. hence memory used by user-mode programs beyond what they actually need to operate efficiently is wasted.

The argument also does not apply to long-lived applications that already use plenty memory. Like the Discord tab in my browser.

tracking xpar v0.7: github.com/iczelia/xpar; added fft-based rs encoding/decoding in o(n log n)

One interesting variable that nobody seems to control for is that native speakers learn through listening and speaking, while ESL speakers tend to learn through reading and writing. This induces different mental patterns and classes of mistakes. No ESL speaker writes "should of", like no native speaker pronounces "Colonel" wrong.

British fantasy: If I have this one stone, I can do anything I want! American fantasy: If I believe in myself, I can do anything I want! Slavic fantasy: I can't do anything.

Just updated the final piece of the puzzle: My GitHub account username.

Just submitted my thesis, titled "Referential and Reference-Free Genomic Sequence Compression".

The Morse code is a noiseless coding method. The following is the order-0 histogram of letters in book1 from the Calgary corpus (English text):

LetterFrequencyLetterFrequencyLetterFrequency
' '125551a48803b10595
c13265d26892e72875
f12650g12878h38538
i39906j721k5039
l23491m14609n41421
o45651p10025q534
r33134s37638t51993
u16134v5446w14824
x866y12402z264

The Shannon Entropy of this corpus is about 4.12 bits per byte, while the average code word length for the Huffman code (optimal discrete noiseless encoding) is about 4.15 bits per byte. We assume the following properties of the Morse code:

  • A dash (-) is three dits, a dot (.) is one dit.
  • Code symbols are separated by silence one dit long.
  • Letters of the same word are separated by silence three dits long.
  • Words are separated by silence for seven dits.

This implies that the Morse code requires, on average, 9.26 dits worth of time per letter of English text to transmit.

I feel uneasy about the fact that in just a few days I will be 21. My youth pointlessly and painfully slipped thorugh my fingers and in a mere blink I am no longer in a time or place where it's acceptable to not be an adult.

I was briefly interested in joining the GNU project by donating my own code to it. However, as days pass, it's more and more difficult for me to justify such a decision in my mind. I admire the ideological inspiration of the project, catering to user freedoms and the idea of free software. Unfortunately, the whole movement of free and open source software became so politicised as to become a parody of itself.

There are holes that you can't patch and rivers that you can't bridge. There is a Marina trench sized gap between me and the guy who killed his wife[^1], the guy who thinks that GitHub sucks because you can't insult people on it[^2], the guy who thinks that J. K. Rowling sucks mainly because you can't draw a dickbutt on Harry's face[^3], the guy who had a heap of dung merged into X11, subsequently starting a "DEI-free" fork when an asteroid to kill this dinosaur went off-orbit[^4]. I could go on forever. I never thought of myself as perfect and I'm sure that you could have many complaints about me, but at least I haven't killed my wife, so here's that.

Maybe there is really demand for something like GNU but with all the bullshit straightened out.

BTW: While GNU raves about how SourceHut is so good and "free"[^5], DDV pulls the plug on cryptocoin projects[^6] - sorry, I should have said ruthlessly censors them. Not like I find anything wrong about that, but you'd imagine that they'd hate this guy too.

1: https://en.wikipedia.org/wiki/Hans_Reiser

2: https://sanctum.geek.nz/why-not-github.html

3: https://www.stallman.org/harry-potter.html

4: https://github.com/X11Libre/xserver

5: https://www.gnu.org/software/repo-criteria-evaluation.html

6: https://sourcehut.org/blog/2022-10-31-tos-update-cryptocurrency/

If servicing public debt grows too costly, governments should raise revenue not through taxes on work or spending, but by taxing vanity wealth.

Words ought to be a little wild, for they are the assault of thoughts on the unthinking.

Updated my computer set-up to use Enlightenment E16 with custom multi-monitor, keyboard shortcut and tiling support that I implemented. E16

I start my day with looking in the mirror and deciding if I want to be depressed or hopeless today.

In an economy with its own fiat currency, the monetary authority and the fiscal authority can ensure that public debt denominated in the national fiat currency is non-defaultable, i.e. maturing government bonds are convertible into currency at par. With this arrangement in place, fiscal policy can focus on business cycle stabilisation when monetary policy hits the lower bound constraint. However, the fiscal authorities of the euro area countries have given up the ability to issue non-defaultable debt. As a consequence, effective macroeconomic stabilisation has been difficult to achieve.

-- Monetary-fiscal interactions and the euro area's vulnerability, European Central Bank Bulletin 2017.

Author's commentary: when the ECB tells you that Euro makes no sense, you should listen.

I have extracted some of my journal notes dating to before 2022. Enjoy. I mourn my childhood innocence.

I desire to be immortal on the spiritual level.

On an intellectual level this is a lazy day, on a practical level i am nearing 90k SLoC on my thesis.

Considering getting cosmetic surgery, but saving up/getting the loan might be the hard part.

Oh, yes, the acknowledgments. I think not. I did it. I did it all, by myself.

I will start a home-brew Club Mate production line in Canada.

Technology discloses the active relation of man towards nature, as well as the direct process of production of his very life, and thereby the process of production of his basic societal relations, of his own mentality, and his images of society, too.

Looking forward to moving to Canada. I hope that everything works out.

These days I am focusing on writing down my thesis, which is currently taking a significant portion of my time. As such, I had to put OSS and blogging on the backburner.

No words can describe how shamelessly awful most people I met here in Germany are. Everywhere else I lived in, it would be considered unacceptable to be so rude and obnoxious about someone (whom you presumably don't know) being "ugly".

Passed by thesis seminar today! I am pretty sure that I hold the faculty's record for the longest seminar talk - about 6 hours.

At Revision 2025!

The progress on my book is starting to feel a little stale.

I do this not because it is easy, but rather because I thought that it will be easy.

My talk for 19 Sesja Linuksowa: Fitting a modern Linux distribution on a floppy disk (1.44M) using the magic of custom compression. Newest x86 Linux kernel, BusyBox, Flat Assembler bundled. The kernel supports networking, comes with vim, sed, grep, find, httpd, wget, ...; PCI/FAT32/ATA/SATA support. Floppy Linux Floppy Linux Floppy Linux

I can't possibly convey how fun working with bioinformatics tool suites is. To a newcomer, they all look pretty okay, and all the standard stuff seems to be already there.

You try running a simple sequence alignment program, but instead of standard input/output, it insists on using six different configuration files in a format no other tool understands and uses semicolons for FASTA headers.

You grab a genome assembler, but it only works with a very specific version of an old library that isn't maintained anymore. The documentation tells you to "just install it from this FTP link", which is of course broken.

You run a phylogenetic tree builder, but the output file is in a format that no visualization software can read - except for one program from 2003, which only runs on an old version of Java that conflicts with everything else on your system.

You take a look at the variant caller. It requires chromosome names in the format chr1, but another tool in your pipeline needs them as just 1, and neither has an option to switch.

The genome assembler hasn’t been updated since 2012, but everyone still uses it because the "modern alternative" requires 200GB of RAM and crashes silently when it runs out.

And on you go. Every tool mostly does what it's supposed to, but each one has its own weird dependencies, its own obscure input formats, its own inexplicable quirks. There's no clear problem with bioinformatics software as a whole; all the essential tools technically exist.

Now imagine you meet millions of bioinformaticians who tell you, "Well hey, what's the problem? This is what we've always used, and it works fine!". And they show you their pipelines, held together with ten different shell scripts, manual file renaming, and a README that just says, "Run this on Ubuntu 16.04, trust me". And you point out that one of their scripts has a hardcoded file path to someone's home directory, and they just say, "Yeah, that happens sometimes".

It has come to my attention that for the past few months a few individuals have set to come up with fake male names for me and edit secondary sources online that mention me. I have no idea why they do this, but I find it amusing and I have suspicions.

Compression and cryptographic programming languages are pretty easy to become a world-class expert at, and I feel very sorry for people whom this makes insecure about themselves. I understand feeling bad that a 20 (then 15) year old immigrant from the middle of nowhere is better than you at just about everything. But there will always be people better than you and better than me. One part of growing up is accepting this.

Exceptions have the added benefit of stack traces. Optionals or error tuples present the issue but conceal the cause. Languages that offer monadic error handling like to hide the origin of the failure. Sometimes this is done also because such a stack trace is difficult to reconstruct in a lazy setting and the traces need unwound to memory alongside thunks.

Hegel said somewhere that all important personalities and historical events repeat twice. He forgot to add: once as a tragedy and the other time as a farce.

I may participate in Revision (the demoparty) this year. It's happening in Saarbrücken mid-April.

Googling anything related to (GNU) bison gives me, a programmer with a 69420 year history of googling programming stuff, the stupid fucking animal.

Apparently debian has a "tracker-miner-fs" process running in the background and it's something completely normal (gnome search indexer). I suggest debian developers run a process that does nothing called "rootkit-trojan-net" just to keep users on their toes.

I don't have an ice cube's chance in hell of finding lifelong happiness unless I can find a woman as ugly as myself.

I think I would be much happier if the underlying structure of the universe were significantly different.

The belief that theoretical computer scientists are uniquely intelligent has done unimaginable damage on society.

It took me months to settle on this, but TeX Gyre Bonum seems to be the best font for typesetting my book.

If Americans had a cookie for every lie they told about Europe, the Danes would be working two shifts on Ozempic production.

I have a degree in creative memory management.

#define Fi(n,a...) for(typeof(n) i=0;i<n;i++){a;}
#define Fj(n,a...) for(typeof(n) j=0;j<n;j++){a;}

Let's decrease deficit and the public debt. In order to do that, we decrease government spending. Then:

Decrease spending -> the private sector and consumers have less money -> demand goes down -> supply goes down -> GDP goes down -> tax income goes down -> deficit goes up

The deficit (i.e. private surplus) among all branches sums up to zero. Every liability (debt) is someone's asset. Every spending is someone's income.

Every n-person chat room has an associated n-1-person chat room.

My taste in luxury is sourdough and aged cheddar.

I wish that university education was more about they joy in pursuit of knowledge rather than drilling, grinding and depressing yourself over whatever you've been bequeathed to study.

I really want to start an old-school forum :(.

I always wanted to learn Cantonese, but then I realised that I have no reason to do so other than the fact that it seems interesting. Because of that I will have no motivation to study further because my existing life obligations that force me to learn a lot.

Archive files (.tar, .zip) and file systems (ext4, NTFS, FAT32) are two sides of the same coin. Both provide fundamental facilities for hierarchical data storage, record file metadata, support basic file system operations (add, remove, modify). Some file systems do versioning (btrfs), some archivers do too (zpaq). Some natively support compression (zfs), but so do archivers (zip). The crucial difference between both is thus the use case. Most file systems are used for live infrastructure (FAT32, NTFS, ext4). Some file systems are used for seekable, immutable and compressed storage (squashfs, cromfs). Then, archives are used for data meant to be just compressed and extracted.

 % # 32-bit ELF Linux quine, 53 bytes.
 % ./a.out | xxd
00000000: 7f45 4c46 0100 0000 0000 0000 0000 0100  .ELF............
00000010: 0200 0300 2e00 0100 2e00 0100 0400 0000  ................
00000020: b004 b235 cd80 584b cd80 2000 0100 4341  ...5..XK.. ...CA
00000030: c1e1 10eb eb                             .....
 % cat ./a.out | xxd
00000000: 7f45 4c46 0100 0000 0000 0000 0000 0100  .ELF............
00000010: 0200 0300 2e00 0100 2e00 0100 0400 0000  ................
00000020: b004 b235 cd80 584b cd80 2000 0100 4341  ...5..XK.. ...CA
00000030: c1e1 10eb eb     

Why is the Internet no longer like it used to be before? Leading explanations attribute the death of individual, personal and free expression to the rising popularity of the Internet, commercial/corporate influence and centralisation. Without doubt, these are the most significant factors. But is this the whole story? One frequently overlooked factor is simply that the modern and more accessible internet culture has de facto destroyed self-expression.

Large masses of people often converge to blobs formed by simple addition of homologous magnitudes, much like potatoes in a sack form a sack of potatoes. In such a setting, the individual lacks identity. The concept of "cringe" has destroyed the concept of self-expression. Irony, the most popular defense mechanism against being considered "cringe" changed the landscape of the Internet.

Authenticity necessitates vulnerability and vulnerability attracts dead-eyed, far gone, meta-ironic magnitudes that project their aversion to vulnerability as "ironic shitposting", i.e. shunning expressions of authenticity until everyone is many layers gone into defensive irony.

Every morning I take one big sip of coffee and then pour the entire cup into the sink. The sink is for putting things into. Not for taking things out of.

Own the libs with ONE SIMPLE TRICK: find / -type f -name '*.so' -exec sudo chown $USER:$USER {} \;

All the best programming languages come from Canada: APL, PHP, Java.

The tradition of all dead generations weighs like a nightmare on the brains of the living.

Today I've been thinking about mental/human memory algorithms for day of week computation. Many of them feel wrong because

  • They require a lot of memorisation.
  • They are restricted in scope (e.g. they make you memorise the century key).
  • They require large number arithmetic.

My method:

int dayofweek(int y, int m, int d) {
  static int t[] = {
    0, 5, 3, 1,
    0, 3, 2, 5,
    0, 3, 5, 1,
    4, 6, 2, 4
  };
  int g = t[m+3] + d; y -= m < 3;
  y %= 400; int f = t[y / 100] + (y % 100) + (y % 100) / 4;
  return (f + g) % 7;
}

Pros: Only 16 digits to remember, which are further easy to remember due to their patterns. A very small amount of working memory is required: First we need to remember y,m,d; after int g = t[m+3] + d; y -= m < 3; we only need to remember g, y. Then, y %= 400 is easy to do in memory. The remaining computations operate on two-digit numbers. After the that line we only remember f and g. Which are then summed and taken modulo 7. The algorithm works for every forseeable date.

< 2024 · 2026 >