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.
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.
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.
I’ve used this text editor for some time, heavily configured it, and developed this set of plugins over the time:
- plug.kak - a plugin manager for Kakoune.
- fzf.kak - a fzf integration plugin.
- smarttab.kak - Vim’s smarttab feature.
- powerline.kak - a status line plugin with themes and contextual behavior.
- langmap.kak - a plugin to toggle keyboard layout for insert mode only.
- pmanage.kak - plugin to spawn and manage background processes.
- tagbar.kak - a code outline view with Ctags.
- kaktree - an integrated filetree explorer with Tmux support.
- base16-gruvbox.kak - unofficial base16 variant of gruvbox color theme.
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.
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.
- SimpleSnippets.vim - a small and fast snippet manager and template engine.
- SimpleClangFormat.vim - a clang-format integration plugin.
- SimpleWorkspaces.vim - Visual Studio Code inspired workspaces for Vim.
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 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.
GPG public key
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =f4xj -----END PGP PUBLIC KEY BLOCK-----
Twitter: @andreyorst (I don’t use it much)