Archive

2024

How to Fix X11 Forwarding on WSL

1 minute read

I guess most of you are aware that I’ve been using Windows 11 + WSL as my main development environment in the past 4 years.1 I’ve spent some time running Ema...

40

5 minute read

Life is a long lesson in humility. – James M. Barrie

Daniel Craig is my James Bond

3 minute read

Note: This article was originally published on “HEY World” on Oct 25, 2021. I’m moving it to my main blog, as I’ve decided to close my HEY account.

The Story of a Nickname

4 minute read

Note: This article was originally published on “HEY World” on Sep 30, 2021. I’m moving it to my main blog, as I’ve decided to close my HEY account.

OCaml Adds List.take and List.drop

1 minute read

One of my small issues with OCaml is that the standard library is quite spartan. Sometimes it misses functions that are quite common in other (similar) langu...

AsciiDoc Language Specification

3 minute read

I’m an avid fan of AsciiDoc and I’ve been using it for years to write documentation for some of my OSS projects (e.g. CIDER and Projectile). I try to keep tr...

Revisiting Mastodon

1 minute read

After my recent article on Bluesky something rather unexpected happened. I noticed a link to an interesting post on Mastodon and when I signed in to check it...

Bluesky

1 minute read

Remember me trying out Mastodon a while ago? Well, it didn’t stick. For various reasons.

2023: The Year in Review

5 minute read

Life can only be understood backwards; but it must be lived forwards. – Søren Kierkegaard

Back to Top ↑

2023

A Bad Year for Blogging

1 minute read

Last year (2022) I celebrated a rather unexpected all time blogging record. As it often happens in such cases, however, there was a massive drop in my bloggi...

Fastmail: Year Two

1 minute read

Here’s a small follow-up to my usage of Fastmail that started in 2021. In a nutshell - little has changed since my previous update. Fastmail is still my favo...

Learning OCaml: Quoted String Literals

3 minute read

While learning OCaml I’ve noticed one curious feature - it has two types of string literals. The first type are the common and quite familiar “double-quoted ...

How are OCaml Programmers Called?

1 minute read

Ruby programmers are commonly called Rubyists. Python programmers are often called Pythonistas. Lisp programmers are widely known as Lispers. Clojure program...

2022: The Year in Review

4 minute read

Another year is behind us and it’s time for the obligatory “year in review” blog post. I’ve been feeling a bit lazy, that’s why I’m getting to writing it a b...

Back to Top ↑

2022

Bozhidar is on Mastodon

1 minute read

Twitter these days is all about drama related to… Twitter (Elon Musk). That really pains me, given that as long as it has existed Twitter has been the only s...

Topic-specific RSS Feeds

less than 1 minute read

Someone complained earlier today that my Pixel 6A article was picked up by Planet Emacslife. While I wasn’t involved in adding my blog there and I never prom...

Back to Android: My Take on the Pixel 6A

7 minute read

A couple of weeks ago I made a spectacular and quite unexpected return to Android, after a long period of being exclusively in Apple’s mobile devices ecosyst...

Git Tip: Find the Top Contributors

1 minute read

From time to time it’s useful to know who are main authors of some piece of a project. Admittedly most of the time I want to check who are the top contribut...

Reading Files in OCaml

4 minute read

One thing I’ve noticed on my journey to learn OCaml was that reading (text) files wasn’t as straightforward as with many other programming languages. To give...

An Unexpected Blogging Record

1 minute read

Today I’ve noticed that I’ve written 36 articles to date here, which beats my previous annual record of 34 articles from 2011. I definitely didn’t see this c...

OCaml Tips: Implementing a range Function

3 minute read

Lots of programming languages have some built-in range functionality, that’s typically used to generate a list/array of integer numbers. Here are a couple of...

Resetting CircleCI Checkout SSH Keys

1 minute read

Lately I’ve been having some weird problems with CircleCI and some of my OSS projects (most recently CIDER) - the SSH checkout keys that CircleCI uses to fet...

Oh My Zsh: Fun with Take

1 minute read

Today I’ve noticed that Oh My Zsh provides one really useful command (implemented as a shell function) - take. I guess with a name like this it’s not immedia...

Reload Zsh Configuration

1 minute read

I’ve been using Zsh on-and-off for a very long time (15+ years), but I still occasionally learn something new about it.1 Yesterday I was setting up oh-my-zsh...

Zipping Collections in OCaml

2 minute read

Many programming languages have a function for combining the elements of multiple collections (e.g. arrays or lists) together. Typically this function is nam...

OCaml Tips: Multiple Let Bindings

1 minute read

One thing that was a bit weird for me in OCaml early on was how to introduce multiple let bindings (e.g. in the body of a function definition). Think somethi...

Setting up Emacs for OCaml Development

4 minute read

I’ve promised you articles about OCaml and here they come! The first order of business when learning a new programming language is to setup Emacs for effecti...

Learning OCaml

3 minute read

Live as if you were to die tomorrow. Learn as if you were to live forever. – Mahatma Gandhi

Clojure Tricks: Number to Digits

1 minute read

If you’re into programming puzzles you probably know that there’s a whole class of problems about doing something (e.g. some calculations) with the digits of...

Clojure Tricks: Zipping Things Together

1 minute read

Many programming languages have a function for combining the elements of multiple collections (e.g. arrays or lists) together. Typically this function is nam...

Clojure Tricks: Replace in String

1 minute read

Today I saw a clever bit of Clojure code involving clojure.string/replace, that reminded me how powerful the Clojure standard library is. I guess pretty much...

A Note About “Guest” Posts

1 minute read

Pretty often I receive emails like this one:1 Today I got three of those, which inspired me to write this short article. ↩

Dealing with Unwanted Email

2 minute read

It’s no secret that I love email. One of the great things about email addresses is that they are public and that everyone can get in touch with you this way....

Fastmail: Year One

2 minute read

A little bit over a year ago I switched from Gmail to Fastmail for my personal email. Looking back, I couldn’t be happier with my decision. The more I’ve use...

Zed Editor

1 minute read

Yesterday the demise of Atom was a very hot topic for many programmers.1 One thing I noticed in the comments here and there was that the original team behind...

Back in Action

2 minute read

May you live in interesting times. – an old Chinese curse

Commercial Emacs

1 minute read

Talking never moves anything in Emacs, never did, never will. 2021 Maintainer of GNU Emacs, who then proceeded to keep talking.

Who Needs Modern Emacs?

2 minute read

The tools we use have a profound (and devious) influence on our thinking habits, and, therefore, on our thinking abilities. — Edsger W. Dijkstra

Email Mania

4 minute read

I love email! Shocker, right? Especially in this day and age, that are dominated by social media and instant messengers. I’ve got my reasons for this and I’v...

Thinking & Writing

less than 1 minute read

If you’re thinking without writing, you only think you’re thinking. – Leslie Lamport

The War in Ukraine

4 minute read

That’s one article I’ve really struggled to write. For the past 2 weeks I’ve been totally consumed by the horrible war in Ukraine. For many years I believed ...

The Case Against Crypto Permalink

4 minute read

Bitcoin reminds me of what Oscar Wilde said about fox hunting. He said it was the pursuit of the uneatable by the unspeakable. – Charlie Munger

Titanium Edition

4 minute read

Lately I’ve been thinking a lot about music and the role it played in my life over the years. I think I’ve been pretty passionate about music ever since I di...

Reader’s Block

2 minute read

Today I finished reading a book for the first time in a couple of months. As a matter of fact - I barely did any reading in the past couple of months. That r...

Cheating at Wordle Like a Hacker

1 minute read

These day almost everyone on Twitter seems to be playing the word game Wordle, including me. You’ve probably seen many people around you sharing images like ...

Farewell, G Suite legacy free edition

2 minute read

Today I saw the news that Google are pulling on the plug on the G Suite legacy free edition (a.k.a. Google Apps for custom domains). If you don’t recall the ...

Bad Ruby: Hash Value Omission

4 minute read

Ruby 3.1 was recently released and it features one major syntax addition - you can now omit values in hash literals and keyword arguments in certain cases.1 ...

My Writing Process

2 minute read

While working on my year in review article for 2021 I once again realized that my writing process is very similar to my programming process.1 Simply put - it...

Back to Top ↑

2021

New Laptop: Lenovo Yoga Slim 7

8 minute read

A couple of weeks ago I got myself a new laptop to replace my old MacBook 12-inch from 2017. As my followers might remember I was planning to buy either an ...

Perl Turns 34 Permalink

1 minute read

On Dec 18th, 2021, Perl turned 34!1 Here’s how it all started: Depending on what you consider the birthday, that is. The first Perl commit wa...

Changes to GitHub Pages

1 minute read

Today I’ve noticed that updates to my site resulted in GitHub Pages deployment errors, even though everything was working fine locally with jekyll --serve an...

Building Emacs from Source with pgtk

5 minute read

Yesterday the pure GTK (a.k.a. pgtk) feature branch was finally merged in Emacs’s master. In a recent article I mentioned I was super excited about it, becau...

Magit for VS Code

less than 1 minute read

Today I’ve learned about edamagit, a super faithful port of Magit for VS Code. It looks pretty similar to Magit and even has the same keybindings as Magit (e...

Experimenting with Link Posts Permalink

1 minute read

17 years ago the famous blogger John Gruber, of Daring Fireball fame, introduced the concept of a “link log”/”linkblog”:1 I’ve always thought...

No Hello Permalink

1 minute read

I’ve always hated filler chat/email messages like “Hello! How are you doing?”, so I’m very glad we have sites like nohello.net where we can point people who ...

Advent of Code 2021

less than 1 minute read

I love programming puzzles, even if I’ve never been particularly good at solving them. For me they were always a good way to gain some practice with a new pr...

Firefox is the Only Alternative

7 minute read

Supposedly today we have a lot of browsers to choose from - Google Chrome, Safari, Microsoft Edge, Firefox, Brave, Opera, Vivaldi, etc. Having choices is a g...

Small Improvements to the Blog

1 minute read

After switching (think) to Minimal Mistakes I’ve been doing some small improvements to the site’s structure and content. I thought it might be a good idea to...

Why Emacs: Redux

6 minute read

redux adjective brought back; resurgent: the Victorian era redux.

.net Forever

2 minute read

Let’s talk a bit about .net. No, not Microsoft’s .NET, but the other .net - one of the original top-level internet domains. Given how popular .com has become...

Display Git Configuration

1 minute read

From time to time I tend to forget what’s my effective Git configuration, so I have to check it somehow. Most of the time I’d simply do the following:1 ...

Atom Feeds in Jekyll: Redux

3 minute read

It’s been over a decade since I’ve started using Jekyll and I’m still struggling with setting up Atom feeds there. Perhaps this happens mostly, because I rar...

A Note About Recruiters

9 minute read

Yesterday I got yet another completely absurd cold email from an incompetent technical recruiter:

Blog Comments are Dead

1 minute read

Here’s one random observation - (almost) nobody comments directly on blog posts these days. It seems that all the conversations happen somewhere else - Reddi...

The MacBook: Redux

4 minute read

I wonder how many people remember the 12-inch MacBook that Apple introduced to much fanfare in 2015. It was supposed to be the future of computing, a super t...

Switching to Minimal Mistakes

1 minute read

Today I’ve switched the blog’s theme from Hydeout to Minimal Mistakes. I did so for several reasons:

Getting in Touch

1 minute read

From time to time people ask me what’s the best way to get in touch with me, as there are way too many options.

Back to Top ↑

2020

Inspecting the Contents of a Ruby Gem

2 minute read

From time to time you’ll need to inspect the contents of a locally installed Ruby gem. For instance - I needed to check the contents of my Jekyll theme (mini...

Farewell Disqus

less than 1 minute read

Just wanted to let you know that for various reasons I’ve migrated the comments of (think) from Disqus to Hyvor Talk. I’ve described the process in a dedicat...

Basic Git Setup

2 minute read

Every time I change my computer or my operating system1, one of the first things I have to do is to configure Git. This article simply covers the basic Git s...

Rename Multiple Files in Linux

2 minute read

From time to time we need to rename a bunch of files according to some pattern. One simple example that comes to mind is that recently I noticed that some a...

HEY

1 minute read

That’s going to be one really short post. I just wanted to share with you that I’ve been using HEY (a new e-mail service from Basecamp) for the past few mon...

Meta Redux

2 minute read

This site was my first attempt to write. I failed miserably and I produced some pretty crappy content, but I also learned a lot in the process.

Back to Top ↑

2018

Going Rogue

less than 1 minute read

For many years I’ve enjoyed listening to programming podcasts - it’s the perfect way to make a commute a bit more fun and educational.1 RubyRogues was always...

If I Could Turn Back (Git) Time

less than 1 minute read

If only there was an easy way to find the first commit in a Git repository… A bit of Googling unveils some pretty hard to remember incantations like:

Migrating from Octopress to Jekyll

2 minute read

After dreading the migration of this site from Octopress 2 to Jekyll for years, I finally found the will to do it today. The process was actually very straig...

Back in Black

1 minute read

Back in black, I hit the sack I’ve been too long, I’m glad to be back Yes, I’m let loose From the noose That’s kept me hanging about I’ve been lookin...

Back to Top ↑

2015

CIDER 0.9

3 minute read

CIDER 0.9 (a.k.a. “EuroCIDER”) is finally out and it’s our best release yet! (shocker, right?) It took a lot more time than I originally anticipated, but at ...

Octopress 3.0

less than 1 minute read

Can’t wait for Octopress 3.0 to be released! Octopress 2 is killing me and I was seriously considering going back to a plain Jekyll blog, before I saw 3.0 is...

Back to Top ↑

2014

A CIDER Unsession at Clojure/conj

less than 1 minute read

I’ll be talking about the evolution of CIDER at the conj, but I won’t be able to show much (in terms of features) during my talk. Luckily, however, beside th...

The Road to CIDER 0.8

less than 1 minute read

I’m planning to release the long overdue CIDER 0.8 at clojure/conj 2014. I’ll be giving a talk there that will be mostly about CIDER, so this seems like a pr...

RuboCop Logo

less than 1 minute read

Meet RuboCop’s brand new official logo!

SICP Distilled

1 minute read

SICP Distilled is one of the most interesting Kickstarter projects I’ve seen in a while.

CIDER 0.7

7 minute read

CIDER 0.7 is finally out and it’s an epic release! It’s without a doubt the most important release since the inception of the project about two years ago and...

A list of deprecated stuff in Ruby

3 minute read

As APIs evolve it’s inevitable that portions of them will be deprecated. Generally it’s fairly easy to find out what’s deprecated, but for several reasons th...

Looking Back on 2013

2 minute read

2013 was a good year for me in many aspects. I’ll share here some of the programming-related achievements of mine over the year that made me somewhat proud o...

Back to Top ↑

2013

Using Ruby’s each_with_object

1 minute read

Sometimes we’d like to build a new collection object from the elements of another collection. One trivial example would be element occurrence counting, whic...

Regexp anchors in Ruby

1 minute read

Some Rubyists, when faced with the task of matching against the beginning or the end of a string, are prone to using ^ and $ in their regular expressions. Mo...

Using Ruby’s gsub with a hash

less than 1 minute read

Recently we discussed how you can use String#gsub with a block. Today we’ll examine another somewhat unknown feature of the gsub method - the ability to supp...

Lambdas/Procs in Case Expressions

1 minute read

Most Rubyists know they can use literals, classes, ranges and regular expressions in the when branches of a case expression:

Using Ruby’s gsub with a block

1 minute read

String#gsub is one of the most used Ruby methods in the wild. Just about every Ruby programmer knows about the method and uses it fairly regularly.

Announcing the Powerpack library

1 minute read

Powerpack is a small Ruby library containing (at this point) a few extensions to some core Ruby classes. I guess that in a way one can say it’s something lik...

RuboCop 0.9 is now patrolling the streets!

2 minute read

RuboCop 0.9 is finally out! This was one of our most ambitious releases - over a month of work, ~250 commits, lots of new cops and features and a lot less bu...

WikEmacs lives on under new stewardship

less than 1 minute read

Several months passed since I stated my intent to shutdown WikEmacs. While I still consider the project a failed experiment and stand by everything I wrote i...

RuboCop 0.6.0 released

less than 1 minute read

RuboCop 0.6.0 was just released! It’s RuboCop’s biggest and most ambitious release yet!1 Here are the highlights: Fun fact - the entire rele...

RuboCop

less than 1 minute read

After I launched the Ruby Style Guide I often received requests to create a tool enforcing the rules in the guide automatically.

Emacs Redux

less than 1 minute read

I’ve recently launched a new blog dedicated to Emacs - Emacs Redux.

The WikEmacs Experiment is Over!

1 minute read

Less than an year ago amid a lot of turmoil I’ve started an alternative to EmacsWiki. The project took off to a great start, but quickly lost traction and no...

Just juxt it!

1 minute read

juxt is one remarkably useful core Clojure function, that doesn’t seem to be widely used (or understood for that matter), but is part of the arsenal of every...

drop-nth in Clojure

less than 1 minute read

For some reason the standard Clojure library doesn’t have a drop-nth function (although it has take-nth). Luckily implementing it is trivial:

Back to Top ↑

2012

Emacs Tip #8: Manipulating Word Case

less than 1 minute read

One operation that we have to do fairly often when editing text is manipulating the case of words. The most popular case manipulations are probably capitaliz...

Deleting Remote Git Branches

less than 1 minute read

This post is mostly a note to myself, since I constantly forget how to delete remote Git branches.

Setting up fallback locale(s) in Rails 3

less than 1 minute read

I18n(internationalization) and l10n(localization) are topics that are covered superbly by the Rails Guides. The one thing that’s left out is the setup of fal...

guru-mode

1 minute read

Getting started with Emacs is hard. That’s a fact of life and you shouldn’t believe anyone telling you otherwise.

Emacs Support for the Slim Template Language

less than 1 minute read

I’m mostly a Ruby on Rails developer these days and as such I’m pretty fond of the Slim template language. I’ve always hated HTML + ERB, since that evil duo ...

Long Time, No See

less than 1 minute read

It’s been quite a while since my last blog post. There hasn’t been much action on the open-source projects I happen to maintain either. The reason for this i...

A True Emacs Knight

less than 1 minute read

Here’s one true Emacs Knight (courtesy of my friend Gergana Stancheva).

MELPA - homebrew (Emacs Edition)

2 minute read

A few weeks ago I wrote an article about the state of package management in Emacs. In that article I pointed out that on the side of package.el too much was ...

WikEmacs: The Other Emacs Wiki

2 minute read

I’d like to apologize to everyone insulted by my previous posts. Contrary to popular belief I acknowledge EmacsWiki’s contribution to the Emacs community. Ob...

Ruby Tip #2: Get a List of All Rake Tasks

1 minute read

Many people are having trouble remembering all the rake tasks defined in a particular project’s Rakefile (especially if they hadn’t authored it). This is qui...

Emacs Tip #4: Repeat Last Command

less than 1 minute read

Some times you’d want to quickly repeat an Emacs command several times and most of the time it won’t have a convenient keybinding you can use to do this. Ent...

Back to Top ↑

2011

Solarized for Emacs

less than 1 minute read

I’ve created a new port of the Solarized color theme for Emacs 24. While there is another existing port of the theme I’ve decided to into a separate directio...

Emacs Tip #3: Whitespace Cleanup

1 minute read

Good developers are very careful about the proper use of whitespace in their files - there should be no empty lines at the beginning of a file, no empty line...

Emacs Tip #2: Open File in External Program

less than 1 minute read

Sometimes it’s useful to be able to open the file you’re editing in Emacs in an external program. For instance - you might be editing some HTML file and you ...

Running Xerox Phaser 3117 under Fedora 15

less than 1 minute read

I’ve been a GNU/Linux user for quite some time now and a Fedora user for just as long. The first distribution that I ever used was Fedora 2 and even though I...

A new Zenburn theme for Emacs

1 minute read

Zenburn is a popular colour theme for vim, developed by Jani Nurminen. It’s my personal belief (and probably that of many of its users I presume) that it’s o...

Parsing numbers from string in Common Lisp

1 minute read

One task that often recurs in programming is the need to parse a string representation a number(or several numbers) and convert it to its numeric value. Pars...

Emacs Dev Kit

1 minute read

During the past few months I’ve been working on a project to convert my vast Emacs configuration into something generally useful and self-contained that coul...

Add an Atom feed to a Jekyll blog

1 minute read

As you know I’ve recently migrated my blog from WordPress to Jekyll. One of the things I had to do was add an Atom feed (RSS sucks). It was quite the easy ta...

Moving from WordPress to Jekyll

1 minute read

This is my first post after a very long hiatus partially induced by a migration of my blog from WordPress to Jekyll, which I started half an year ago and nev...

Back to Top ↑

2010

My professional CV in LaTeX

less than 1 minute read

After a long period of planning I finally migrated my professional CV from Word to LaTeX last weekend. Since I live in the European Union I used the europecv...

Enabling 3D support for Nouveau in Fedora 13

less than 1 minute read

Most of you probably have heard that Fedora 13 will feature experimental 3D support for the Nouveau open source driver for Nvidia cards. This support, howeve...

Changing the look & feel in NetBeans 6.8

less than 1 minute read

Recently I’ve been trying to switch my work environment theme to something with lower contrast (namely the excellent Zenburn theme). Swing applications, howe...

Back to Top ↑

2009

How to center a JDialog over a JFrame in Swing

less than 1 minute read

I always thought that the fact that JDialogs accepted a parent frame as a constructor argument was the thing, that would make the dialog’s position relative ...

Accessing the menu bar in Emacs

less than 1 minute read

Have you ever been wondering how to access the Emacs menu bar, when using Emacs in console mode? The answer is easy - press F10 or type M-x menu-bar-open(bot...

Using Xerox Phaser 3117 on Fedora

less than 1 minute read

The driver selected by default by Fedora 11 is not appropriate for Xerox Phaser 3117 - it will not print with it. However there is a very easy solution to th...

Mofidy JVM parameters for JBoss AS

less than 1 minute read

Most people have been in a situation requiring them to change one or more of the parameters passed to the JVM on top of which JBoss AS is running. For instan...

Emacs Configuration On GitHub

less than 1 minute read

When you have applications, whose configuration is as complex as that of Emacs it’s always a good idea to store that configuration under version control so y...

Java type indicators in Eclipse

less than 1 minute read

One of the things that I don’t like about the default Eclipse settings for Java development is that in the package explorer all Java files appear in the same...

A switch on String idiom for Java

less than 1 minute read

I’ve always been frustrated with the inability to write a switch on String in Java. However the enum type introduced in Java 5.0 somewhat diminishes the iss...

Back to Top ↑

2008

A nice zsh prompt

1 minute read

Recently I switched to zsh, after being a bash user for almost 5 years. I was in love with everything in zsh from day one, except one thing – the default pro...

Das Keyboard

2 minute read

Every professional developer knows how important to the development process the keyboard is, so it is only natural to be on the look for some quality piece o...

Every blog has its first post…

less than 1 minute read

Every Generation Has A Legend. Every Journey Has A First Step. Every Saga Has A Beginning. Star Wars Episode I: The Phantom Menace, Trailer

Back to Top ↑