
\documentclass[12pt]{article}
\usepackage[T2A,OT1]{fontenc}
\usepackage[default]{cantarell}
\usepackage[a4paper, top=20mm, bottom=20mm, left=20mm, right=20mm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[russian, english]{babel}
\usepackage{tabu}
\usepackage{hyperref}
\usepackage{parskip}
\usepackage{graphicx}
\usepackage{tabularx}
\usepackage{float}
\floatstyle{boxed}
\restylefloat{figure}
\usepackage{setspace}
\onehalfspacing
\author{Artyom Bologov}
\date{\today}
\title{Welcome!}
\makeatletter
\def\endenv{\expandafter\end\expandafter{\@currenvir}}
\makeatother
\begin{document}
\maketitle

Hi! I’m Artyom,
an ironic bipolar programmer trying to make my environment
(and, consequently, the Internet) slightly better and weirder.
Here are my posts (from newest to oldest):

\begin{description}\item[\href{run:advanc-ed}{Advanced Self-Aware ed(1)} (22 Oct 2025)]
ed(1) is a versatile programming system. Yet no one talks about metaprogramming and algorithms in it. Now someone did, and that’s me!

\item[\href{run:lisp-lines}{Line-based Lisp Editing} (13 Oct 2025)]
Not all environments have Lisp-aware structural editing. Some are only line-oriented. How does one go about editing Lisp line-by-line?

\item[\href{run:threading}{Functional Threading “Macros”} (5 Oct 2025)]
Threading macros make Lisp-family languages much more readable. Other languages too, potentially! Except… other languages don’t have macros. How do we go about enabling threading “macros” there?

\item[\href{run:select-text}{Just Let Me Select Text} (24 Sep 2025)]
Text is a universal medium. And yet we try to prevent users of our UIs from using it. Let’s not.

</dd>
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{./assets/artyom-decor.png}

\item[\href{run:my-ed}{My ed(1) Toolbox} (9 Sep 2025)]
I am an ed(1) fan. Naturally, I have a lot of scripts and implementations handy. Here are some.

\item[\href{run:customize-repl}{Customizing Lisp REPLs} (18 Aug 2025)]
Lisp REPLs are a good tool, but some consider it too rigid. Which leads to abundance of proxy REPLs. Except… you don’t need them!

\item[\href{run:just}{Just Don’t} (6 Aug 2025)]
Just stop artificially restricting yourself to bad software.

\item[\href{run:email-formatting}{Plaintext Email Formatting} (22 Jul 2025)]
Plaintext emails are slowly becoming an artifact of the past. Still, there’s a lot interesting things about plaintext emails. Including... plaintext-only formatting!

</dd>
\begin{figure}[h!]\begin{quote}
  Stop with the blogs
\end{quote}\caption{u/TysonPeaksTech (Reddit) on “There Is No Such Thing As The Regex”}\end{figure}

\item[\href{run:stupid}{Why I Am Stupid} (8 Jul 2025)]
Being stupid is a stigma. But it’s also a way of doing my job well or destroying the system the job perpetuates. Come be stupid with me!

\item[\href{run:logical-pathnames}{Lisp Logical Pathnames} (26 Jun 2025)]
Logical pathnames are both a useful and obscure feature of Common Lisp. Here I’m trying to figure them out.

\item[\href{run:lost-compute}{Lost Computation} (11 Jun 2025)]
We keep losing context and computation when running programs. But we don’t have to. Let’s see how this lost compute can be avoided.

\item[\href{run:explanations}{Explanations, not Algorithms} (27 May 2025)]
Algorithms are all the rage in tech. And yet, they are useless unless you use them as black boxes. Better disseminate explanations—they are much more understandable and reproducible.

\item[\href{run:lambda-5}{Making Sense of Lambda Calculus 5: Bring Computation to (Aggregate) Data} (15 May 2025)]
Any programming system needs ways to aggregate values. Be it with structures, arrays, or closures. Lambda Calculus has these ways, so let’s see what’s there.

</dd>
\begin{figure}[h!]\begin{quote}
  Well, ok, you can. But should you?
\end{quote}\caption{u/Intrepid_Result8223 (Reddit) on “Advanced Self-Aware ed(1)”}\end{figure}

\item[\href{run:transparent-ui}{Transparent UIs} (5 May 2025)]
As GUI complexity grows, transparency plummets. Any way to fix that?

\item[\href{run:cutting-corners}{Designing the Language by Cutting Corners} (29 Apr 2025)]
Designing programming languages is hard. But does it have to be this way?

\item[\href{run:ugly-things}{Some Things Have To Be Ugly} (8 Apr 2025)]
Embrace ugly code. Maintain ugly code. Write ugly code.

\item[\href{run:tarot-biases}{Uncovering Tarot Biases with Simple NLP} (31 Mar 2025)]
Tarot is nice. It’s showing us some archetypes and allowing to create stories. But are these stories as diverse as we are? No, and here’re some simple NLP approaches to learning why.

\item[\href{run:llms-suck}{LLMs, But Only Because Your Tech SUCKS} (23 Mar 2025)]
LLMs and Vibe Coding are there. But why? Because our tech is not that advanced and we’re disempowered by it. Make tech not SUCK, and you’ll need no LLMs.

</dd>
\begin{figure}[h!]\begin{quote}
  im pretty sure that isn’t serious
\end{quote}\caption{u/beephod_zabblebrox (Reddit) on “Making C Prettier”}\end{figure}

\item[\href{run:lambda-4}{Making Sense of Lambda Calculus 4: Applicative vs. Normal Order} (18 Mar 2025)]
Lambda Calculus is a simple computation model that’s easy to port to any language with functions. Probably? Hopefully? Actually, there are some problems when mapping from LC to programming. Here are some, with ways to cope.

\item[\href{run:my-generics}{How I Write Generics} (9 Mar 2025)]
With great generic functions comes great responsibility of making them readable and maintainable.

\item[\href{run:postmodern-front-end}{Postmodern Front-end} or just use CSS lol (27 Feb 2025)]
Slides and notes for the CSS propaganda presentation I gave at work.

\item[\href{run:css-only-highlight}{CSS-only Syntax Highlighting} (19 Feb 2025)]
I hate JS. (No, not really.) I don’t want to have even a line of JS on my webite. Especially for something as simple as syntax highlighting. I should be able to do that with some CSS and minor preprocessing, right?

</dd>
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{./assets/word-decor.png}

\item[\href{run:lisp-indent}{All Lisp Indentation Schemes Are Ugly} (19 Jan 2025)]
Indentation styles are a hot topic in every language. So let’s see how Lisps do indentation!

\item[\href{run:customize-ed}{Customizing ed(1)} (28 Dec 2024)]
ed is too simple to be customizable, right? Maybe it is not customizable, but the environment around it is!

\item[\href{run:codeberg-pages}{Codeberg Pages with SSL and Custom Domain} (22 Dec 2024)]
Moving from Gitlab Pages to Codeberg Pages. There are some difficulties, but nothing impossible. Here’s what I did.

\item[\href{run:procnames}{Procnames Start Lines. But Why?} (21 Dec 2024)]
Putting procedure names at column 0 is a widespread convention in C codebases. But the exact reasons are not really elaborated anywhere. We just do that. So I decided to make my own summary for why it’s a thing.

\item[\href{run:this-post-is-ed}{Using ed(1) as My Static Site Generator} (11 Dec 2024)]
You can tell I’m an ed fan. Not only do I use it for esoteric challenges or compiler building, it also is my new SSG (Static Site Generator.) So here’s how it works:

\item[\href{run:3mins}{Three Minutes Writing} (1 Dec 2024)]
We’re all suffering with attention deficit. So let’s finally write like we do.

</dd>
\begin{figure}[h!]\begin{quote}
  they rejected your application because of typos, everything else is good
\end{quote}\caption{A recruiter from Yandex}\end{figure}

\item[\href{run:generated}{Generating This Post Without LLMs} (26 Nov 2024)]
Text generation was a lot of fun before ChatGPT—it was chaotic and deranged. I written this post using the old text generation techniques. You’ll like how absurd it turned out, I promise!

\item[\href{run:printf}{Printf Is Useless} (17 Nov 2024)]
Printf (and the derivatives every language has) are a bane that should only be tolerated when printing floats. Otherwise, I beg you, use string interpolation or structured output.

\item[\href{run:sed-ed}{s/sed/ed} (13 Nov 2024)]
ed is a stupid simple text editor. sed is a nice streaming text processing tool. Why would one even want to use ed for anything, let alone for text processing if there’s sed?

\item[\href{run:paren-regex}{5 *Wrong* Regex To Parse Parentheses} (3 Nov 2024)]
Regex are powerful. To the point you may try to parse HTML or Lisp with it. A doomed enterprise, right? But it’s possible, actually.

\item[\href{run:parameterized}{Parameterized Procedures for Testing, Mocking, Plumbing} (25 Oct 2024)]
It’s often the case that a functional (Scheme?) codebase needs to plug something into the computation. Here’s one way to do that with almost no syntactic overhead.

\item[\href{run:c-not-c}{C Until It Is No Longer C} (23 Sep 2024)]
Get horrified by how pretty I’m making my C code!

\item[\href{run:the-regex}{There Is No Such Thing As The Regex} (11 Sep 2024)]
Regular expressions seem to be quite coherent, right? This scary (.*[^}(]) symbol soup that only the select few can master. Except that there are at least half a dozen (slightly incompatible) varieties of this soup. Bon Appétit!

\item[\href{run:commitmsg}{A’s Commit Messages Guide: Location, Action, Rationale} (01 Sep 2024)]
Commit messages are the critical thing you stare at often enough. So better make them informational and readable.

</dd>
\begin{figure}[h!]\begin{quote}
  Thanks I hate it
\end{quote}\caption{u/terablas (Reddit) on “Regex pronouns?” and u/matjam on “Making C Uglier”}\end{figure}

\item[\href{run:not-ai}{I Am Not an AI—My Writing Is Terible} (27 Aug 2024)]
My writing is imperfect. “AI” could help. But, you know, I no longer want to hide myself. My terible writing is the only things that differentiates me from the sterile AI slop you find everywhere now.

\item[\href{run:wisp}{Explaining Wisp Without Parentheses} (19 Aug 2024)]
Wisp is an indentation-sensitive syntax for Scheme. Its semantics are defined in terms of nested parentheses, though. But what if it was defined in other terms?

\item[\href{run:disroot-gotcha}{Disroot Custom Domain Email Gotcha: Do Not Change the Settings!} (31 Jul 2024)]
I’m a happy Disroot custom domain email user now! Here’s a small tip that helped me set things up after linking.

\item[\href{run:scrollbar}{I Want My Scrollbar Back (A 2-Minute Read)} (12 Jul 2024)]
The modern web is empowered by dynamic content loading. The modern reading is impoverished by it.

</dd>
\begin{figure}[h!]\begin{quote}
  Quality content, not posts without context
\end{quote}\caption{u/fra988w (Reddit) on “Explanations, Not Algorithms”}\end{figure}

\item[\href{run:prose-vs-tweet}{Prose vs. Tweet: How We Tell Stories} (21 Jun 2024)]
We always told stories. We always will. Though our stories fit into 140 chars now, which is both a blessing and a curse.

\item[\href{run:lambda-3}{Making Sense of Lambda Calculus 3: Truth or Dare With Booleans} (12 Jun 2024)]
Booleans are simple and elegant in Lambda Calculus, but they take some getting used to. This post tries to explain LC booleans to at least myself.

\item[\href{run:gmi-a11y}{Gemtext Is Not Accessible} (4 Jun 2024)]
Gemtext is a minimalist markup/hypertext format initially from Gemini network. It’s intended to be a lightweight, easy to learn, and accessible language... But at least the latter is not true with the current state of things.

\item[\href{run:cl-is-lots}{Common Lisp Is Not a Single Language, It Is Lots} (23 May 2024)]
Lisp is an ambiguous category. But Common Lisp isn’t, right? It’s a restricted self-sufficient language, after all.

</dd>
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{./assets/include-decor.png}

\item[\href{run:lambda-2}{Making Sense of Lambda Calculus 2: Numerous Quirks of Numbers} (10 May 2024)]
Lambda Calculus is extremely elegant, including in how it handles numbers. But this elegance often comes at the cost of understandability. This post goes through examples of arithmetics in Lambda Calculus to understand how they work.

\item[\href{run:guile-optimization}{Guile Optimization Gotchas: There Is No Free Beer, Only Cheap} (23 Apr 2024)]
Optimizing Guile Scheme is not always obvious. This post is a collection of takeaways from optimizing a heavily numeric piece of code.

\item[\href{run:oop-c}{Object-Oriented C: A Primer} (8 Apr 2024)]
One can go Object-Oriented in C, and do so with decent success. Although it’s definitely not quite the popular version of OOP everyone is conditioned to.

\item[\href{run:falsehoods-html}{Falsehoods Programmers Believe About HTML} (29 Mar 2024)]
There are many things programmers believe about HTML that are not necessarily true. Here’re some.

\item[\href{run:tui-not-tui}{Text UIs != Terminal UIs} (1 Mar 2024)]
TUI is an ambiguous term, meaning either of ‘terminal’ or ‘text’ user interface. The difference is even more pronounced now, with chat interfaces and assistive tech. So let’s stop calling TUIs ‘text’ and call them ‘terminal’—by their real name. Reserving ‘text’ for more appropriate conversational UIs.

\item[\href{run:lisp-design-patterns}{Lisp Design Patterns} (25 Jan 2024)]
Lisp projects might be smaller and neater that other tech. But still, there are emergent patterns in any software. So here’s an arbitrary list of design patterns I found in Lisp codebases.

</dd>
\begin{figure}[h!]\begin{quote}
  Funny thing. Hope no one gets the idea to actually use this
\end{quote}\caption{u/DocEyss (Reddit) on “Object-Oriented C: A Primer”}\end{figure}

\item[\href{run:regex-pronouns}{Regex Pronouns?} (12 Dec 2023)]
Pronouns are important. They are part of one’s identity, after all. But what if one also identifies as a programmer? Regexes as pronoun listing!

\item[\href{run:lambda-1}{Making Sense of Lambda Calculus 1: Ignorant, Lazy, and Greedy Evaluation} (30 Dec 2023)]
Lambda Calculus is a strong model for computation, but computing examples in it often feels off. In this post, I’m trying to understand how Lambda Calculus evaluation/reduction actually works.

\item[\href{run:brainfuck-lessons}{What Writing 2K+ Lines of Brainfuck Taught Me} (21 Dec 2023)]
I am a Brainfuck programmer. I made some projects that caused me immence pai... joy. I learned something from these, and you can too!

</dd>
\begin{figure}[h!]\begin{quote}
  Yep, it's clearly deliberate. It's also annoying enough that I'm not reading the text of the blog.
\end{quote}\caption{ncallaway (Hacker News) on “Just Let Me Select Text”}\end{figure}

\item[\href{run:lambda-0}{Making Sense of Lambda Calculus 0: Abstration, Reduction, Substitution?} (20 Dec 2023)]
Lambda Calculus is a fascinating idea, but it’s not immediately obvious. In this post, I’m trying to understand and explain the basic terms used in Lambda Calculus.

\item[\href{run:this-post-is-cpp}{I Generated This Post With C Preprocessor} (3 Dec 2023)]
Yes, you can use C preprocessor as a website generator.

\item[\href{run:making-c-prettier}{Making C Code Prettier} (25 Nov 2023)]
C code might be ugly at times. But it can also be pretty! Here are some features and snippets with pretty C code.

\item[\href{run:making-c-uglier}{Making C Code Uglier} (4 Nov 2023)]
C code is scary. It’s often hard to read and has lots of footguns. But it can get even uglier than you imagine. Lo and behold!

\item[\href{run:hypertext}{Write Hypertext, not Plaintext} (4 Sep 2023)]
Living a plaintext-only life is tempting. But the further one goes with plaintext, the more they re-invent Markdown or HTML. Let’s just give up and live hypertext life instead.

\item[\href{run:digital-bum}{Digital Bum: Finding a Home/lessness on the Internet} (29 Jul 2023)]
Internet grew out of a non-commercial academic network with free resources for everyone. Can one get back to this dream of free Internet and build a lifestyle out of it?

</dd>
\begin{figure}[h!]\begin{quote}
  Utterly sick and downright twisted, but hilarious. Thanks.
\end{quote}\caption{mrlonglong (Hacker News) on ed.bf}\end{figure}

\item[\href{run:this-post-is-lisp}{This Post is Written in Lisp} (7 Jul 2023)]
This is probably some fanatic with weird AST magic, you say. But if this magic allows one writing with tab-completion, automatic HTML boilerplate, and other goodies—then why not try it? 😉

\item[\href{run:design-for-exploitation}{Designing for Exploitation: How Meta-Programming Leads to Safer Code} (14 Sep 2022)]
Security tip: You should use meta-programming abilities of your technology (I mostly mean programming languages there) as much as possible, and you should allow your users to program your program by exposing programming languages to them.

\item[\href{run:tripod}{Tripod, the restrictively productive blog engine} (4 Sep 2022)]
Okay, so you want to have your blog backed by a good blog engine?
\end{description}
\par\noindent\rule{\textwidth}{0.4pt}
Copyright 2022-2025 Artyom Bologov (aartaka).
Any and all opinions listed here are my own and not representative of my employers; future, past and present.

\end{document}
