<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog on fabiorehm.com</title><link>https://fabiorehm.com/blog/</link><description>Recent content in Blog on fabiorehm.com</description><generator>Hugo</generator><language>en</language><copyright>&amp;copy; &lt;a href="https://github.com/fgrehm"&gt;Fabio Rehm&lt;/a&gt; 2013-2025</copyright><lastBuildDate>Sun, 12 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://fabiorehm.com/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Pi + Ollama Cloud API: Setup and First Impressions</title><link>https://fabiorehm.com/blog/2026/04/12/pi-ollama-cloud-api/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2026/04/12/pi-ollama-cloud-api/</guid><description>&lt;p&gt;Ever since I found out about &lt;a href="https://pi.dev" class="external-link" target="_blank" rel="noopener"&gt;pi&lt;/a&gt; and gave it a shot I loved it, it &amp;ldquo;just works&amp;rdquo; and the UX is very well thought out. Some folks have even been saying it&amp;rsquo;s like &lt;a href="https://www.hansschnedlitz.com/writing/2026/03/08/pi-is-vim-for-agentic-coding" class="external-link" target="_blank" rel="noopener"&gt;&amp;ldquo;vim for agentic coding&amp;rdquo;&lt;/a&gt; which I&amp;rsquo;m starting to agree with.&lt;/p&gt;
&lt;p&gt;I think I first came across it before the &amp;ldquo;OpenClaw boom&amp;rdquo; when someone shared &lt;a href="https://mariozechner.at/posts/2025-11-30-pi-coding-agent/" class="external-link" target="_blank" rel="noopener"&gt;this post&lt;/a&gt; by its author on some social media feed and last week I put some effort into making it a first class citizen in my stack.&lt;/p&gt;</description></item><item><title>crib: Just Enough Devcontainers</title><link>https://fabiorehm.com/blog/2026/03/20/crib-just-enough-devcontainers/</link><pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2026/03/20/crib-just-enough-devcontainers/</guid><description>&lt;p&gt;&lt;em&gt;This picks up where &lt;a href="https://fabiorehm.com/blog/2025/11/11/devpod-ssh-devcontainers/" &gt;DevPod: SSH-Based Devcontainers Without IDE Lock-in&lt;/a&gt; left off.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been hacking on dev environment tooling since 2013. &lt;a href="https://fabiorehm.com/blog/2013/09/11/announcing-ventriloquist/" &gt;Ventriloquist&lt;/a&gt; and &lt;a href="https://fabiorehm.com/blog/2014/08/26/devstep-development-environments-powered-by-docker-and-buildpacks/" &gt;devstep&lt;/a&gt; were different takes on the same problem: I want to &lt;code&gt;git clone &amp;amp;&amp;amp; cd&lt;/code&gt; into a project to start working on it without thinking about infrastructure. Ventriloquist had you declaring platforms and services explicitly in a Vagrantfile using a custom format with no ecosystem, devstep went the other direction with buildpack magic that auto-detected our stack. I recently built yet another one, and how it came together surprised me.&lt;/p&gt;</description></item><item><title>please-make-me-an-app, or not</title><link>https://fabiorehm.com/blog/2026/03/17/please-make-me-an-app/</link><pubDate>Tue, 17 Mar 2026 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2026/03/17/please-make-me-an-app/</guid><description>&lt;p&gt;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 &amp;ldquo;sigh&amp;rdquo; of someone who&amp;rsquo;s been working around missing apps and some &lt;del&gt;shit&lt;/del&gt; quirks for like almost 17 years.&lt;/p&gt;
&lt;p&gt;The quirks range from Internet Banking that didn&amp;rsquo;t work properly on Linux (unless I installed some &lt;code&gt;.deb&lt;/code&gt; from someone I dunno) to government sites that only worked on Windows for issuing &amp;ldquo;Notas Fiscais&amp;rdquo; (basically tax receipts I needed to file as a company). The bottom line is that for a long time people didn&amp;rsquo;t really care about Linux, the &amp;ldquo;Year of Linux on Desktop&amp;rdquo; never arrived to this day.&lt;/p&gt;</description></item><item><title>Our coding agent commits deserve better than Co-Authored-By</title><link>https://fabiorehm.com/blog/2026/03/02/our-coding-agent-commits-deserve-better-than-co-authored-by/</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2026/03/02/our-coding-agent-commits-deserve-better-than-co-authored-by/</guid><description>&lt;p&gt;I&amp;rsquo;ve &lt;a href="https://fabiorehm.com/blog/2025/08/29/afraid-ai-would-make-me-lazy/#code-attribution-ethics" &gt;disabled Claude Code&amp;rsquo;s &lt;code&gt;Co-Authored-By&lt;/code&gt; setting&lt;/a&gt; ever since I started using Claude Code, the Claude avatar next to people&amp;rsquo;s faces on GitHub always felt wrong to me. The coding agent is a tool and &lt;em&gt;I am&lt;/em&gt; the one responsible for what it produces and if a bug pops up in prod, Anthropic won&amp;rsquo;t be the ones on call.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve never seen that in practice, this is what Claude Code adds to commits it creates by default:&lt;/p&gt;</description></item><item><title>Skip the 'No AI Days' - Flip the Roles Instead</title><link>https://fabiorehm.com/blog/2025/12/01/skip-no-ai-days-flip-roles/</link><pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2025/12/01/skip-no-ai-days-flip-roles/</guid><description>&lt;p&gt;&lt;a href="https://fabiorehm.com/blog/2025/08/29/afraid-ai-would-make-me-lazy/" &gt;A few months ago&lt;/a&gt;, I wrote about overcoming my fear that AI tools would make me lazy as a developer. I found &lt;a href="https://fabiorehm.com/blog/2025/11/11/modernizing-my-terminal-based-dev-environment/" &gt;Claude Code fit my terminal workflow&lt;/a&gt;, and I thought I&amp;rsquo;d solved the problem by doing &lt;em&gt;augmented coding&lt;/em&gt;, not &lt;em&gt;vibe coding&lt;/em&gt;, while still being in the &amp;ldquo;driver&amp;rsquo;s seat&amp;rdquo;. Except I wasn&amp;rsquo;t really driving &lt;em&gt;that much&lt;/em&gt; anymore.&lt;/p&gt;
&lt;p&gt;I was writing prompts and doing what some call Spec Driven Development with &lt;a href="https://buildermethods.com/agent-os" class="external-link" target="_blank" rel="noopener"&gt;agent-os&lt;/a&gt;. I was also reviewing code properly, asking for changes, catching bugs, maintaining standards, etc. But the pattern was always the same: I&amp;rsquo;d describe what I needed, Claude would implement it, and I&amp;rsquo;d review. Rinse and repeat. I was spending most of my time reviewing code and writing prompts, but after some time I realized I was writing very little code myself (something I&amp;rsquo;ve been enjoying doing for almost 20 years now).&lt;/p&gt;</description></item><item><title>Working on Multiple Branches Without Losing My Mind</title><link>https://fabiorehm.com/blog/2025/11/27/working-on-multiple-branches-without-losing-my-mind/</link><pubDate>Thu, 27 Nov 2025 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2025/11/27/working-on-multiple-branches-without-losing-my-mind/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; This is Part 4 of the &lt;a href="https://fabiorehm.com/blog/2025/11/11/modernizing-my-terminal-based-dev-environment/" &gt;Modernizing my Terminal-Based Development Environment&lt;/a&gt; series.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="the-context-switching-problem"&gt;The Context Switching Problem
 &lt;a href="#the-context-switching-problem"&gt;
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-link" viewBox="0 0 16 16"&gt;
 &lt;path d="M6.354 5.5H4a3 3 0 0 0 0 6h3a3 3 0 0 0 2.83-4H9c-.086 0-.17.01-.25.031A2 2 0 0 1 7 10.5H4a2 2 0 1 1 0-4h1.535c.218-.376.495-.714.82-1z"/&gt;
 &lt;path d="M9 5.5a3 3 0 0 0-2.83 4h1.098A2 2 0 0 1 9 6.5h3a2 2 0 1 1 0 4h-1.535a4.02 4.02 0 0 1-.82 1H12a3 3 0 1 0 0-6H9z"/&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Lets imagine that you&amp;rsquo;re working on a project at work and you need to do one of:&lt;/p&gt;</description></item><item><title>Neovim and LazyVim for Rails Development over SSH</title><link>https://fabiorehm.com/blog/2025/11/20/neovim-lazyvim-rails-ssh/</link><pubDate>Thu, 20 Nov 2025 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2025/11/20/neovim-lazyvim-rails-ssh/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; This is Part 3 of the &lt;a href="https://fabiorehm.com/blog/2025/11/11/modernizing-my-terminal-based-dev-environment/" &gt;Modernizing my Terminal-Based Development Environment&lt;/a&gt; series.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-editor-setup"&gt;The Editor Setup
 &lt;a href="#the-editor-setup"&gt;
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-link" viewBox="0 0 16 16"&gt;
 &lt;path d="M6.354 5.5H4a3 3 0 0 0 0 6h3a3 3 0 0 0 2.83-4H9c-.086 0-.17.01-.25.031A2 2 0 0 1 7 10.5H4a2 2 0 1 1 0-4h1.535c.218-.376.495-.714.82-1z"/&gt;
 &lt;path d="M9 5.5a3 3 0 0 0-2.83 4h1.098A2 2 0 0 1 9 6.5h3a2 2 0 1 1 0 4h-1.535a4.02 4.02 0 0 1-.82 1H12a3 3 0 1 0 0-6H9z"/&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;When you SSH into a devcontainer, you have two choices: use a terminal-based editor (nvim, vim, nano) or use an IDE with &lt;a href="https://code.visualstudio.com/docs/remote/ssh" class="external-link" target="_blank" rel="noopener"&gt;remote development extensions&lt;/a&gt; (VS Code and others handle this pretty well). I chose Neovim with &lt;a href="https://www.lazyvim.org/" class="external-link" target="_blank" rel="noopener"&gt;LazyVim&lt;/a&gt; - a preconfigured Neovim distribution with sane defaults, LSP support, and a plugin ecosystem.&lt;/p&gt;</description></item><item><title>Using Zellij and Claude Code Over SSH</title><link>https://fabiorehm.com/blog/2025/11/19/using-zellij-and-claude-code-over-ssh/</link><pubDate>Wed, 19 Nov 2025 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2025/11/19/using-zellij-and-claude-code-over-ssh/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; This is Part 2 of the &lt;a href="https://fabiorehm.com/blog/2025/11/11/modernizing-my-terminal-based-dev-environment/" &gt;Modernizing my Terminal-Based Development Environment&lt;/a&gt; series.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-setup"&gt;The Setup
 &lt;a href="#the-setup"&gt;
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-link" viewBox="0 0 16 16"&gt;
 &lt;path d="M6.354 5.5H4a3 3 0 0 0 0 6h3a3 3 0 0 0 2.83-4H9c-.086 0-.17.01-.25.031A2 2 0 0 1 7 10.5H4a2 2 0 1 1 0-4h1.535c.218-.376.495-.714.82-1z"/&gt;
 &lt;path d="M9 5.5a3 3 0 0 0-2.83 4h1.098A2 2 0 0 1 9 6.5h3a2 2 0 1 1 0 4h-1.535a4.02 4.02 0 0 1-.82 1H12a3 3 0 1 0 0-6H9z"/&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I recently switched back to SSH-based development using DevPod for devcontainers (see &lt;a href="https://fabiorehm.com/blog/2025/11/11/devpod-ssh-devcontainers/" &gt;DevPod post&lt;/a&gt; for the devcontainer setup).&lt;/p&gt;</description></item><item><title>DevPod: SSH-Based Devcontainers Without IDE Lock-in</title><link>https://fabiorehm.com/blog/2025/11/11/devpod-ssh-devcontainers/</link><pubDate>Tue, 11 Nov 2025 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2025/11/11/devpod-ssh-devcontainers/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; This is Part 1 of the &lt;a href="https://fabiorehm.com/blog/2025/11/11/modernizing-my-terminal-based-dev-environment/" &gt;Modernizing my Terminal-Based Development Environment&lt;/a&gt; series.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;UPDATE (March 2026):&lt;/strong&gt; I&amp;rsquo;ve since moved away from DevPod and built &lt;a href="https://fabiorehm.com/blog/2026/03/20/crib-just-enough-devcontainers/" &gt;crib&lt;/a&gt;, a smaller devcontainer runner that uses &lt;code&gt;docker exec&lt;/code&gt; instead of SSH.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="background"&gt;Background
 &lt;a href="#background"&gt;
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-link" viewBox="0 0 16 16"&gt;
 &lt;path d="M6.354 5.5H4a3 3 0 0 0 0 6h3a3 3 0 0 0 2.83-4H9c-.086 0-.17.01-.25.031A2 2 0 0 1 7 10.5H4a2 2 0 1 1 0-4h1.535c.218-.376.495-.714.82-1z"/&gt;
 &lt;path d="M9 5.5a3 3 0 0 0-2.83 4h1.098A2 2 0 0 1 9 6.5h3a2 2 0 1 1 0 4h-1.535a4.02 4.02 0 0 1-.82 1H12a3 3 0 1 0 0-6H9z"/&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;My team uses &lt;a href="https://containers.dev/" class="external-link" target="_blank" rel="noopener"&gt;devcontainers&lt;/a&gt; and they&amp;rsquo;re great for consistency - everyone gets the same Ruby version, Postgres, Chrome for system tests&amp;hellip; It Works &amp;#x2122;&amp;#xfe0f;. New developers run one command and they&amp;rsquo;re productive.&lt;/p&gt;</description></item><item><title>Modernizing my Terminal-Based Development Environment</title><link>https://fabiorehm.com/blog/2025/11/11/modernizing-my-terminal-based-dev-environment/</link><pubDate>Tue, 11 Nov 2025 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2025/11/11/modernizing-my-terminal-based-dev-environment/</guid><description>&lt;p&gt;After over a decade as a &amp;ldquo;terminal-based developer&amp;rdquo;, I ended up using Cursor for a while when we decided to make use of devcontainers at work. This series documents how I am &amp;ldquo;returning to my roots&amp;rdquo; using modern tools like &lt;a href="https://zellij.dev/" class="external-link" target="_blank" rel="noopener"&gt;Zellij&lt;/a&gt;, &lt;a href="https://claude.com/product/claude-code" class="external-link" target="_blank" rel="noopener"&gt;Claude Code&lt;/a&gt;, and devcontainers without leaving the command line.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; This is a living series. I&amp;rsquo;ll update posts as I discover new patterns, gotchas, and solutions. New posts may be added as the workflow evolves.&lt;/p&gt;</description></item><item><title>I Was Afraid AI Would Make Me Lazy (Turns Out It Just Helped Me Move Forward)</title><link>https://fabiorehm.com/blog/2025/08/29/afraid-ai-would-make-me-lazy/</link><pubDate>Fri, 29 Aug 2025 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2025/08/29/afraid-ai-would-make-me-lazy/</guid><description>&lt;p&gt;I was afraid AI coding tools would make me lazy as a developer. After overcoming my own resistance, I&amp;rsquo;m now becoming an AI-assisted developer who actually enjoys the process and collaborations coming out of it.&lt;/p&gt;
&lt;h2 id="the-yagni-reality-check"&gt;The YAGNI Reality Check
 &lt;a href="#the-yagni-reality-check"&gt;
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-link" viewBox="0 0 16 16"&gt;
 &lt;path d="M6.354 5.5H4a3 3 0 0 0 0 6h3a3 3 0 0 0 2.83-4H9c-.086 0-.17.01-.25.031A2 2 0 0 1 7 10.5H4a2 2 0 1 1 0-4h1.535c.218-.376.495-.714.82-1z"/&gt;
 &lt;path d="M9 5.5a3 3 0 0 0-2.83 4h1.098A2 2 0 0 1 9 6.5h3a2 2 0 1 1 0 4h-1.535a4.02 4.02 0 0 1-.82 1H12a3 3 0 1 0 0-6H9z"/&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;In my opinion, the &lt;a href="https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it" class="external-link" target="_blank" rel="noopener"&gt;YAGNI principle&lt;/a&gt; - &amp;ldquo;You Aren&amp;rsquo;t Gonna Need It&amp;rdquo; - applies to dev tools just as much as code features. I&amp;rsquo;ve never been one to jump on every shiny new tool that promises to &amp;ldquo;revolutionize development.&amp;rdquo; In my almost 20-year career &amp;ldquo;working with computers&amp;rdquo;, I&amp;rsquo;ve seen many revolutionary tools / frameworks disappear after a short period of time, I&amp;rsquo;ve lived through the hype cycles of countless &amp;ldquo;game-changing&amp;rdquo; tools so AI coding tools felt just like another one of those. I remember when GitHub Copilot came out in 2021 and ChatGPT launched in late 2022, a lot of people got excited about them.&lt;/p&gt;</description></item><item><title>Getting a Bulletproof Desktop Environment with Vagrant and VirtualBox</title><link>https://fabiorehm.com/blog/2025/08/25/bulletproof-ubuntu-desktop-vagrant-virtualbox/</link><pubDate>Mon, 25 Aug 2025 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2025/08/25/bulletproof-ubuntu-desktop-vagrant-virtualbox/</guid><description>&lt;p&gt;&lt;em&gt;A battle-tested guide to Ubuntu 24.04 desktop VMs that actually work&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m trying to get back to writing. After a long break from blogging, I&amp;rsquo;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 out what actually works.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The Problem
 &lt;a href="#the-problem"&gt;
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-link" viewBox="0 0 16 16"&gt;
 &lt;path d="M6.354 5.5H4a3 3 0 0 0 0 6h3a3 3 0 0 0 2.83-4H9c-.086 0-.17.01-.25.031A2 2 0 0 1 7 10.5H4a2 2 0 1 1 0-4h1.535c.218-.376.495-.714.82-1z"/&gt;
 &lt;path d="M9 5.5a3 3 0 0 0-2.83 4h1.098A2 2 0 0 1 9 6.5h3a2 2 0 1 1 0 4h-1.535a4.02 4.02 0 0 1-.82 1H12a3 3 0 1 0 0-6H9z"/&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Setting up a reliable Ubuntu desktop environment in VirtualBox is harder than it should be. Most tutorials leave you with:&lt;/p&gt;</description></item><item><title>Adventures in Serverless Land to Support a Fight Against Corruption</title><link>https://fabiorehm.com/blog/2017/12/08/adventures-in-serverless-land-to-support-a-fight-against-corruption/</link><pubDate>Fri, 08 Dec 2017 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2017/12/08/adventures-in-serverless-land-to-support-a-fight-against-corruption/</guid><description>&lt;p&gt;As most people in tech know,
&amp;ldquo;&lt;a href="https://www.martinfowler.com/articles/serverless.html" class="external-link" target="_blank" rel="noopener"&gt;serverless&lt;/a&gt;&amp;rdquo; is the new
&lt;del&gt;buzzword&lt;/del&gt; &amp;ldquo;hotness&amp;rdquo; 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.&lt;/p&gt;
&lt;h2 id="background"&gt;Background
 &lt;a href="#background"&gt;
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-link" viewBox="0 0 16 16"&gt;
 &lt;path d="M6.354 5.5H4a3 3 0 0 0 0 6h3a3 3 0 0 0 2.83-4H9c-.086 0-.17.01-.25.031A2 2 0 0 1 7 10.5H4a2 2 0 1 1 0-4h1.535c.218-.376.495-.714.82-1z"/&gt;
 &lt;path d="M9 5.5a3 3 0 0 0-2.83 4h1.098A2 2 0 0 1 9 6.5h3a2 2 0 1 1 0 4h-1.535a4.02 4.02 0 0 1-.82 1H12a3 3 0 1 0 0-6H9z"/&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Not many people outside of Brazil might&amp;rsquo;ve heard about the &lt;a href="https://serenata.ai/en/" class="external-link" target="_blank" rel="noopener"&gt;Serenata de
Amor&lt;/a&gt; project, but it&amp;rsquo;s making a lot of noise on
this side of the globe. Operação Serenata de Amor is an artificial intelligence
and data science project that aims to inform the general public about government
corruption and spending (more info can be found at the project&amp;rsquo;s website and
this nice podcast at &lt;a href="https://changelog.com/podcast/268" class="external-link" target="_blank" rel="noopener"&gt;The Changelog&lt;/a&gt;).&lt;/p&gt;</description></item><item><title>Building a minimum viable PhantomJS 2 Docker image</title><link>https://fabiorehm.com/blog/2015/07/22/building-a-minimum-viable-phantomjs2-docker-image/</link><pubDate>Wed, 22 Jul 2015 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2015/07/22/building-a-minimum-viable-phantomjs2-docker-image/</guid><description>&lt;p&gt;As part of something I&amp;rsquo;ve been hacking on the side, I have a need to run a bunch of
&lt;a href="http://phantomjs.org/" class="external-link" target="_blank" rel="noopener"&gt;PhantomJS&lt;/a&gt; 2.0 containers on a Docker host. While I could&amp;rsquo;ve just
built an image that includes its binary and consider it done, there is currently &lt;a href="https://github.com/ariya/phantomjs/issues/12948" class="external-link" target="_blank" rel="noopener"&gt;a need
to build the phantomjs binary from sources for Linux machines&lt;/a&gt;.
Not only that is a PITA but it also requires us to do some &amp;ldquo;juggling&amp;rdquo; to clean up build-time
dependencies and it still produces a somewhat large Docker image as a result (something in
the ~400mb).&lt;/p&gt;</description></item><item><title>Quick update about some Vagrant plugins</title><link>https://fabiorehm.com/blog/2015/07/21/quick-update-about-some-vagrant-plugins/</link><pubDate>Tue, 21 Jul 2015 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2015/07/21/quick-update-about-some-vagrant-plugins/</guid><description>&lt;p&gt;If you&amp;rsquo;ve been following this blog (which hasn&amp;rsquo;t been updated in a loooong time),
chances are that you are likely to be a user of one of the &lt;a href="https://www.vagrantup.com/" class="external-link" target="_blank" rel="noopener"&gt;Vagrant&lt;/a&gt;
plugins &lt;a href="https://fabiorehm.com/blog/2013/12/12/so-i-released-a-lot-of-vagrant-plugins-now-what-s-next/" &gt;I&amp;rsquo;ve released on the past&lt;/a&gt;.
What you might not know is that I haven&amp;rsquo;t been using Vagrant so frequently over
the last year or so and haven&amp;rsquo;t had much time to work on them to put up to the plans
I originally had in mind.&lt;/p&gt;</description></item><item><title>Trigger notify-send across the network using HTTP</title><link>https://fabiorehm.com/blog/2014/10/12/trigger-notify-send-across-the-network-using-http/</link><pubDate>Sun, 12 Oct 2014 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2014/10/12/trigger-notify-send-across-the-network-using-http/</guid><description>&lt;p&gt;Last week I cut the first release of &lt;a href="https://github.com/fgrehm/notify-send-http" class="external-link" target="_blank" rel="noopener"&gt;notify-send-http&lt;/a&gt;,
a tool for triggering &lt;code&gt;notify-send&lt;/code&gt; across the network using HTTP. Useful for
forwarding notifications from local VMs / Containers to your own computer. It
even supports notification icons!&lt;/p&gt;
&lt;p&gt;&lt;img src="http://i.imgur.com/51hGcuW.png" alt="demo"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Tested on Ubuntu 14.04 only&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="why"&gt;Why?
 &lt;a href="#why"&gt;
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-link" viewBox="0 0 16 16"&gt;
 &lt;path d="M6.354 5.5H4a3 3 0 0 0 0 6h3a3 3 0 0 0 2.83-4H9c-.086 0-.17.01-.25.031A2 2 0 0 1 7 10.5H4a2 2 0 1 1 0-4h1.535c.218-.376.495-.714.82-1z"/&gt;
 &lt;path d="M9 5.5a3 3 0 0 0-2.83 4h1.098A2 2 0 0 1 9 6.5h3a2 2 0 1 1 0 4h-1.535a4.02 4.02 0 0 1-.82 1H12a3 3 0 1 0 0-6H9z"/&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Because I do all of my dev work on virtualized environments and I use &lt;a href="https://github.com/guard/guard/" class="external-link" target="_blank" rel="noopener"&gt;guard&lt;/a&gt;
quite a lot to keep my Ruby tests running when files get changed. The problem is
that its builtin notification support will trigger a &lt;code&gt;notify-send&lt;/code&gt; inside the virtual
environment instead of my machine.&lt;/p&gt;</description></item><item><title>Devstep updates</title><link>https://fabiorehm.com/blog/2014/09/25/devstep-updates/</link><pubDate>Thu, 25 Sep 2014 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2014/09/25/devstep-updates/</guid><description>&lt;p&gt;The third release of the &lt;a href="http://fgrehm.viewdocs.io/devstep" class="external-link" target="_blank" rel="noopener"&gt;Devstep&lt;/a&gt; Docker image
came out last night along with a brand new Golang CLI featuring some very nice
improvements and new functionality. The CHANGELOG is &lt;a href="https://github.com/fgrehm/devstep/releases/tag/v0.2.0" class="external-link" target="_blank" rel="noopener"&gt;here&lt;/a&gt;
and on this post I&amp;rsquo;ll cover some exciting new stuff I was able to get in place.&lt;/p&gt;
&lt;h2 id="docker-image-updates"&gt;Docker image updates
 &lt;a href="#docker-image-updates"&gt;
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-link" viewBox="0 0 16 16"&gt;
 &lt;path d="M6.354 5.5H4a3 3 0 0 0 0 6h3a3 3 0 0 0 2.83-4H9c-.086 0-.17.01-.25.031A2 2 0 0 1 7 10.5H4a2 2 0 1 1 0-4h1.535c.218-.376.495-.714.82-1z"/&gt;
 &lt;path d="M9 5.5a3 3 0 0 0-2.83 4h1.098A2 2 0 0 1 9 6.5h3a2 2 0 1 1 0 4h-1.535a4.02 4.02 0 0 1-.82 1H12a3 3 0 1 0 0-6H9z"/&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Starting with the base image updates, the 0.2.0 release dropped from &lt;code&gt;1.168GB&lt;/code&gt; down to &lt;code&gt;867.7MB&lt;/code&gt; MB
representing a &lt;code&gt;~25%&lt;/code&gt; reduction on disk usage. This is a big win for those who live short on disk space
like me and you can expect it to shrink even more on upcoming releases. If you are interested on
updates about that, keep an eye on &lt;a href="https://github.com/fgrehm/devstep/issues/62" class="external-link" target="_blank" rel="noopener"&gt;GH-62&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Running GUI apps with Docker</title><link>https://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/</link><pubDate>Thu, 11 Sep 2014 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2026 Update:&lt;/strong&gt; If you&amp;rsquo;re looking for a more robust solution these days, check out &lt;a href="https://github.com/mviereck/x11docker" class="external-link" target="_blank" rel="noopener"&gt;x11docker&lt;/a&gt;. I haven&amp;rsquo;t had a need to try it myself, but it looks like the go-to tool for this kind of thing now.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;rsquo;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 vim and install some full blown IDE in order to be
productive. This has been bothering me for quite some time but this week I
was finally able put the pieces together to run NetBeans in a Docker container so that I can avoid
installing a lot of Java stuff on my machine that I don&amp;rsquo;t use on a daily basis.&lt;/p&gt;</description></item><item><title>Devstep: Development environments powered by Docker and Buildpacks</title><link>https://fabiorehm.com/blog/2014/08/26/devstep-development-environments-powered-by-docker-and-buildpacks/</link><pubDate>Tue, 26 Aug 2014 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2014/08/26/devstep-development-environments-powered-by-docker-and-buildpacks/</guid><description>&lt;p&gt;&lt;a href="http://fgrehm.viewdocs.io/devstep" class="external-link" target="_blank" rel="noopener"&gt;Devstep&lt;/a&gt; is a relatively new project that I
I&amp;rsquo;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 &lt;a href="https://www.docker.com/" class="external-link" target="_blank" rel="noopener"&gt;Docker&lt;/a&gt; and the &lt;a href="https://devcenter.heroku.com/articles/buildpacks" class="external-link" target="_blank" rel="noopener"&gt;buildpack&lt;/a&gt;
abstraction that is based around a simple (yet ambitious) goal:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I want to git clone and run a single command to hack on any software project.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Intrigued? Check out the demo below of my &amp;ldquo;canonical &lt;a href="http://www.discourse.org/" class="external-link" target="_blank" rel="noopener"&gt;Discourse&lt;/a&gt;
example&amp;rdquo; and read on for more.&lt;/p&gt;</description></item><item><title>Get notified of long running CLI tasks completion with 'lmk'</title><link>https://fabiorehm.com/blog/2014/08/09/get-notified-of-long-running-cli-tasks-completion-with-lmk/</link><pubDate>Sat, 09 Aug 2014 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2014/08/09/get-notified-of-long-running-cli-tasks-completion-with-lmk/</guid><description>&lt;p&gt;&lt;code&gt;lmk&lt;/code&gt; is a simple &lt;a href="https://github.com/fgrehm/lmk" class="external-link" target="_blank" rel="noopener"&gt;command line tool written in Go&lt;/a&gt;
that I released last February. I wrote it to draw my attention to a terminal when
some long command finishes running.&lt;/p&gt;
&lt;h2 id="wtf"&gt;WTF?!?
 &lt;a href="#wtf"&gt;
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-link" viewBox="0 0 16 16"&gt;
 &lt;path d="M6.354 5.5H4a3 3 0 0 0 0 6h3a3 3 0 0 0 2.83-4H9c-.086 0-.17.01-.25.031A2 2 0 0 1 7 10.5H4a2 2 0 1 1 0-4h1.535c.218-.376.495-.714.82-1z"/&gt;
 &lt;path d="M9 5.5a3 3 0 0 0-2.83 4h1.098A2 2 0 0 1 9 6.5h3a2 2 0 1 1 0 4h-1.535a4.02 4.02 0 0 1-.82 1H12a3 3 0 1 0 0-6H9z"/&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;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 for a bit
longer than you should and when you Alt+Tab to check if the command has finished
it actually errored along the way?&lt;/p&gt;</description></item><item><title>So I released a lot of Vagrant plugins... Now what's next?</title><link>https://fabiorehm.com/blog/2013/12/12/so-i-released-a-lot-of-vagrant-plugins-now-what-s-next/</link><pubDate>Thu, 12 Dec 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/12/12/so-i-released-a-lot-of-vagrant-plugins-now-what-s-next/</guid><description>&lt;p&gt;2013 was the year I &lt;a href="https://fabiorehm.com/blog/2013/01/17/100-percent-on-vagrant" &gt;went 100% on Vagrant&lt;/a&gt;,
went crazy releasing plugins (10 to be more specific) and ended &lt;a href="https://groups.google.com/d/msg/vagrant-up/sAnsUdp4r7s/_jzhosAPgQsJ" class="external-link" target="_blank" rel="noopener"&gt;becoming a Vagrant core commiter&lt;/a&gt;
back in June. To give you an idea, this is what I&amp;rsquo;ve released over the year:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/fgrehm/vagrant-notify" class="external-link" target="_blank" rel="noopener"&gt;vagrant-notify&lt;/a&gt; - Released at the end of 2012, but &amp;ldquo;matured&amp;rdquo; by beginning of 2013&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fgrehm/vagrant-boxen" class="external-link" target="_blank" rel="noopener"&gt;vagrant-boxen&lt;/a&gt; &lt;strong&gt;(deprecated)&lt;/strong&gt; - February 17th&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fgrehm/vagrant-lxc" class="external-link" target="_blank" rel="noopener"&gt;vagrant-lxc&lt;/a&gt; - March 12th&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fgrehm/vagrant-cachier" class="external-link" target="_blank" rel="noopener"&gt;vagrant-cachier&lt;/a&gt; - May 22nd&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fgrehm/vagrant-pristine" class="external-link" target="_blank" rel="noopener"&gt;vagrant-pristine&lt;/a&gt; &lt;strong&gt;(deprecated)&lt;/strong&gt; - July 11th&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fgrehm/bindler" class="external-link" target="_blank" rel="noopener"&gt;bindler&lt;/a&gt; - &lt;strong&gt;(deprecated)&lt;/strong&gt; Public release on July 15th as Vundler and later renamed to Bindler&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fgrehm/vagrant-global-status" class="external-link" target="_blank" rel="noopener"&gt;vagrant-global-status&lt;/a&gt; &lt;strong&gt;(deprecated)&lt;/strong&gt; - August 8th&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fgrehm/vocker" class="external-link" target="_blank" rel="noopener"&gt;vocker&lt;/a&gt; &lt;strong&gt;(deprecated)&lt;/strong&gt; - August 14th&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fgrehm/ventriloquist" class="external-link" target="_blank" rel="noopener"&gt;ventriloquist&lt;/a&gt; &lt;strong&gt;(deprecated)&lt;/strong&gt; - September 10th&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fgrehm/docker-provider" class="external-link" target="_blank" rel="noopener"&gt;docker-provider&lt;/a&gt; &lt;strong&gt;(deprecated)&lt;/strong&gt; - November 5th&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Before you think I&amp;rsquo;m going nuts, I have a reason behind releasing each plugin and
I might blog about that someday but for the scope of this post
I&amp;rsquo;ll focus on what you should expect for each one of them over 2014.&lt;/p&gt;</description></item><item><title>Meet Viewdocs</title><link>https://fabiorehm.com/blog/2013/11/12/meet-viewdocs/</link><pubDate>Tue, 12 Nov 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/11/12/meet-viewdocs/</guid><description>&lt;p&gt;Last week &lt;a href="https://twitter.com/progrium" class="external-link" target="_blank" rel="noopener"&gt;@progrium&lt;/a&gt; striked again with one more
great example of how we should strive for keeping things simple. Five months after
releasing &lt;a href="http://progrium.com/blog/2013/06/19/dokku-the-smallest-paas-implementation-youve-ever-seen" class="external-link" target="_blank" rel="noopener"&gt;Dokku&lt;/a&gt;
which is a &lt;a href="http://www.docker.io/" class="external-link" target="_blank" rel="noopener"&gt;Docker&lt;/a&gt; powered mini-&lt;a href="https://www.heroku.com/" class="external-link" target="_blank" rel="noopener"&gt;Heroku&lt;/a&gt;
written in around &lt;strong&gt;100 lines of Bash&lt;/strong&gt;, he has just open sourced &lt;a href="http://viewdocs.io/" class="external-link" target="_blank" rel="noopener"&gt;viewdocs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote class="twitter-tweet"&gt;&lt;p&gt;Easy, elegant project documentation in Markdown using Viewdocs -- Read the Docs meets Gist.io &lt;a href="https://t.co/FIDrwPLgKc"&gt;https://t.co/FIDrwPLgKc&lt;/a&gt;&lt;/p&gt;&amp;mdash; Jeff Lindsay (@progrium) &lt;a href="https://twitter.com/progrium/statuses/399734531592171520"&gt;November 11, 2013&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;p&gt;As with Dokku, the project is pretty small and (as of this writing) converts
&lt;strong&gt;~200 lines of Golang code&lt;/strong&gt; into a powerful tool for small to medium sized
open source projects hosted on GitHub. Viewdocs combines the &lt;em&gt;dynamics&lt;/em&gt; of
&lt;a href="https://readthedocs.org/" class="external-link" target="_blank" rel="noopener"&gt;Read the Docs&lt;/a&gt; and the &lt;em&gt;simplicity&lt;/em&gt; of
&lt;a href="http://gist.io/" class="external-link" target="_blank" rel="noopener"&gt;Gist.io&lt;/a&gt; by rendering &lt;a href="http://daringfireball.net/projects/markdown/" class="external-link" target="_blank" rel="noopener"&gt;Markdown&lt;/a&gt;
on the fly from your repository&amp;rsquo;s &lt;code&gt;docs&lt;/code&gt; directory as &lt;em&gt;simple static pages&lt;/em&gt;.
It even supports custom layouts and rendering specific &lt;a href="http://git-scm.com/book/en/Git-Internals-Git-References" class="external-link" target="_blank" rel="noopener"&gt;git references&lt;/a&gt;
(like a tag, branch or a specific commit). How cool is that? :)&lt;/p&gt;</description></item><item><title>Set the default Vagrant provider from your Vagrantfile</title><link>https://fabiorehm.com/blog/2013/11/12/set-the-default-vagrant-provider-from-your-vagrantfile/</link><pubDate>Tue, 12 Nov 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/11/12/set-the-default-vagrant-provider-from-your-vagrantfile/</guid><description>&lt;p&gt;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 &lt;a href="http://docs.vagrantup.com/v2/providers/default.html" class="external-link" target="_blank" rel="noopener"&gt;&lt;code&gt;VAGRANT_DEFAULT_PROVIDER&lt;/code&gt; environmental variable&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For experienced Ruby users this might seem something trivial to do but since
Vagrant&amp;rsquo;s community is made of people from many different programming languages
background, I thought it would be nice to share this little trick I find useful
when I need to make sure the VMs goes up with the right provider.&lt;/p&gt;</description></item><item><title>Getting to know BTRFS</title><link>https://fabiorehm.com/blog/2013/10/15/getting-to-know-btrfs/</link><pubDate>Tue, 15 Oct 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/10/15/getting-to-know-btrfs/</guid><description>&lt;p&gt;I&amp;rsquo;ve been playing a lot with &lt;a href="http://docker.io" class="external-link" target="_blank" rel="noopener"&gt;Docker&lt;/a&gt; recently and while learning
&lt;a href="http://docs.docker.io/en/latest/terms/layer/#layers" class="external-link" target="_blank" rel="noopener"&gt;more about it&lt;/a&gt; I came across
&lt;a href="http://aufs.sourceforge.net/aufs.html" class="external-link" target="_blank" rel="noopener"&gt;&amp;ldquo;Another Union File System&amp;rdquo;&lt;/a&gt; (AUFS) + its
&lt;a href="http://en.wikipedia.org/wiki/Copy-on-write" class="external-link" target="_blank" rel="noopener"&gt;Copy On Write&lt;/a&gt; (COW) capabilities and have
been pretty impressed by it. In short, by using a COW + &lt;a href="http://en.wikipedia.org/wiki/Union_mount" class="external-link" target="_blank" rel="noopener"&gt;union file system&lt;/a&gt;
Docker makes things &lt;em&gt;really cheap&lt;/em&gt; when it comes to disk usage.&lt;/p&gt;
&lt;p&gt;The idea of COW filesystems along with &lt;a href="https://github.com/dotcloud/docker/issues/443" class="external-link" target="_blank" rel="noopener"&gt;a couple&lt;/a&gt;
&lt;a href="https://github.com/fgrehm/vagrant-lxc/issues/81" class="external-link" target="_blank" rel="noopener"&gt;GitHub issues&lt;/a&gt;, some tweets
exchanged with &lt;a href="https://twitter.com/rcarmo" class="external-link" target="_blank" rel="noopener"&gt;@rcarmo&lt;/a&gt; and &lt;a href="http://s3hh.wordpress.com/2013/05/02/lxc-improved-clone-support/" class="external-link" target="_blank" rel="noopener"&gt;this post&lt;/a&gt;
on improvements made on &lt;code&gt;lxc-clone&lt;/code&gt; was enough to trigger my interest on &lt;a href="https://btrfs.wiki.kernel.org/index.php/Main_Page" class="external-link" target="_blank" rel="noopener"&gt;BTRFS&lt;/a&gt;
and I went out to learn more about it.&lt;/p&gt;</description></item><item><title>Ventriloquist demo</title><link>https://fabiorehm.com/blog/2013/10/13/ventriloquist-demo/</link><pubDate>Sun, 13 Oct 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/10/13/ventriloquist-demo/</guid><description>&lt;p&gt;A while ago I stumbled across &lt;a href="https://www.stackmachine.com/blog/web-development-on-a-vm-is-it-slower" class="external-link" target="_blank" rel="noopener"&gt;this benchmark&lt;/a&gt;
by Brandon Liu on &lt;a href="https://www.stackmachine.com" class="external-link" target="_blank" rel="noopener"&gt;StackMachine&lt;/a&gt;&amp;rsquo;s blog comparing
the numbers for performing some typical tasks on his physical machine and doing
the same thing using virtual machines.&lt;/p&gt;
&lt;p&gt;The measurements &lt;a href="https://www.stackmachine.com/blog/web-development-on-a-vm-is-it-slower#test_setup" class="external-link" target="_blank" rel="noopener"&gt;were made&lt;/a&gt;
using &lt;a href="https://github.com/discourse/discourse" class="external-link" target="_blank" rel="noopener"&gt;Discourse&lt;/a&gt; and compared the numbers
of doing things on VirtualBox and VMware Fusion so I &lt;a href="https://twitter.com/fgrehm/status/359445585738211330" class="external-link" target="_blank" rel="noopener"&gt;got curious&lt;/a&gt;
to see how well &lt;a href="https://github.com/fgrehm/vagrant-lxc" class="external-link" target="_blank" rel="noopener"&gt;vagrant-lxc&lt;/a&gt; shared folders
would perform. What I ended up finding is that it seems that Discourse provides a
base box that was configured &lt;a href="https://github.com/discourse/discourse/blob/master/docs/DEVELOPER-ADVANCED.md#building-your-own-vagrant-vm" class="external-link" target="_blank" rel="noopener"&gt;by hand&lt;/a&gt;
and the Chef cookbooks &lt;a href="https://github.com/discourse/discourse/blob/aca567b4d7b9a7a654e12a5de35bee7d9c36e881/Vagrantfile#L37-L48" class="external-link" target="_blank" rel="noopener"&gt;used&lt;/a&gt;
only deal with &lt;a href="https://github.com/discourse/discourse/blob/aca567b4d7b9a7a654e12a5de35bee7d9c36e881/chef/cookbooks/discourse/recipes/default.rb" class="external-link" target="_blank" rel="noopener"&gt;some basic stuff&lt;/a&gt;
and I&amp;rsquo;d have to either do things by hand or write some provisioning scripts on
my own.&lt;/p&gt;</description></item><item><title>Sharing Chef Cookbooks</title><link>https://fabiorehm.com/blog/2013/10/01/sharing-chef-cookbooks/</link><pubDate>Tue, 01 Oct 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/10/01/sharing-chef-cookbooks/</guid><description>&lt;p&gt;I&amp;rsquo;ve been trying to publish my &lt;a href="https://github.com/progrium/dokku" class="external-link" target="_blank" rel="noopener"&gt;Dokku&lt;/a&gt; Cookbook
to &lt;a href="http://www.opscode.com/community/" class="external-link" target="_blank" rel="noopener"&gt;Opscode Community&lt;/a&gt; since I &lt;a href="https://github.com/fgrehm/chef-dokku" class="external-link" target="_blank" rel="noopener"&gt;open sourced it&lt;/a&gt;
a couple weeks ago but didn&amp;rsquo;t have much success until last night. The initial
configuration was not so straightforward to me so I thought I&amp;rsquo;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 comment with links to official docs
or other blog posts related :)&lt;/p&gt;</description></item><item><title>Announcing Ventriloquist</title><link>https://fabiorehm.com/blog/2013/09/11/announcing-ventriloquist/</link><pubDate>Wed, 11 Sep 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/09/11/announcing-ventriloquist/</guid><description>&lt;p&gt;Although I&amp;rsquo;ve been writing about and working on a lot of Vagrant related stuff
lately, I need to say that I&amp;rsquo;m not a &amp;ldquo;DevOps guy&amp;rdquo;. 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.&lt;/p&gt;
&lt;p&gt;Configuring a Vagrant development environment is not an easy task. As an example,
the &amp;ldquo;default stack&amp;rdquo; of the Rails apps I&amp;rsquo;ve been working on consists on &lt;a href="https://github.com/fgrehm/rails-base-box#vagrant-12-base-box-for-working-with-rails" class="external-link" target="_blank" rel="noopener"&gt;quite a few components&lt;/a&gt;
and getting the provisioning scripts / manifests / recipes right is not a trivial
task for many people (myself included). I know there are a lot of modules /
cookbooks available out there but in my opinion having to know that they exist
and learning how to wire them up together shouldn&amp;rsquo;t be a &lt;em&gt;requirement&lt;/em&gt; for
&lt;strong&gt;developers&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>vagrant-lxc 0.5.0 and beyond</title><link>https://fabiorehm.com/blog/2013/08/07/vagrant-lxc-0-5-0-and-beyond/</link><pubDate>Wed, 07 Aug 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/08/07/vagrant-lxc-0-5-0-and-beyond/</guid><description>&lt;p&gt;Last week I was able to release vagrant-lxc 0.5.0 and on this post you&amp;rsquo;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.&lt;/p&gt;
&lt;h2 id="050-goodies"&gt;0.5.0 goodies
 &lt;a href="#050-goodies"&gt;
 &lt;svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-link" viewBox="0 0 16 16"&gt;
 &lt;path d="M6.354 5.5H4a3 3 0 0 0 0 6h3a3 3 0 0 0 2.83-4H9c-.086 0-.17.01-.25.031A2 2 0 0 1 7 10.5H4a2 2 0 1 1 0-4h1.535c.218-.376.495-.714.82-1z"/&gt;
 &lt;path d="M9 5.5a3 3 0 0 0-2.83 4h1.098A2 2 0 0 1 9 6.5h3a2 2 0 1 1 0 4h-1.535a4.02 4.02 0 0 1-.82 1H12a3 3 0 1 0 0-6H9z"/&gt;
 &lt;/svg&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;This release it mostly related to the &amp;ldquo;user experience&amp;rdquo; of using the plugin. Apart
from some highlights you&amp;rsquo;ll get to know below, there are a few small things that
makes people&amp;rsquo;s lives a bit easier:&lt;/p&gt;</description></item><item><title>Vundler is now Bindler!</title><link>https://fabiorehm.com/blog/2013/07/23/vundler-is-now-bindler/</link><pubDate>Tue, 23 Jul 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/07/23/vundler-is-now-bindler/</guid><description>&lt;p&gt;Quick update about &lt;a href="https://fabiorehm.com/blog/2013/07/15/vundler-dead-easy-plugin-management-for-vagrant" &gt;Vundler&lt;/a&gt;:
lots of people got confused about the plugin name because of &lt;a href="https://github.com/gmarik/vundle" class="external-link" target="_blank" rel="noopener"&gt;Vim&amp;rsquo;s Vundle&lt;/a&gt;
so we decided to rename it to &lt;em&gt;Bindler&lt;/em&gt;. The name was originally &lt;a href="https://github.com/mitchellh/vagrant/issues/1789#issuecomment-21018873" class="external-link" target="_blank" rel="noopener"&gt;proposed&lt;/a&gt;
by &lt;a href="https://github.com/patcon" class="external-link" target="_blank" rel="noopener"&gt;Patrick Connolly&lt;/a&gt; and after seeing the pictures
&lt;a href="https://www.google.ca/search?q=bindle&amp;amp;tbm=isch" class="external-link" target="_blank" rel="noopener"&gt;he pointed out&lt;/a&gt; (just forget
about the first row ;) I thought that it&amp;rsquo;d fit nicely with a vagrant :)&lt;/p&gt;
&lt;p&gt;Please note that you&amp;rsquo;ll need to &lt;a href="https://github.com/fgrehm/bindler#notice" class="external-link" target="_blank" rel="noopener"&gt;uninstall and revert&lt;/a&gt;
Vundler&amp;rsquo;s installation before upgrading to Bindler. Vundler wasn&amp;rsquo;t even &lt;code&gt;0.1.0&lt;/code&gt;
and is still highly experimental so I decided not to worry about keeping it
backwards compatible.&lt;/p&gt;</description></item><item><title>Crafting your own vagrant-lxc base box</title><link>https://fabiorehm.com/blog/2013/07/18/crafting-your-own-vagrant-lxc-base-box/</link><pubDate>Thu, 18 Jul 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/07/18/crafting-your-own-vagrant-lxc-base-box/</guid><description>&lt;p&gt;As I &lt;a href="https://fabiorehm.com/blog/2013/06/10/improving-vagrant-lxc-boxes/" &gt;said before&lt;/a&gt;, &amp;ldquo;next generation&amp;rdquo;
&lt;a href="https://github.com/fgrehm/vagrant-lxc" class="external-link" target="_blank" rel="noopener"&gt;vagrant-lxc&lt;/a&gt; boxes should simplify the process
of &amp;ldquo;promoting&amp;rdquo; existing containers to base boxes. To back that up I&amp;rsquo;ve wrote
a detailed step-by-step for creating an Ubuntu Precise and Debian Squeeze base boxes
from an Ubuntu Host and I&amp;rsquo;m pretty sure it is possible to reuse the ideas from this
post to build base boxes for / from other distros that suits everyone&amp;rsquo;s needs.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve followed the steps on an Ubuntu 12.10 VirtualBox VM and if you want to follow
along you might want to grab yourself a copy of the same &lt;a href="https://gist.github.com/fgrehm/b07c6370a710be622807#file-ubuntu-host-rb" class="external-link" target="_blank" rel="noopener"&gt;Vagrantfile&lt;/a&gt;
I used and fire it up with &lt;code&gt;vagrant up --provider=virtualbox&lt;/code&gt;. I&amp;rsquo;m also assuming
that you&amp;rsquo;ll follow each step within the same shell session as we&amp;rsquo;ll be reusing
some variables between steps.&lt;/p&gt;</description></item><item><title>Vundler: Dead easy plugin management for Vagrant</title><link>https://fabiorehm.com/blog/2013/07/15/vundler-dead-easy-plugin-management-for-vagrant/</link><pubDate>Mon, 15 Jul 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/07/15/vundler-dead-easy-plugin-management-for-vagrant/</guid><description>&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt; (23 JUL 2013): Vundler has been &lt;a href="https://fabiorehm.com/blog/2013/07/23/vundler-is-now-bindler" &gt;renamed&lt;/a&gt;
to Bindler!&lt;/p&gt;
&lt;p&gt;Vagrant&amp;rsquo;s plugin &amp;ldquo;ecossystem&amp;rdquo; just keep growing and recently there has been a
lot of interest on having an easy way for managing project&amp;rsquo;s specific plugin
dependencies to avoid &lt;a href="http://en.wikipedia.org/wiki/Dependency_hell" class="external-link" target="_blank" rel="noopener"&gt;Dependency Hell&lt;/a&gt;
and / or to reduce the amount of steps someone has to take when joining an
ongoing project. There are at least 4 issues on Vagrant&amp;rsquo;s issue tracker (&lt;a href="https://github.com/mitchellh/vagrant/issues/1874" class="external-link" target="_blank" rel="noopener"&gt;#1874&lt;/a&gt;,
&lt;a href="https://github.com/mitchellh/vagrant/issues/1789" class="external-link" target="_blank" rel="noopener"&gt;#1789&lt;/a&gt;, &lt;a href="https://github.com/mitchellh/vagrant/issues/1700" class="external-link" target="_blank" rel="noopener"&gt;#1700&lt;/a&gt;
and &lt;a href="https://github.com/mitchellh/vagrant/issues/1574" class="external-link" target="_blank" rel="noopener"&gt;#1574&lt;/a&gt;)
and one &lt;a href="https://github.com/tknerr/vagrant-plugin-bundler" class="external-link" target="_blank" rel="noopener"&gt;initiative&lt;/a&gt;
by &lt;a href="https://github.com/tknerr" class="external-link" target="_blank" rel="noopener"&gt;@tknerr&lt;/a&gt; to solve the problem.&lt;/p&gt;</description></item><item><title>Improving vagrant-lxc boxes</title><link>https://fabiorehm.com/blog/2013/06/10/improving-vagrant-lxc-boxes/</link><pubDate>Mon, 10 Jun 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/06/10/improving-vagrant-lxc-boxes/</guid><description>&lt;p&gt;So I&amp;rsquo;ve played with &lt;a href="http://www.docker.io/" class="external-link" target="_blank" rel="noopener"&gt;Docker&lt;/a&gt; once again and have been
looking around its codebase to find out how things work over there. Even though
I&amp;rsquo;ve never wrote a single line of &lt;a href="http://golang.org/" class="external-link" target="_blank" rel="noopener"&gt;Go&lt;/a&gt;, it gave me some
interesting insights about LXC itself and about packing up containers which
influenced heavily the &amp;ldquo;&lt;a href="https://github.com/fgrehm/vagrant-lxc/issues/89" class="external-link" target="_blank" rel="noopener"&gt;next generation&lt;/a&gt;&amp;rdquo;
vagrant-lxc base boxes and the upcoming work I have in mind for the provider.&lt;/p&gt;
&lt;p&gt;Starting with V3 boxes, vagrant-lxc will introduce a better approach for
building base boxes and will also simplify the process of &amp;ldquo;promoting&amp;rdquo; existing
containers to base vagrant boxes. While it won&amp;rsquo;t introduce breaking changes,
V3 boxes should be pushing more work into the base box preparation allowing
us to eventually have &amp;ldquo;generic&amp;rdquo; creation scripts + lxc configs built into
vagrant-lxc itself.&lt;/p&gt;</description></item><item><title>Stop wasting bandwidth with vagrant-cachier</title><link>https://fabiorehm.com/blog/2013/05/24/stop-wasting-bandwidth-with-vagrant-cachier/</link><pubDate>Fri, 24 May 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/05/24/stop-wasting-bandwidth-with-vagrant-cachier/</guid><description>&lt;p&gt;If you have done any kind of Puppet manifests / Chef cookbooks development using
Vagrant chances are that you&amp;rsquo;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.&lt;/p&gt;
&lt;p&gt;A while ago I came across this &lt;a href="http://gist.github.com/juanje/3797297" class="external-link" target="_blank" rel="noopener"&gt;gist&lt;/a&gt; which
solves part of the issue by caching downloaded packages on the host machine and
sharing them among similar VM instances. After copying and pasting it on different
projects, I decided to extract it to a Vagrant plugin and expand its usage by
supporting multiple Linux distros and package managers allowing others to benefit
from it as well.&lt;/p&gt;</description></item><item><title>LXC provider for Vagrant</title><link>https://fabiorehm.com/blog/2013/04/28/lxc-provider-for-vagrant/</link><pubDate>Sun, 28 Apr 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/04/28/lxc-provider-for-vagrant/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: This post is likely to be out of date, please see &lt;a href="https://fabiorehm.com/blog/2015/07/21/quick-update-about-some-vagrant-plugins" &gt;this post&lt;/a&gt;
for more&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s been nearly 2 months since I open sourced my &amp;ldquo;not so pretty&amp;rdquo; &lt;a href="https://github.com/fgrehm/vagrant-lxc/tree/55c9be772db32d4f49bf61af1801d2d6f14a880e" class="external-link" target="_blank" rel="noopener"&gt;initial spike&lt;/a&gt;
and &lt;a href="https://groups.google.com/d/topic/vagrant-up/fp3UfclJDg8/discussion" class="external-link" target="_blank" rel="noopener"&gt;announced&lt;/a&gt; on
Vagrant&amp;rsquo;s mailing list that I was going to work on this. By that time, Vagrant 1.1 wasn&amp;rsquo;t
even released yet and it was a &lt;a href="https://github.com/fgrehm/vagrant-lxc/contributors" class="external-link" target="_blank" rel="noopener"&gt;long&lt;/a&gt;
&lt;a href="http://rubygems.org/gems/vagrant-lxc/versions" class="external-link" target="_blank" rel="noopener"&gt;way&lt;/a&gt; to get where it is now.&lt;/p&gt;
&lt;p&gt;Almost two weeks after &amp;ldquo;releasing&amp;rdquo; the spike, Vagrant 1.1 &lt;a href="http://www.hashicorp.com/blog/vagrant-1-1-and-vmware.html" class="external-link" target="_blank" rel="noopener"&gt;came out&lt;/a&gt;
and by then someone &lt;a href="https://twitter.com/fgrehm/status/312340609350385664" class="external-link" target="_blank" rel="noopener"&gt;challenged&lt;/a&gt;
people to write a LXC &lt;a href="http://docs.vagrantup.com/v2/providers/index.html" class="external-link" target="_blank" rel="noopener"&gt;provider&lt;/a&gt;
for it. I felt great since I was already using &lt;a href="https://github.com/fgrehm/vagrant-lxc" class="external-link" target="_blank" rel="noopener"&gt;vagrant-lxc&lt;/a&gt;
over the past couple weeks :)&lt;/p&gt;</description></item><item><title>Announcing letter_opener_web 1.0</title><link>https://fabiorehm.com/blog/2013/01/22/announcing-letter_opener_web-1-0/</link><pubDate>Tue, 22 Jan 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/01/22/announcing-letter_opener_web-1-0/</guid><description>&lt;p&gt;&lt;img src="https://fabiorehm.com/blog/2013/01/22/announcing-letter_opener_web-1-0/ui.png#c" alt="letter_opener_web UI"&gt;&lt;/p&gt;
&lt;p&gt;One of the things I missed the most after going &lt;a href="https://fabiorehm.com/blog/2013-01-17-100-percent-on-vagrant" &gt;100% on Vagrant&lt;/a&gt;
was the ability to preview Rails apps sent mails on my browser. I got used to the
awesome &lt;a href="https://github.com/ryanb/letter_opener" class="external-link" target="_blank" rel="noopener"&gt;letter_opener&lt;/a&gt; gem which depends
on &lt;a href="https://github.com/copiousfreetime/launchy" class="external-link" target="_blank" rel="noopener"&gt;launchy&lt;/a&gt; to fire up a new browser
window with the email preview instead of sending. As &lt;code&gt;launchy&lt;/code&gt; on its own wouldn&amp;rsquo;t
be able to open up a browser window on the host machine from the guest box, I started
to look around for alternatives and wasn&amp;rsquo;t able to find something else that worked
for me.&lt;/p&gt;</description></item><item><title>100% on Vagrant</title><link>https://fabiorehm.com/blog/2013/01/17/100-percent-on-vagrant/</link><pubDate>Thu, 17 Jan 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/01/17/100-percent-on-vagrant/</guid><description>&lt;p&gt;Last year I heard a lot about &lt;a href="http://www.vagrantup.com/" class="external-link" target="_blank" rel="noopener"&gt;Vagrant&lt;/a&gt; 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 getting a Dell Inspiron 15R SE with a Core I7 that
has 4 cores and 8 threads and 8 Gb RAM. Combined with some Vagrant / VirtualBox tweaks,
I&amp;rsquo;m now able to use Vagrant for pretty much &lt;strong&gt;all&lt;/strong&gt; of my &amp;ldquo;real&amp;rdquo; (paid)
development work.&lt;/p&gt;</description></item><item><title>Hello world!</title><link>https://fabiorehm.com/blog/2013/01/06/hello-world/</link><pubDate>Sun, 06 Jan 2013 00:00:00 +0000</pubDate><guid>https://fabiorehm.com/blog/2013/01/06/hello-world/</guid><description>&lt;p&gt;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.&lt;/p&gt;</description></item></channel></rss>