is a computer scientist (Ph.D. in Computer Science, specifically, in Programming Language Theory), software and DevOps engineer, and constructive mathematician, on a quest to become a constructive polymath.
org-mode
, ledger-cli
, GPX, personal medical devices, and similar;hoardy-web
, yt-dlp
, hoardy-mail
, hoardy-adb
, and similar;notmuch
, recoll
, and yet-unpublished tools of my own make;Software projects (co-)authored by me, most of which are also mirrored on my GitHub.
I’ve been working on these quite actively for the last few years.
Notes on various technical topics.
Of these, “Brutal (Meta-)Introduction to Dependent Types in Agda” seems to stay relevant and be quite popular for more than a decade now.
My Ph.D. thesis, which is quite useful, but very niche.
Academic papers (co-)authored by me, similarly.
Courses, Seminars, and Talks I taught/led/did.
Most of those were taught by me before people started to customarily record lectures and post them to YouTube, so the useful parts of that sub-tree on this site mostly consists of course plans and exercises. Of those, Operating Systems Course, Functional Programming and Proof Checking Course, and Type Theory Seminar plans contain a ton of useful links and search terms, if you are willing to do the research yourself.
Also, a CV.
CHANGELOG
.CHANGELOG
.CHANGELOG
.pwebarc
-> hoardy-web
, abarms
-> hoardy-adb
, imaparms
-> hoardy-mail
.If you find something I’ve done — be it my software projects, or notes, teaching materials, or something else — to be cool or useful to you, you can help me do more things like that by following one of the following procedures.
Help me get my sustenance by donating some coins into my tip jars so that I could devote more of my time to those personal projects instead of doing freelance work:
(Personally, I think everyone should have their own indie cryptocurrency tip jars. Allowing Patreon and GitHub to control future livelihoods of potentially everyone makes me feel very paranoid. Isn’t it enough that Visa and MasterCard take 3% tax on the whole world economy already?)
(I.e., if you are an indie developer, make such tip jars too! Personally, for tips, I would rather use Monero than anything else in existence.)
If you think one of my software projects or notes has an issue, bug, or just misses something obvious, open an Issue on GitHub or write me an email about it.
It’s nice to know what people are using my things for, and even though my answer to any feature requests will likely be “eventually”, I’m trying my best fix any reported bugs ASAP.
I will be quite thankful if you decide to write me a thoughtful email about how you use my things. In such a message, please specifically mention the parts you liked and the parts you didn’t. This does more than just stroke my ego. For example, so far, most improvements to UI of hoardy-web
were a results of such email exchanges. E.g., most recently, several persons wrote me emails which, essentially, said
hoardy-web
rocks, thanks for making it! Ka-ching! But, re-queuing sucks. Whomp-whomp-whomp! Can we have a different UI for this, please?
and thus re-archival machinery was born.
Also, I’m self-aware enough to notice that honest praise is the best motivator for me and that I spend most of my idle time thinking about things people wrote to me about.
Though, be aware that while you are technically allowed to ask me hard technical questions and request me to contribute to your projects instead of working on mine in those messages, I will probably ignore such requests, simply skipping those parts in my answers to you. Don’t take it personally, please. I’m a perfectionist and hard questions usually require me to do quite a lot of research to produce a response that satisfies me, while half of my project aren’t finished yet, so I would rather work on those instead.
If you would rather praise or complain about my things in a blog post, podcast, or video instead, you are welcome to that too.
Though, in that case, I would be thankful if you would also kindly send me a link to it. Similarly, I would be implicitly thankful if you would, in good faith, mention my stuff where it would be relevant, both on social media and in non-spam private communication. Relevant gossip is the best advertisement, after all.
If you think you have a better solution to a problem mentioned in notes or solved by a piece of software I use, please inform me about it. I will probably link to the thing from the relevant page on this site and/or from the relevant project’s documentation, depending.
If you browse the docs and GitHub issues of my projects, you can find multiple examples of me doing this. I hate how search engines apparently lower you search rank when you link to too many other useful things. Which, while they have a good explanation for doing it, I find it mightily suspicious that it also benefits them greatly, as now you have to go to them for alternatives and comparisons, instead of the original project pages listing those things, even though that’s actually the best place for those things. So, I refuse to obey these stupid rules and all my project feature extensive list of alternatives and comparisons, for example, like this.
As an extension of the above option, you can write me an email describing how you use my things and any features you or your company wants to be there but are apparently missing, and then, assuming we mutually agree on the terms, you can simply hire me to add those things for you.
In this case, my terms are as follows:
I keep the copyright on all the code I write, that code will be licensed under the terms used by the original project;
by hiring me to work on a project, you get a non-revocable license to use the code of that project as you see fit, as long as you are not re-distributing it;
though, obviously, you can still re-distribute that code under the terms of the original project’s license;
special-sauce private feature branches that I maintain specifically for your business are negotiable;
though, in general, I dislike these and would rather do something more generally useful;
thus, as soon as our relationship ends, I must be allowed publish those features in a public master
branch;
also, from that point on, I must be allowed to replace those features with equivalent of more general features, or simply remove them, if a better solution for your original use-cases become known to me;
though, I do commit to not to remove any features I was hired to add without providing equivalent or better alternatives for them first.
The above terms ensure that
you won’t be forced to pay for a perpetual support subscription on the features you hired me to implement,
unless you want those features to stay secret, in which case it’s only fair, since I would have to maintain code compatibility with master
branches specifically for you;
you will be able to take your business elsewhere at any moment while keeping all the code;
meanwhile, I won’t be forced to re-do the work I did before for another client;
humanity will benefit from our exchange.
I like things being fair and voluntary on both sides and both sides parting on amicable terms.
If you like something of mine enough to make a patch for one of my software projects or write and publish your own version of one of my more theoretical notes, please open a PR on GitHub or drop me an email about it.
I’d love to see if I can adopt some changes back from your work, or maybe I’ll just link to it, if it is relevant, but not useful to what I want my thing to do.
Write me an email. Yes, you get the idea. I love emails. Thank you.
To: Jan Malakhovski <oxij@oxij.org>
over conventional SMTP.Subject:
line.If you are contacting me about one of my software projects you can also open an issue or PR on its GitHub page instead. Each project page has a link to its GitHub page at the very top, right under the title header.
If you don’t want to make that conversation public, emails, including those with outputs of git format-patch
are perfectly fine too.
rsa2048/0x0E6CA66E5C557AA8
Fingerprint: 514BB966B46E3565050886E80E6CA66E5C557AA8 (514B B966 B46E 3565 0508 86E8 0E6C A66E 5C55 7AA8). E.g. do
gpg --keyserver hkp://keys.gnupg.net --recv-keys 514BB966B46E3565050886E80E6CA66E5C557AA8