Professionally, I code mostly in Ruby and Rails. In my spare time (and very non-professionally), I try to play around with all sorts of other stuff: Image processing, gamedev with Unity, opengl and webgl, Android, electronics, and any fun programming-related thing that crosses my path.
Recently, I’ve been building most of my side-projects in Rust. I’ve grown fond enough of the language to start teaching it in Sofia University. I’ve got a bunch of half-baked experiments, but a few usable ones as well:
- id3-image allows easy manipulation of images embedded in mp3s. Think cover art and thumbnails.
- cargo-local lets you find the local source code of packages, useful for exploring them with an editor or generating tags.
I don’t have that many published Ruby gems, compared to how long I’ve been working on the language. I guess working professionally in it means I tend to focus spare time on other things. Here’s a few of my projects, though:
- vimrunner is a ruby library that lets you spawn a vim instance and control it. This could be useful for integration tests for vim plugins and it’s actually being used for CI in some of my own plugins and a few others (like runspec.vim, vim-elixir, vim-ruby).
- progressor is a ruby gem that lets you measure loops of a long-running task and show some estimation of the remaining time. Useful for long data migrations, for instance.
- ctags_reader is a little library to read ctags “tags” files and give you an interface to query them in a similar way that a text editor would. It’s useful for some super-simple static analysis of code. I’ve used it to generate documentation links in non-API docs.
- waiting-on-rails runs the
railscommand, while also playing some relaxing elevator music until the server boots. Convenient for that legacy monolith you need to start up every morning.
- image-processing is an implementation of a bunch of simple image processing algorithms in ruby, using the chunky_png library. It’s mostly an exercise, though I’d love to improve them and actually figure out a good use for them. And possibly rewrite them in, say, Rust.
- daily_sites is a small website I use to manage my everyday reading list.
I’m a dedicated Vim user and I’ve created quite a few Vim plugins. I maintain the VimLinks twitter account, I’m one of the maintainers of the official ruby bindings for vim (but I’m pretty bad at keeping up with the work there), and I own the runtime files for Vim’s eco support.
A few of the more interesting ones:
- splitjoin lets you switch between multiline and single-line versions of the same code.
- linediff lets you diff blocks of code instead of files.
- inline_edit makes it easier to edit code that’s embedded in other code, like script tags within HTML.
- switch changes code in predetermined ways depending on what is currently under the cursor.
- sideways moves items in lists (argument lists, arrays) to the left and to the right. It also provides a text object for “item in argument list”, which is arguably the more useful part of the plugin.
- whitespaste attempts to adjust blank lines automatically when pasting.
- multichange provides an easy way to replace words in a buffer or a particular area. Think variable renaming.
- writable_search lets you grep for something, edit the results directly and have the changes update the original buffers.
- undoquit is like a “Restore Tab” button for Vim, except it also works for splits. A window that was closed with
:quitcan be reopened with a keymap.
- ember_tools provides some useful tools to work with an ember.js project.
- gnugo is a UI around a GnuGo process – it lets you play Go right in your Vim.
- id3 lets you “edit” mp3 files by editing their ID3 tags. It also handles flac files, so I might just rename it to something more appropriate one of these days.
- discotheque is a bit of a joke, but an entertaining one to have installed, I feel.
If you’re a Vim user, you might also like to look around my Vimfiles. The README might point you in the right directions to explore.
I’ve got a playlist of Vim-related screencasts, mostly of my own plugins or setup:
Occasionally, I speak at conferences, and I’ve put most of the videos in one youtube playlist. Most of them happen to be in Bulgarian, but if it has an English title, it should be in English: