Hi, I’m Fabio! 👋 I’m a software engineer based in Brazil, hacking on developer environment tooling since 2013 - first to make my own setup less painful, then as open source, and most recently as the kind of environment a coding agent can work inside. My day job is Ruby on Rails and has been for about 15 years, with a brief detour through Golang and Kubernetes somewhere in the middle.
No, not a typo, I’m getting tired of “AI”. I’m wondering when are we gonna go back to discussing other cool things? Can we just try and move on for a bit? What’s the next cool feature or trend we might see in Rails 9 that will be copied over to other frameworks? Does that still happen these days? What comes after containers for pushing code to prod and local dev?…
Part 6 of Modernizing my Terminal-Based Development Environment . Part 5 introduced crib . Let’s say a Capybara spec fails inside the container and dumps a screenshot to a png in tmp/ . How do I open it from inside the container? Sure, I can open the file explorer on my host machine, navigate to the project / worktree root and find the file. But with some “magic” I can just…
I’m starting to come to the conclusion that “rapid-fire chat” with agents is bad for work that requires deep thinking (I’m probably not the only one at this point). If we combine that with running multiple chats with agents begging for our attention, that’s a recipe for AI burnout right there. Many features and discussions need time to think, internalize the…
Ever since I found out about pi and gave it a shot I loved it, it “just works” and the UX is very well thought out. Some folks have even been saying it’s like “vim for agentic coding” which I’m starting to agree with. I think I first came across it before the “OpenClaw boom” when someone shared this post by its author on some social media feed and…
This picks up where DevPod: SSH-Based Devcontainers Without IDE Lock-in left off. I’ve been hacking on dev environment tooling since 2013. Ventriloquist and devstep were different takes on the same problem: I want to git clone && cd into a project to start working on it without thinking about infrastructure. Ventriloquist had you declaring platforms and services explicitly in a Vagrantfile…
Ever since I started working with Ruby back in 2009, Linux has been my home and recently I got tired. Not like, angry-tired, but more like the “sigh” of someone who’s been working around missing apps and some shit quirks for like almost 17 years. The quirks range from Internet Banking that didn’t work properly on Linux (unless I installed some .deb from someone I dunno) to…
I’ve disabled Claude Code’s Co-Authored-By setting ever since I started using Claude Code, the Claude avatar next to people’s faces on GitHub always felt wrong to me. The coding agent is a tool and I am the one responsible for what it produces and if a bug pops up in prod, Anthropic won’t be the ones on call. If you’ve never seen that in practice, this is what Claude…
A few months ago , I wrote about overcoming my fear that AI tools would make me lazy as a developer. I found Claude Code fit my terminal workflow , and I thought I’d solved the problem by doing augmented coding , not vibe coding , while still being in the “driver’s seat”. Except I wasn’t really driving that much anymore. I was writing prompts and doing what some call…
NOTE: This is Part 4 of the Modernizing my Terminal-Based Development Environment series. The Context Switching Problem Lets imagine that you’re working on a project at work and you need to do one of:
NOTE: This is Part 3 of the Modernizing my Terminal-Based Development Environment series. The Editor Setup When you SSH into a devcontainer, you have two choices: use a terminal-based editor (nvim, vim, nano) or use an IDE with remote development extensions (VS Code and others handle this pretty well). I chose Neovim with LazyVim - a preconfigured Neovim distribution with sane defaults, LSP…
NOTE: This is Part 2 of the Modernizing my Terminal-Based Development Environment series. The Setup I recently switched back to SSH-based development using DevPod for devcontainers (see DevPod post for the devcontainer setup).
NOTE: This is Part 1 of the Modernizing my Terminal-Based Development Environment series. UPDATE (March 2026): I’ve since moved away from DevPod and built crib , a smaller devcontainer runner that uses docker exec instead of SSH. Background My team uses devcontainers and they’re great for consistency - everyone gets the same Ruby version, Postgres, Chrome for system tests… It…
After over a decade as a “terminal-based developer”, I ended up using Cursor for a while when we decided to make use of devcontainers at work. This series documents how I am “returning to my roots” using modern tools like Zellij , Claude Code , and devcontainers without leaving the command line. NOTE: This is a living series. I’ll update posts as I discover new…
I was afraid AI coding tools would make me lazy as a developer. After overcoming my own resistance, I’m now becoming an AI-assisted developer who actually enjoys the process and collaborations coming out of it. The YAGNI Reality Check In my opinion, the YAGNI principle - “You Aren’t Gonna Need It” - applies to dev tools just as much as code features. I’ve never been…
A battle-tested guide to Ubuntu 24.04 desktop VMs that actually work I’m trying to get back to writing. After a long break from blogging, I’ve been tinkering with Ubuntu desktop VMs and hitting the same frustrating issues that probably drove me away from desktop virtualization years ago. But this time I stuck with it, debugged the problems (with some help from Claude Code), and figured…
As most people in tech know, “ serverless ” is the new buzzword “hotness” and lots of blog posts/books/utilities/tweets/etc. are being written about it every day. This post outlines my initial experience with serverless computing, the issues I had along the way, and some considerations in case you, like me, are thinking about giving it a try for the first time. Background…
As part of something I’ve been hacking on the side, I have a need to run a bunch of PhantomJS 2.0 containers on a Docker host. While I could’ve just built an image that includes its binary and consider it done, there is currently a need to build the phantomjs binary from sources for Linux machines . Not only that is a PITA but it also requires us to do some “juggling” to…
If you’ve been following this blog (which hasn’t been updated in a loooong time), chances are that you are likely to be a user of one of the Vagrant plugins I’ve released on the past . What you might not know is that I haven’t been using Vagrant so frequently over the last year or so and haven’t had much time to work on them to put up to the plans I originally had in…
Last week I cut the first release of notify-send-http , a tool for triggering notify-send across the network using HTTP. Useful for forwarding notifications from local VMs / Containers to your own computer. It even supports notification icons! Tested on Ubuntu 14.04 only Why? Because I do all of my dev work on virtualized environments and I use guard quite a lot to keep my Ruby tests running when…
The third release of the Devstep Docker image came out last night along with a brand new Golang CLI featuring some very nice improvements and new functionality. The CHANGELOG is here and on this post I’ll cover some exciting new stuff I was able to get in place. Docker image updates Starting with the base image updates, the 0.2.0 release dropped from 1.168GB down to 867.7MB MB representing a…
2026 Update: If you’re looking for a more robust solution these days, check out x11docker . I haven’t had a need to try it myself, but it looks like the go-to tool for this kind of thing now. I’ve been doing all of my real (paid) work on VMs / containers for a while now but when it comes to writing Java code for some projects for university I still need to move away from using…
Devstep is a relatively new project that I I’ve been working on since February 2014 and had its second release last friday. On its current state, Devstep is a dead simple, no frills development environment builder powered by Docker and the buildpack abstraction that is based around a simple (yet ambitious) goal: I want to git clone and run a single command to hack on any software project.…
lmk is a simple command line tool written in Go that I released last February. I wrote it to draw my attention to a terminal when some long command finishes running. WTF?!? Yeah, it may sound silly but how often do you run a command that you know that takes a lot of time to complete, you go do something else and forget that the command was running? Even worse, what about when you get side tracked…
2013 was the year I went 100% on Vagrant , went crazy releasing plugins (10 to be more specific) and ended becoming a Vagrant core commiter back in June. To give you an idea, this is what I’ve released over the year: vagrant-notify - Released at the end of 2012, but “matured” by beginning of 2013 vagrant-boxen (deprecated) - February 17th vagrant-lxc - March 12th vagrant-cachier…
Last week @progrium striked again with one more great example of how we should strive for keeping things simple. Five months after releasing Dokku which is a Docker powered mini- Heroku written in around 100 lines of Bash , he has just open sourced viewdocs : Easy, elegant project documentation in Markdown using Viewdocs -- Read the Docs meets Gist.io https://t.co/FIDrwPLgKc — Jeff Lindsay…
There are times that you might need / want to use a specific provider for your Vagrant boxes that differs from VirtualBox or whatever provider you have set on your VAGRANT_DEFAULT_PROVIDER environmental variable . For experienced Ruby users this might seem something trivial to do but since Vagrant’s community is made of people from many different programming languages background, I thought…
I’ve been playing a lot with Docker recently and while learning more about it I came across “Another Union File System” (AUFS) + its Copy On Write (COW) capabilities and have been pretty impressed by it. In short, by using a COW + union file system Docker makes things really cheap when it comes to disk usage. The idea of COW filesystems along with a couple GitHub issues , some…
A while ago I stumbled across this benchmark by Brandon Liu on StackMachine ’s blog comparing the numbers for performing some typical tasks on his physical machine and doing the same thing using virtual machines. The measurements were made using Discourse and compared the numbers of doing things on VirtualBox and VMware Fusion so I got curious to see how well vagrant-lxc shared folders would…
I’ve been trying to publish my Dokku Cookbook to Opscode Community since I open sourced it a couple weeks ago but didn’t have much success until last night. The initial configuration was not so straightforward to me so I thought I’d write it down in case I need to do it again. The information on this post is probably documented somewhere but I failed to find it, feel free to…
Although I’ve been writing about and working on a lot of Vagrant related stuff lately, I need to say that I’m not a “DevOps guy”. My day to day job still consists of building web apps using Ruby On Rails and even though I like using Puppet (and recently Chef), my daily work does not involve any sort of machine configuration management. Configuring a Vagrant development…
Last week I was able to release vagrant-lxc 0.5.0 and on this post you’ll get to know about some cool new stuff and the upcoming work I have in mind to reach what I believe would be a nice 1.0.0 milestone. 0.5.0 goodies This release it mostly related to the “user experience” of using the plugin. Apart from some highlights you’ll get to know below, there are a few small…
Quick update about Vundler : lots of people got confused about the plugin name because of Vim’s Vundle so we decided to rename it to Bindler . The name was originally proposed by Patrick Connolly and after seeing the pictures he pointed out (just forget about the first row ;) I thought that it’d fit nicely with a vagrant :) Please note that you’ll need to uninstall and revert…
As I said before , “next generation” vagrant-lxc boxes should simplify the process of “promoting” existing containers to base boxes. To back that up I’ve wrote a detailed step-by-step for creating an Ubuntu Precise and Debian Squeeze base boxes from an Ubuntu Host and I’m pretty sure it is possible to reuse the ideas from this post to build base boxes for / from…
UPDATE (23 JUL 2013): Vundler has been renamed to Bindler! Vagrant’s plugin “ecossystem” just keep growing and recently there has been a lot of interest on having an easy way for managing project’s specific plugin dependencies to avoid Dependency Hell and / or to reduce the amount of steps someone has to take when joining an ongoing project. There are at least 4 issues on…
So I’ve played with Docker once again and have been looking around its codebase to find out how things work over there. Even though I’ve never wrote a single line of Go , it gave me some interesting insights about LXC itself and about packing up containers which influenced heavily the “ next generation ” vagrant-lxc base boxes and the upcoming work I have in mind for the…
If you have done any kind of Puppet manifests / Chef cookbooks development using Vagrant chances are that you’ve been staring at your screen waiting for the machine to be provisioned for really long periods of time, specially when you need to destroy the VM and start over. A while ago I came across this gist which solves part of the issue by caching downloaded packages on the host machine…
UPDATE : This post is likely to be out of date, please see this post for more It’s been nearly 2 months since I open sourced my “not so pretty” initial spike and announced on Vagrant’s mailing list that I was going to work on this. By that time, Vagrant 1.1 wasn’t even released yet and it was a long way to get where it is now. Almost two weeks after…
One of the things I missed the most after going 100% on Vagrant was the ability to preview Rails apps sent mails on my browser. I got used to the awesome letter_opener gem which depends on launchy to fire up a new browser window with the email preview instead of sending. As launchy on its own wouldn’t be able to open up a browser window on the host machine from the guest box, I started to…
Last year I heard a lot about Vagrant and even though I had the chance to play with it, performance was always an issue that prevented me from doing 100% of my development work from a VM. By december, when my laptop started acting weird (and eventually died) I decided that my next computer would have as much cores and RAM that I could afford. I looked at a few different options and ended up…
Here we go again, this is another attempt to talk about my experiences on being a software developer and whatever else might cross my mind. Here I will speak either English or Portuguese which is my native language.