Andrey Listopadov

About me

Hi! My name is Andrey Listopadov (a.k.a. Andrey Orst), and I’m a software developer and free software enthusiast. I use Clojure as my primary language, and have a lot of experience in C and bare metal programming. I’m a huge fan of Lisps, studying Common Lisp, and helping with the development of the Fennel language.

This is my personal space, where I share my thoughts on various (not only) programming-related topics. I do so not very regularly, so if you’re interested, you can follow me via an RSS feed. If you like something I do, or want to give a feedback, there’s a links section below, which describes how you can contact me. All my work is open source, and I value it’s principles and principles of free software.

You can think of me as a text editor enthusiast, as I often try out various text editors, and sometimes contribute to their ecosystems. I’ve written a somewhat in-depth overview of various text editors and my thoughts on why one may be better than another in various contexts.

I also like studying various programming languages to expand my reach and learn new paradigms. I have various amounts of experience in languages like Perl, Lua, Rust, Awk, Clojure, Python, C, C++, Common Lisp, Zig, Erlang and Elixir. My operating system of choice is GNU/Linux and GNU Emacs is my preferred editing software.

Projects that I made or worked on

I do a lot of stuff, and that’s primarily the reason why I decided to create this blog, so I could keep my thoughts a bit more organized, and occasionally write about stuff I’ve built. Below are some projects of mine, some of which I consider finished, and some of which are still in the phase of active development.

Fennel

As I’ve already mentioned, I’m working on the Fennel language itself as well as on various libraries, or just projects that I find fun. I like the Fennel very much, because it brings together the simplicity and expressiveness of Lua with the flexibility of Lisp macro system, and does so in a very smart way.

  • fennel-async - an experimental library for asynchronous programming in Fennel.
  • lazy-seq - lazy sequence manipulation library for Fennel and Lua.
  • itable - immutable table library for Lua and Fennel.
  • Fennel-conditions - a condition system for Fennel language.
  • Fennel-test - a unit testing library for fennel.
  • Fenneldoc - a tool to turn Fennel function metadata into documentation.
  • Cljlib - a general-purpose library for Fennel language that brings functions and macros from Clojure’s core namespace.
  • LÖVE F.A.B.R.I.K. - implementation of Forward and Backward Reaching Inverse Kinematics algorithm in Fennel using LÖVE game engine.
  • LÖVE Raymarching - an example implementation of raymarching algorithm done in Fennel language using LÖVE game engine. Post link.

Emacs

My main text editor, which I use both to write code, this blog, take notes, do agenda, and other stuff. My configuration is quite extensive, and I’m trying to extract useful stuff from it into packages:

  • isayt.el - indent s-expressions as you type. Basically does what the name says.
  • fennel-mode - major mode for the Fennel language. I’m a co-maintainer of this package.

Kakoune

I’ve used this text editor for some time, heavily configured it, and developed this set of plugins over the time:

Even though Emacs is my main text editing tool I still occasionally use Kakoune when I need quick edits in the terminal. Mainly when it is required to operate on text with complex regular expressions, which is like central feature of this text editor, and it’s interactive nature makes it much better than sed or Perl.

Vim

I’ve used Vim (and NeoVim) for a very long time, and it was my first experience with a hackable text editor. The following plugins were originally meant for personal use, but I’ve published those anyways.

Clojure(Script)

Not that many to show here, but I have a tutorial on how to create a basic raycasting engine with ClojureScript. There’s also a cli app I made and used for a bit to keep track on how much time I spent on various activities. (It was built in a rush, so it’s not the greatest example of my Clojure skills.)

I’ve also written a small article about the wave function collapse algorithm, and created a demo page for it. The demo page features a basic tile-based editor, and some examples to try. You can try it here.

Rust

Rust was what finally motivated me to move away from C to some other language and start this blog. I really liked the concepts behind the borrow checking system, and overall Rust was pretty fun. For self exercise purposes I’ve written GRScheme - a small scheme-like language interpreter in Rust. Here’s the series of articles in which I go into implementation details. It’s not the greatest way to make a language, and the code is not the best either, but I’m still proud of it.

I don’t use social networks that much, and mostly available on such things as Twitter or Reddit only to publish links to my posts, and to get feedback. The preferred ways of reaching me are Email or Telegram, but you still can DM me on Twitter or Reddit, just beware that I may be very slow to respond. If you use Email you can optionally encrypt the message with the GPG key below.

Most things that I do are available under MIT or GPL3 licenses on my Sourcehut, GitLab or GitHub profiles. So if you have any issues with any of my projects, like bugs, or want to submit a feature request, consider using the appropriate git forge, where the project is hosted.

  • GitLab: @andreyorst

  • GitHub: @andreyorst

  • Sourcehut: ~andreyorst

  • Patreon: andreyorst

  • Email: andreyorst@gmail.com

    GPG public key
    -----BEGIN PGP PUBLIC KEY BLOCK-----
    
    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
    =f4xj
    -----END PGP PUBLIC KEY BLOCK-----
    
  • Telegram: @aorst

  • Reddit: u/andreyorst

  • Twitter: @andreyorst (I don’t use it much)