How to Fix X11 Forwarding on WSL
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...
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...
Life is a long lesson in humility. – James M. Barrie
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.
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.
The people who live in a Golden Age usually go around complaining how yellow everything looks. – Randall Jarell
What is dead cannot die. – A Song of Ice and Fire (a.k.a. Game of Thrones)
List.take
and List.drop
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...
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...
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...
Remember me trying out Mastodon a while ago? Well, it didn’t stick. For various reasons.
In the end, there can be only one. – Highlander
How can you be sure that an OCaml function you wrote is actually tail-recursive? You can certainly compile the code and look at the generated assembly code, ...
Life can only be understood backwards; but it must be lived forwards. – Søren Kierkegaard
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...
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...
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 ...
You might have noticed one change introduced with Bundler 2.3 - it now requires you to run the version of Bundler that’s specified in your Gemfile.lock.1 Thi...
This is going to be one super short post.
Ruby programmers are commonly called Rubyists. Python programmers are often called Pythonistas. Lisp programmers are widely known as Lispers. Clojure program...
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...
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...
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...
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...
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...
Today someone asked in OCaml’s Discord “How do you call a variable that refers to a filename without its extension?”. I always thought there was no specific ...
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...
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...
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...
Many people are quite surprised when I tell them that my primary computer is a custom-built desktop PC, that I assembled myself. After all, desktops have bee...
Yesterday I had a very frustrating start of my day for the most unexpected of reasons - a (supposedly) simple CPU cooler upgrade for my desktop computer turn...
While playing with OCaml I was surprised to learn there’s no built-in function the convert a string to a list of its characters. Admittedly, that’s not somet...
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...
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...
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...
Many programming languages have a function for combining the elements of multiple collections (e.g. arrays or lists) together. Typically this function is nam...
You never get a second chance to make a first impression.
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...
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...
Live as if you were to die tomorrow. Learn as if you were to live forever. – Mahatma Gandhi
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...
Many programming languages have a function for combining the elements of multiple collections (e.g. arrays or lists) together. Typically this function is nam...
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...
Pretty often I receive emails like this one:1 Today I got three of those, which inspired me to write this short article. ↩
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....
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...
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...
New is always better. – Barney Stinson
May you live in interesting times. – an old Chinese curse
Talking never moves anything in Emacs, never did, never will. 2021 Maintainer of GNU Emacs, who then proceeded to keep talking.
The tools we use have a profound (and devious) influence on our thinking habits, and, therefore, on our thinking abilities. — Edsger W. Dijkstra
A reader ask me recently how do I use custom domains for my email needs and I promised to write a short blog post about this. Promised fulfilled!
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...
If you’re thinking without writing, you only think you’re thinking. – Leslie Lamport
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 ...
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
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...
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...
Occasionally I need to figure out which Debian package some file comes from (e.g. because I want to remove a redundant package or find related packages). The...
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 ...
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 ...
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 ...
I was surprised to learn that Windows has added support for Unix sockets (AF_UNIX) a few years ago (in 2017). From the announcement article:
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...
Celebrate endings – for they precede new beginnings. – Jonathan Lockwood Huie
Today I came across this great summary of the concept of interactive programming:
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 ...
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...
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...
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...
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...
Today I encountered a bug that was specific to JDK 16 on a project I was working on, and I needed to switch back my Java version to something older. I reali...
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...
I got reminded yesterday that Emacs is not a proper GTK application after installing Windows 11 to make use of its built-in support for Linux GUI apps runnin...
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 ...
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...
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...
2021 is the year of anniversaries for me:
Recently I came across this tweet about Emacs and its users:
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...
redux adjective brought back; resurgent: the Victorian era redux.
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...
You never get a second chance to make a first impression.
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 ...
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...
Yesterday I got yet another completely absurd cold email from an incompetent technical recruiter:
Here’s one random observation - (almost) nobody comments directly on blog posts these days. It seems that all the conversations happen somewhere else - Reddi...
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...
Today I’ve switched the blog’s theme from Hydeout to Minimal Mistakes. I did so for several reasons:
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.
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...
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...
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...
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...
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...
PPAs (Personal Package Archives) are a popular way to install pre-built packages that for some reason are not (yet) available in Ubuntu’s standard package re...
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.
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 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:
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, 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...
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 ...
Projectile 0.12 is finally out!
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...
At Clojure/conj I had the chance to shake Rich Hickey’s hand and exchange a few words with him. When I asked him whether he currently uses CIDER or Cursive f...
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...
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...
clojure-mode 3.0 is out!
Meet RuboCop’s brand new official logo!
SICP Distilled is one of the most interesting Kickstarter projects I’ve seen in a while.
Most experienced Rubyists probably know that there are two ways to interpolate instance, class and global variables into strings.
There are quite a few packages in the “official” clojure-emacs GitHub organization, but many of them have been deprecated recently with the release of CIDER ...
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...
I’m happy to report that now you can use permalinks to the rules listed in the community Clojure style guide as well.
I’m happy to report that now you can use permalinks to the rules listed in the community Ruby and Rails style guides.
Have you ever wondered where a particular rake task is defined? Enter rake -W (introduced in rake 0.9):
One of the problems newcomers to Ruby experience is that there are often quite a few ways to do same thing. For instance - you can obtain the number of items...
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...
People are often confused about the fact that there are two ways to created procs in Ruby - via Kernel#proc and Proc.new. Let’s see them in action:
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...
Projectile 0.10.0 is out!
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...
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...
Good news, everyone - RuboCop 0.14 was just released!
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...
There are whopping 4 ways to invoke a lambda (or a proc) in Ruby:
Most Rubyists know they can use literals, classes, ranges and regular expressions in the when branches of a case expression:
For better or for worse Perl had significant influence over Ruby’s initial design. A lot of things were directly borrowed from Perl, but over the years the R...
Ruby’s Enumerable module is pretty extensive, but from time to time I wish it had some extra methods, that are available in the standard libraries of other l...
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.
One can often find similar code in the wild:
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...
I often see people writing code like this:
Prelude
Today we’ll discuss the following section from the Ruby Style Guide:
Today we’ll talk about attributes in Ruby.
Today’s topic is the following rule from the Ruby Style Guide:
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...
Today’s topic is the following rule from the Ruby Style Guide:
The subject of today’s post is the following rule from the Ruby Style Guide:
Today’s topic is the following rule from the Ruby Style Guide:
Welcome to the first installment of The Elements of Style in Ruby.
The Ruby Style Guide is nearing its second birthday. The project has gained more attention and more traction than I could have imagined. For the millionth ti...
RuboCop 0.8.0 is out!
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 was just released! It’s RuboCop’s biggest and most ambitious release yet!1 Here are the highlights: Fun fact - the entire rele...
After I launched the Ruby Style Guide I often received requests to create a tool enforcing the rules in the guide automatically.
I’ve recently launched a new blog dedicated to Emacs - Emacs Redux.
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...
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...
For some reason the standard Clojure library doesn’t have a drop-nth function (although it has take-nth). Luckily implementing it is trivial:
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...
This post is mostly a note to myself, since I constantly forget how to delete remote Git branches.
I often see this question asked - “I’m getting the following error
One of the major problems when using Emacs on OS X is not related to OS X itself - the problem has to do with the Mac’s hardware. Recent Mac keyboards(both l...
From time to time you might want to void (unbind) a variable or a function definition in Emacs. Most often you’ll probably be dealing with variables created ...
Prelude
This tip is going to be a really short one. Hopefully by now you’ve heard about pry - a fantastic irb replacement, that somewhat reminds me of the mighty Lis...
From time to time you might want to take different actions depending on an object’s class. One handy way to do so is with a case expression:
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...
Prelude
Getting started with Emacs is hard. That’s a fact of life and you shouldn’t believe anyone telling you otherwise.
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 ...
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...
Here’s one true Emacs Knight (courtesy of my friend Gergana Stancheva).
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 ...
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...
Prelude
When I program in Java I usually leave the comfort of Emacs and use IntelliJ IDEA instead (for various reasons that are irrelevant to this post). IDEA has on...
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...
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...
Prelude
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...
Newcomers to Ruby are often confused by the fact the Object class defines three methods related to equality - ==, eql? and equal?. Of the three the one that ...
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...
Prelude
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 ...
Prelude
Prelude
Read this with an open mind.
Emacs 23.2 will pick up the default GNOME monospaced font, so if you’re a GNOME user - you’re basically covered. If you’re not - don’t worry.
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...
Prelude
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...
Java.next()
Disclaimer
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...
Prelude
Prelude
Prelude
One of the things I love most about Lisp development is the ability to develop applications in an incremental interactive manner - you write one function, co...
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...
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...
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...
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...
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...
Recently I’ve been trying to switch my work environment theme to something with lower contrast (namely the excellent Zenburn theme). Swing applications, howe...
If you have access to the source, you can do this in the main method:
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 ...
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...
Sometimes you may want to start a couple of programs just after an interactive login to your favourite shell, which in my case would be zsh.
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...
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...
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...
One of the most dreaded things that you can see while trying to run some application or trying to install an rpm package is a message saying that some requir...
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...
I’m very fond of the ability to insert a new line below the line I’m currently at, and to position the cursor at the beginning of that new line, offered by m...
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...
I haven’t posted anything lately, but I just received my brand new Das Keyboard and now I simply can’t stop typing. Recently I’ve been going through some eff...
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...
Lately, I’ve started digging more and more into Rails, preparing for the start of a Rails powered project. Although there are some IDEs offering decent Rails...
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 Generation Has A Legend. Every Journey Has A First Step. Every Saga Has A Beginning. Star Wars Episode I: The Phantom Menace, Trailer