2025| André.Arko.net
The team behind the last ten years of rubygems.org, including @deivid-rodriguez, @duckinator, @martinemde, @segiddins, @simi, and myself, is very pleased to announce a new gem server for the Ruby community: gem.coop.| André Arko
Now, let’s take a look at the most common jj commands, with a special focus on the way arguments are generally consistent and switches don’t hide totally different additional commands.| André Arko
I’ve been working on a blog post about migrating to jj for two months now. Rather than finish my ultimate opus and smother all of you in eight thousand words, I finally realized I could ship incrementally and post as I finish each section. Here’s part 1: what is jj and how do I start using it? pls, I just want to use jj with GitHub Sure, you can do that. Convert an existing git repo with jj git init --colocate or clone a repo with jj git clone. Work in the repo like usual, but with no add...| André.Arko.net
This post was originally given as a talk for JJ Con. The slides are also available. Welcome to “stupid jj tricks”. Today, I’ll be taking you on a tour through many different jj configurations that I have collected while scouring the internet. Some of what I’ll show is original research or construction created by me personally, but a lot of these things are sourced from blog post, gists, GitHub issues, Reddit posts, Discord messages, and more.| André.Arko.net
I’ve spent 15 years of my life working on Bundler. When I introduce myself, people say “oh, the Bundler guy?”, and I am forced to agree. I didn’t come up with the original idea for Bundler (that was Yehuda). I also didn’t work on the first six months worth of prototypes. That was all Carl and Yehuda together, back when “Carlhuda” was a super-prolific author of Ruby libraries, including most of the work to modularize Rails for version 3.| André.Arko.net
Recently on this blog, I wrote about in-memory filesystems in Rust, and concluded that I wasn’t able to detect a difference between any form of in-memory filesystem and using a regular SSD on macOS. I also asked anyone who found a counterexample to please let me know. Last week, David Barsky of ERSC sent me an extremely compelling counter-example, and I spent several days running benchmarks to understand it better. The top level summary is that the test suite for the jj VCS exhibits an abso...| André.Arko.net
As chronicled by my teammate Ellen, the RubyGems team is no more. I wish the best of luck to everyone taking on the herculean task of keeping package management functional and working for the entire Ruby community. In the meantime, I’m looking forward to spending my new free time focusing on projects that I’m truly excited about, like rv. We’d love to have your help as we work to build next-generation tools for Ruby.| André.Arko.net
This post was originally given as a talk for Friendly.rb. The slides are also available. Between Litestack and the Rails 8 trifecta of Solid Cable, Solid Cache, and Solid Queue, it’s easier than ever to spin up a Rails app that doesn’t need a database service, or a redis service, or a file storage service. It’s great to simplify things, but even after 20 years of deploying Rails apps I was still caught out by some of the ways things are different.| André.Arko.net
For the last ten years or so of working on Bundler, I’ve had a wish rattling around: I want a better dependency manager. It doesn’t just manage your gems, it manages your ruby versions, too. It doesn’t just manage your ruby versions, it installs pre-compiled rubies so you don’t have to wait for ruby to compile from source every time. And more than all of that, it makes it completely trivial to run any script or tool written in ruby, even if that script or tool needs a different ruby t...| André.Arko.net
I’ve been working on a CLI tool recently, and one of the things it does is manage files on disk. I have written a lot of file management tests for Bundler, and the two biggest reasons that the Bundler test suite is slow are exec and fstat. Knowing that, I thought I would try to get out ahead of the slow file stat problem by using an in-memory filesystem for testing.| André.Arko.net
Today I stumbled across a jj cheat sheet and it contained an absolute gem of a command that I had somehow completely avoided knowing about this entire time: jj config edit --user. You can just run a jj command to open the config file in your editor! You don’t have to remember whether you put it in ~/.jjconfig.toml, or ~/.config/jj/config.toml, or whatever, you can just edit it! Super great.| André Arko
Today I was trying to figure out how to parse a string into an array in zsh, and eventually found the zsh cheat sheet. This should definitely be posted somewhere much easier to find, or maybe should just be the beginning of the zsh man page.| André Arko
Today I stumbled across a neat tool (written by my Bundler and RubyGems co-maintainer @hsbt) that makes it super easy to get a copy of a gem’s source repo: gem-clone. gem install gem-clone && gem clone GEM. That’s it! Pretty good.| André Arko
I’m a longtime user of jq, but its language is… not intuitive to me. I spent a lot of time searching for prewritten jq programs I can use, or reading the docs trying to figure out the exact thing that I want to do. Mostly, I think to myself “why do I have to learn a new language to manipulate JSON” every time I use it, even if my use is successful and does the thing I want.| André Arko
One of the sillier things I do with my computer is print a horse fortune every time I open a new shell, printed by the even sillier CLI tool ponysay. A long time ago, I downloaded a fortune database from horsefortun.es (RIP), a website full of posts by the Twitter (RIP) account @horseebooks (RIP). More recently, I added a fortune file of posts from “weird twitter”, which added a lot of excellent variety. Most recently, I added one more, of posts by the excellent @utilitylimb. Most famous ...| André Arko
Apple released developer beta versions of all their OSes this week, and in the past I’ve sometimes upgraded my laptop to the developer betas while reserving my desktop/server to run the final releases. The problem with that plan is if there’s a bad bug in the beta, your laptop doesn’t work anymore. 🥲| André Arko
Today I ran hugo new to create a file, and then wanted to edit it. I have fzf set up to let me open files in Vim, but suddenly realized… why doesn’t the file I just created show up as the first option in fzf? Apparently the answer is that it’s really annoying to get a recursive list of files and then sort them by creation date, to the point where [a Reddit post asking my exact question] had no answers.| André Arko
This week I re-encountered a problem that has been plaguing me for months, but I never took the time to try to debug it before now. The problem came with a really specific and confusing symptom: any time I installed a newer version of Ruby on my machine, a daily cronjob running a Ruby script would start failing. The specific error was always an FFI exception, with the exact error message FFI::DynamicLibrary.load_library: Could not open library.| André.Arko.net
I’m in the process of switching from git to jj right now. That switch is another post of its own, which I am still working on, but in the meantime I wanted to write up the way that I’ve set up my shell prompt to include information about the current jj repo. If you’re not already familiar with jj, you might find the ways jj is different from git helpful background reading for the rest of this post.| André Arko
While working on my shell prompt for jj, which will get a much longer post on its own shortly, I ran into a fascinating mismatch between different programs’ ideas of “empty”.| André Arko
We’ve had decades of thought leadership around testing, especially coming from wholistic development philosophies like Agile, TDD, and BDD. After all that time and several supposedly superseding movements, the developers I talk to seem to have developed a folk wisdom around tests. That consensus seems to boil down to simple but mostly helpful axioms, like “include tests for your changes” and “write a new test when you fix a bug to prevent regressions”. Unfortunately, one of those co...| André.Arko.net
This post is a part news, part technical documentation, and part request for comment. I’m going to explain the technical nitty-gritty details of the planned next generation index that allows Bundler and Rubygems to know what gems exist and how to install them.| andre.arko.net