All blogs / Dev tools / editors / IDEs
(think)
Bozhidar Batsov’s personal blog
Dev tools / editors / IDEsLisp / Clojure / SchemeRuby / RailsOCaml / F#
- Posts
- 299 from 5 May 2008 to 24 Jun 2026
- Posting
- weekly (35 in the last year)
- Kind
- personal blog
- Feed
- https://batsov.com/feed.xml
2026 31
- Neocaml 0.9: A Better REPL, Dune/Opam Completion, and More Robustness
- Emacs loves AsciiDoc
- nREPL Forever
- neat: a language-agnostic nREPL client for Emacs
- Port: a minimalist prepl client for Emacs
- Batppuccin my take on catppuccin for emacs
- Fsharp ts mode a modern emacs mode for fsharp
- Neocaml 0 6 opam dune and more
- One year with the hhkb
- Essential claude code skills and commands
- Emacs and vim in the age of ai
- Ppx for mere mortals
- Learning ocaml string interpolation
- Working with ocaml records
- Printing data in ocaml
- Building emacs major modes with treesitter lessons learned
- How to vim auto save on activity
- Learning vim in 3 steps
- Setting up emacs for ocaml development neocaml edition
- Adding empty lines in vim redux
- How to vim build your vimrc from scratch
- How to vim to the terminal and back
- Supercharging claude code with the right tools
- How to vim many ways to paste
- Neocaml 0 1 ready for action
- A fresh look for the blog switching to jekyll s chirpy theme
- Tips on using mastodon
- How to vim insert thing at point in command mode
- How to vim alternative approach to find and replace
- How to vim navigating prose in style
- How to vim using effectively the command history
2025 41
- How to vim joining lines
- Rust embrace captured identifier in format strings
- Burst driven development my approach to oss projects maintenance
- Configure quick terminal size in ghostty
- A note about ai generated feedback
- Why i chose ruby over python
- Wayward predicates in ruby
- How to vim take control of split positioning
- How to vim fixing typos
- Learning ocaml numerical type conversions
- Learning ocaml having fun with the fun module
- Zoxide tips and tricks
- How to fish moving between recent directories
- How to vim proper ways to escape
- How to vim reloading file buffers
- How to vim jump around
- How to vim toggle comments
- How to vim format lines
- Remove stale labels instantly with github actions
- The origin of the pipeline operator
- Switching from zsh to fish
- Rediscovering vim
- My favorite tilde keybindings
- Using use package the right way
- Emacs startup time does not matter
- Learning ocaml parsing data with scanf
- Learning ocaml module aliases
- Learning ocaml regular expressions
- Why fsharp
- Neocaml a new emacs package for ocaml programming
- Ocaml s standard library
- Updating my toolbox ghostty and fish
- Learning ocaml functions without parameters
- Back to the basics zsh without oh my zsh
- Learning ocaml matching anything or the lack of anything
- Automate the creation of github releases
- Simple ways to run ocaml code
- A basic helix setup for javascript
- Replace text in multiple files
- Macos no longer ships with emacs
- Running jekyll on ruby 3 4
2024 13
- Articles
- How to fix x11 forwarding on wsl
- The story of a nickname
- Daniel craig is my james bond
- M x reloaded the second golden age of emacs
- Emacs dead and loving it
- Ocaml adds list take and list drop
- Asciidoc language specification
- Revisiting mastodon
- Curbing my email mania
- Bluesky
- 2023 the year in review
- Learning ocaml verifying tail recursion with tailcall
2023 7
2022 43
- Bozhidar is on mastodon
- Back to android my take on the pixel 6a
- Topic specific rss feeds
- Git tip find the top contributors
- What s the term for a filename without its extension
- Reading files in ocaml
- An unexpected blogging record
- Ocaml tips implementing a range function
- Lessons learned from a hardware upgrade gone wrong
- Why bother with a custom desktop pc in 2022
- Ocaml tips converting a string to a list of characters
- Resetting circleci checkout ssh keys
- Oh my zsh fun with take
- Reload zsh configuration
- Zipping collections in ocaml
- Ocaml at first glance
- Ocaml tips multiple let bindings
- Setting up emacs for ocaml development
- Learning ocaml
- Clojure tricks number to digits
- Clojure tricks replace in string
- Clojure tricks zipping things together
- A note about guest posts
- Dealing with unwanted email
- Fastmail year one
- Zed editor
- Modern emacs redux
- Back in action
- Commercial emacs
- Who needs modern emacs
- Having fun with custom domains for email
- Email mania
- Thinking writing
- The war in ukraine
- The case against crypto
- Titanium edition
- Reader s block
- Cheating at wordle like a hacker
- How to find which package a file belongs to in debian ubuntu
- Farewell g suite legacy free edition
- Unix sockets are now supported on windows
- Bad ruby hash value omission
- My writing process
2021 26
- 2021 the year in review
- Interactive programming in a nutshell
- New laptop lenovo yoga slim 7
- Building emacs from source with pgtk
- Changes to github pages
- Perl turns 34
- Magit for vs code
- Working with multiple versions of java on ubuntu
- Experimenting with link posts
- No hello
- Emacs is not a proper gtk application
- Advent of code 2021
- Firefox is the only alternative
- A decade with jekyll
- Emacs is a Lifestyle
- Small Improvements to the Blog
- Why Emacs: Redux
- .net Forever
- Display Git Configuration
- Your Name is Your Brand
- Atom Feeds in Jekyll: Redux
- A Note About Recruiters
- The MacBook: Redux
- Blog Comments are Dead
- Switching to Minimal Mistakes
- Getting in Touch
2020 7
2018 4
2015 3
2014 16
- Introducing inf-clojure - a Better Basic Clojure REPL for Emacs
- A CIDER Unsession at Clojure/conj
- The Road to CIDER 0.8
- RuboCop Logo
- clojure-mode 3.0
- SICP Distilled
- The Elements of Style in Ruby #14: Variable Interpolation
- The State of Some Emacs Packages for Clojure Development
- CIDER 0.7
- Permalinks in the Ruby and Rails style guides
- Permalinks in the Clojure style guide
- Find out where a rake task is defined
- The Elements of Style in Ruby #13: length vs size vs count
- A list of deprecated stuff in Ruby
- The Elements of Style in Ruby #12: proc vs Proc.new
- Looking Back on 2013
2013 31
- Projectile 0.10 is out!
- Regexp anchors in Ruby
- Using Ruby’s each_with_object
- RuboCop 0.14: Beyond the Ruby Style Guide
- Using Ruby’s gsub with a hash
- The Elements of Style in Ruby #11: Invoking Lambdas/Procs
- Lambdas/Procs in Case Expressions
- The Elements of Style in Ruby #10: In cryptic Perlisms we do not trust
- A couple of useful extensions to Ruby’s Enumerable module
- Using Ruby’s gsub with a block
- Announcing the Powerpack library
- The Elements of Style in Ruby #9: Hash#has_key? and Hash#has_value? are deprecated
- Android vs iOS: No Clear Winner
- The Elements of Style in Ruby #8: Know Thy Predicates
- The Elements of Style in Ruby #7: The case against ===
- The Elements of Style in Ruby #6: Attributes Redux
- The Elements of Style in Ruby #5: Readability of long numeric literals
- The Elements of Style in Ruby #4: Array#join vs Array#*
- RuboCop 0.9 is now patrolling the streets!
- The Elements of Style in Ruby #3: Make sure something is an array
- The Elements of Style in Ruby #2: Favor sprintf(format) over String#%
- The Elements of Style in Ruby: An Essay in N parts
- The Elements of Style in Ruby #1: Maximum line length
- RuboCop 0.8.0 is out, support for JRuby and Rubinius is in!
- WikEmacs lives on under new stewardship
- RuboCop 0.6.0 released
- Emacs Redux
- RuboCop
- The WikEmacs Experiment is Over!
- drop-nth in Clojure
- Just juxt it!
2012 24
- Deleting Remote Git Branches
- Emacs Tip #8: Manipulating Word Case
- From Linux to OS X: Meet Your New Apps
- Emacs Tip #7: Remap Return to Control in OS X
- Dealing with SSL certificate validation errors in Rails
- Emacs Tip #6: Remove variable & function definitions
- Ruby Tip #3: Matching on an Object’s Class in a Case Expression
- Rails Tip #1: Use Pry Instead of irb for the Rails Console
- Emacs on OS X
- Setting up fallback locale(s) in Rails 3
- Long Time, No See
- Emacs Support for the Slim Template Language
- guru-mode
- From Linux to OS X: 1 Year Later
- A True Emacs Knight
- MELPA - homebrew (Emacs Edition)
- WikEmacs: The Other Emacs Wiki
- All Hands on Deck! (or the Action Plan for a new Emacs community wiki)
- Die EmacsWiki, Die!
- Emacs Tip #4: Repeat Last Command
- Ruby Tip #2: Get a List of All Rake Tasks
- Emacs Tip #5: Save Buffers Automatically on Buffer or Window Switch
- Color Theming in Emacs: Reloaded
- Package Management in Emacs: The Good, the Bad and the Ugly
2011 34
- Solarized for Emacs
- The Ultimate Collection of Emacs Resources
- Ruby Tip #1: Demystifying the Difference Between == and eql?
- Emacs Tip #3: Whitespace Cleanup
- Admin Interfaces for Rails Apps: RailsAdmin vs ActiveAdmin
- Why Emacs?
- Emacs Tip #2: Open File in External Program
- Blogging Like a Hacker: Evolution
- Deploying Rails 3.1 applications on Heroku’s Celadon Cedar stack
- Getting started with Emacs 24
- A peek at Emacs 24
- Debian post installation setup & tips
- Django 1.3 vs Rails 3: A not so final showdown
- The Linux desktop experience is killing Linux on the desktop, Part II
- The Linux desktop experience is killing Linux on the desktop
- Emacs Tip #1: Set the default font in Emacs 23
- Running Xerox Phaser 3117 under Fedora 15
- Fedora 15 post installation setup & tips
- Java.next() - JRuby: The Rubyists Strike Back
- Recommended Ruby books
- Java.next() - Clojure: The Return of the Lispers
- A new Zenburn theme for Emacs
- Java.next() - Scala: The Revenge of the Static Typing
- Java.next() - The Groovy Programming Language
- Ruby or Python?
- Parsing numbers from string in Common Lisp
- One shell to rule them all…
- Should I stay or should I go?
- Programming languages worth learning
- Incremental development with Scala and JRebel
- Thoughts on the Amazon Kindle
- Add an Atom feed to a Jekyll blog
- Emacs Dev Kit
- Moving from WordPress to Jekyll
2010 4
2009 10
- How to center a JDialog over a JFrame in Swing
- Automatically execute programs after zsh login
- Accessing the menu bar in Emacs
- Using Xerox Phaser 3117 on Fedora
- Modify JVM parameters for JBoss AS
- Emacs Configuration On GitHub
- Find out quickly which package provides a certain library with YUM
- Java type indicators in Eclipse
- Emulate the behaviour of Return+Shift(insert new line) from popular IDEs(IDEA, Eclipse) in Emacs
- A switch on String idiom for Java