M-x Reloaded: The Second Golden Age of Emacs
The people who live in a Golden Age usually go around complaining how yellow everything looks. – Randall Jarell
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)
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...
New is always better. – Barney Stinson
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
Today I came across this great summary of the concept of interactive programming:
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...
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...
Recently I came across this tweet about Emacs and its users:
redux adjective brought back; resurgent: the Victorian era redux.
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!
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!
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...
Projectile 0.10.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...
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...
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...
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
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 ...
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...
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...
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
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.
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...
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...
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...
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...
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...
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...
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...
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 ...
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...
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...
Meet RuboCop’s brand new official logo!
Most experienced Rubyists probably know that there are two ways to interpolate instance, class and global variables into strings.
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:
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:
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!
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 often see this question asked - “I’m getting the following error
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...
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...
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 ...
Prelude
Disclaimer
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...
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...
Life is a long lesson in humility. – James M. Barrie
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.
Remember me trying out Mastodon a while ago? Well, it didn’t stick. For various reasons.
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...
This is going to be one super short post.
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...
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...
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...
Pretty often I receive emails like this one:1 Today I got three of those, which inspired me to write this short article. ↩
New is always better. – Barney Stinson
May you live in interesting times. – an old Chinese curse
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 ...
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...
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
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’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...
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...
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.
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...
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.
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...
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...
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...
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...
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...
Prelude
Every Generation Has A Legend. Every Journey Has A First Step. Every Saga Has A Beginning. Star Wars Episode I: The Phantom Menace, Trailer
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...
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...
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...
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...
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...
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 ...
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...
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...
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:
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...
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 ...
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:
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...
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 ...
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...
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...
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...
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...
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...
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...
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...
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...
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...
You never get a second chance to make a first impression.
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...
Today I came across this great summary of the concept of interactive programming:
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...
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 ...
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!
SICP Distilled is one of the most interesting Kickstarter projects I’ve seen in a while.
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.
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:
Most experienced Rubyists probably know that there are two ways to interpolate instance, class and global variables into strings.
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...
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:
There are whopping 4 ways to invoke a lambda (or a proc) in Ruby:
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...
One can often find similar code in the wild:
I often see people writing code like this:
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:
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.
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...
Java.next()
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...
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 ...
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...
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’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...
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...
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...
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...
2021 is the year of anniversaries for me:
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...
Today I’ve switched the blog’s theme from Hydeout to Minimal Mistakes. I did so for several reasons:
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...
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...
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...
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...
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...
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, ...
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 ...
Ruby programmers are commonly called Rubyists. Python programmers are often called Pythonistas. Lisp programmers are widely known as Lispers. Clojure program...
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...
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...
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...
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
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...
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...
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 ...
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...
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
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...
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...
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...
I often see this question asked - “I’m getting the following error
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...
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...
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 ...
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...
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...
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...
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...
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...
Disclaimer
Prelude
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...
In the end, there can be only one. – Highlander
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...
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...
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...
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 ...
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...
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...
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 ...
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...
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:
This post is mostly a note to myself, since I constantly forget how to delete remote Git branches.
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...
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 was surprised to learn that Windows has added support for Unix sockets (AF_UNIX) a few years ago (in 2017). From the announcement article:
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 ...
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...
Read this with an open mind.
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...
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...
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...
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...
Meet RuboCop’s brand new official logo!
Good news, everyone - RuboCop 0.14 was just released!
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...
RuboCop 0.8.0 is out!
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...
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...
Prelude
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.
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...
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...
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 ...
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...
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...
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...
Prelude
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...
Prelude
Read this with an open mind.
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...
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...
Prelude
Prelude
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...
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...
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...
Life can only be understood backwards; but it must be lived forwards. – Søren Kierkegaard
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...
Celebrate endings – for they precede new beginnings. – Jonathan Lockwood Huie
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...
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...
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 ...
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...
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 ...
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...
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...
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...
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...
Prelude
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 ...
Disclaimer
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...
Have you ever wondered where a particular rake task is defined? Enter rake -W (introduced in rake 0.9):
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...
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...
Prelude
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 ...
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...
This is going to be one super short post.
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...
2021 is the year of anniversaries for me:
Here’s one random observation - (almost) nobody comments directly on blog posts these days. It seems that all the conversations happen somewhere else - Reddi...
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...
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...
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...
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...
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...
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, ...
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 ...
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...
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...
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...
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...
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...
Recently I’ve been trying to switch my work environment theme to something with lower contrast (namely the excellent Zenburn theme). Swing applications, howe...
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...
Prelude
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...
Java.next()
Prelude
Prelude
Projectile 0.12 is finally out!
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...
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...
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...
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...
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...
Yesterday I got yet another completely absurd cold email from an incompetent technical recruiter:
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...
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...
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...
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...
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’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’ve noticed that updates to my site resulted in GitHub Pages deployment errors, even though everything was working fine locally with jekyll --serve 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...
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 ...
Today I came across this great summary of the concept of interactive programming:
Today I came across this great summary of the concept of interactive programming:
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 ...
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 ...
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 ...
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 ...
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...
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
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...
You never get a second chance to make a first impression.
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...
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...
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...
Remember me trying out Mastodon a while ago? Well, it didn’t stick. For various reasons.
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...
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...
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.
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...
Social Media
Bluesky
1 minute read
Remember me trying out Mastodon a while ago? Well, it didn’t stick. For various reasons.