205 Posts

Posts

Side Projects Reverie

A short reflection on side projects, and how I do them.

Increasing GitHub Actions Disk Space

A couple of days ago, all of the sudden, my jobs started running out of space.

Announcing GoReleaser v2.4

New release coming in hot! new: create macOS app bundles. Initially they are only usable with …

Using AI to aid color scheme migrations

Recently I found a good use case for AI when migrating my dotfiles to another theme. This is a …

I love Continuity Camera, I hate Continuity Camera

Continuity Camera is the macOS feature that allows to use an iPhone as a webcam.

Gumroad, where is my money?

I’ve been using Gumroad for payments of GoReleaser Pro since the beginning, around May …

Announcing GoReleaser v2.3

Another month, another minor release full of improvements!

Setting up a Wireguard VPN in UniFi

This is a quick post showing how to set up a Wireguard VPN in an UniFi Dream Machine.

Interview with Josh Medeski

In this interview I talk with Josh about my developer workflow including tmux, neovim, nix, and …

Announcing GoReleaser v2.2

Another month, another minor release full of improvements!

Semana acadêmica ISEPE

I talked a bit about my career to some first year college students. Slides are in PT-BR.

Announcing GoReleaser v2.1

Winter is here (in the South America)! Let’s see whats new!

A pragmatic guide to Go module updates

I thought I would share some quick bits about how to do go.mod version bumps.

Starlink: installation, first impressions, and running it through UniFi

This weekend’s side quest: installing Starlink as my second internet provider. …

Announcing GoReleaser v2

The new major version of GoReleaser is here!

Updating Snapcraft secrets

If you, like me, release your projects to the Snap Store using GoReleaser, you might need to …

Announcing GoReleaser v1.26 - The last v1, probably

Happy mother’s day! This will be probably the last minor v1 release of GoReleaser. V2 …

GoTime #311 - Ship software, not code

I was live with Natalie to discuss how GOOS and GOARCH spark joy. Go Time 311: Ship software, …

Announcing GoReleaser v1.25 - Easter Edition

Happy Easter! The second release of 2024 is here! It’s the result of 2 months of work by …

Announcing GoReleaser v1.24 - the first of 2024

Happy new year! The first release of 2024 is here! Highlights security: goreleaser would log …

Announcing GoReleaser v1.23 — the last of 2023

The yearly Christmas edition, and the last release of 2023. This release contains mostly small …

Automating my hard-to-automate garage doors

This is how I automated my garage doors without using a BTN interface. Arriving home is always …

Announcing GoReleaser v1.22 — steady improvement

Another boring release, with mostly bug fixes and quality-of-life improvements. Highlights …

Integrating Alarm Systems with Homekit

This post documents my journey implementing a Homekit integration for my Intelbras AMT8000 …

Getting love for your open source project, aka, marketing?!

Twitter Spaces with some OSS developers: @caarlos0 @charmcli @jzmusings @meowgorithm …

Announcing GoReleaser v1.21 — mostly bug fixes

A boring release, mostly bug fixes. Boring is good. Highlights You can now sort tags by semver …

A brief and incomplete history of modal text editors

In this post I’m going to talk about some old text editors you probably never heard of, …

Announcing GoReleaser v1.20 — a quality-of-life release

A little over 100 commits in small-ish quality-of-life improvements.

Wishlist Endpoint Discovery

Learn how to use the recently-added Tailscale, DNS, and Zeroconf endpoint discovery in …

Announcing GoReleaser v1.19 — the big release

Almost 200 commits adding Nix, Winget, and much more…

Writing Bubble Tea Tests

Learn how to use x/exp/teatest to write tests for your Bubble Tea apps.

Announcing GoReleaser v1.18 — the maintainers month release

May is the maintainers month, so I would first like to thank all the maintainers out there for …

Using open, pbcopy and pbpaste over SSH

Having your favorite commands available over SSH can be very convenient. I think I talked about …

Announcing GoReleaser v1.17 — the late Easter release

The Easter release is here!

Announcing GoReleaser v1.16 — the late February release

The February release got a little late… better later than even later, I guess! 😄 …

Announcing GoReleaser v1.15 — the first of 2023

Keeping our pace of 1 minor a month, this is the January 2023 release. GoReleaser’s Ko …

My workflow, part 1

I keep getting asked how my setup works, how I use tmux and nvim over ssh… all that good stuff. …

Announcing GoReleaser v1.14 — the Christmas release

Another month, another release! In fact, the last release of the year. This one in particular …

Marshaling SSH Private Keys - Why there's always a different block?

Not long ago, when I was building melt, I learned something interesting: if you restore a …

🎧 Replay: 2022

This is a different kind of post: I’m sharing some music I enjoyed this year! If …

Announcing GoReleaser v1.13 — the November release

Another month, another release! Like the previous 2 releases, this is a beefy one: over 100 …

GoReleaser v1 — one year later

We launched GoReleaser v1 exactly 1 year ago today! onefetch First, I wanted to wholeheartedly …

GoReleaser Split and Merge

Since v1.12.0-pro, GoReleaser can split and merge its release process. This means that you can …

Expanding GitHub Sponsors globally - GitHub Universe

GitHub Sponsors expanded to over 30 new regions this year, Abigail Cabunoc Mayes chat with …

Issuing and using SSH Certificates

SSH certificates allow system administrators to SSH into machines without having to manage …

Sustainability in Open Source - Github and Charm

Talking about improving sustainability of open source with some incredible open source …

Announcing GoReleaser v1.12 — the more-than-a-hundred commits release

The previous release had ~100 commits, and this one has 149 since previous feature release! …

Creating a tag and releasing from a GitHub Action, with GoReleaser

Most people run GoReleaser by creating a tag locally, pushing it, and letting their CI takes …

Announcing GoReleaser v1.11 — the hundred commits release

This release took a while, for all the good reasons: a ton of new features and bug fixes for …

Enabling Nightly releases using GoReleaser Pro

GoReleaser Pro v1.11+ added support to keeping a nightly release. That means that, whenever you …

Shipping completions for Go CLIs using GoReleaser and Cobra

Everyone likes command line completions, so much that some even install extra tools just to …

SSH Tips and Tricks

Since I joined Charm, I’ve been working and learning more about SSH, and I thought I …

Announcing GoReleaser v1.10 — the summer release

Fun fact: it is actually winter now here in Brazil. Regardless, this release is packed with new …

The Maintainers of OSS @ Equinix

A conversation about maintaining OSS and other software-related topics.

My tmux workflow

I wanted to share a quick thing that made my life easier on tmux lately, but before we dig into …

Open Source Brasil Maintainers Event @ GitHub

A conversation about maintaining OSS — in Portuguese.

@TwitterDev x @Charmcli: Developer Tools discovery session

Twitter Spaces with Twitter and Charm folks, discussing favorite developer tools. This Space …

Announcing GoReleaser v1.9 — the 10k stars release

This release contains several minor improvements and a couple of new features! Let’s have …

Using SSH Certificates with Go’s SSH Client

A couple of weeks ago I was working on adding SSH Certificate Authentication support to Wish, …

Joining the split keyboards club: a Moonlander story

This post will describe my experience with a couple of firsts: first mechanical keyboard first …

Reproducible builds with GoReleaser

GoReleaser can help you, to some extent, to have reproducible builds. Reproducible Builds What …

Announcing GoReleaser v1.8 — the GOAMD64 release

This release’s biggest feature is the GOAMD64 support. Highlights support GOAMD64(#3016) …

Announcing GoReleaser v1.7 — The Go 1.18 release

The title would have been more creative if it was GoReleaser 1.18 as well… maybe… …

Announcing GoReleaser v1.6 — the boring release

GoReleaser 1.6 is out! Another “boring” release with some miscellaneous …

Announcing GoReleaser v1.5 — the misc improvements release

GoReleaser 1.5 is out, with a handful of miscellaneous improvements. Highlights Better manpages …

Forwarding Discord's RPC socket over SSH

I’m doing 99% of my coding in a “big” machine instead of my laptop. I do that …

git-worktree is awesome

I’m still mad I haven’t found this out before. Imagine you’re working on …

Announcing GoReleaser v1.4 — the AUR release

GoReleaser can now create and publish Arch Linux PKGBUILD files to Arch User Repositories! …

Announcing GoReleaser 1.3 — the first of 2022

We just launched GoReleaser v1.3, the first release of 2022! Highlights Announce to any HTTP …

./charm.sh

$ glow charm.md Everyone who knows me knows that I love CLI tools. I have my own opinionated …

MacBook Pro 14 - a quick review

I got a MacBook Pro 14" with an Apple M1 Pro SoC, 16GB of memory and 500GB of disk a …

Announcing GoReleaser v1.2 — Santa/5 year anniversary edition

GoReleaser v1.2 is out — likely be the last feature release of 2021. It also marks the first 5 …

Changelog grouping with GoReleaser v1.1

In the v1.1 release, GoReleaser introduced a new feature called “changelog groups”. …

Testing Linux packages on GitHub Actions

One issue we had from time to time on GoReleaser was related to its Linux packages. We had a …

Announcing GoReleaser v1 — the first v1 release

Hello everyone! I’ve been holding on the “v1” release for, checks notes, …

Hacktoberfest Brasil Golang Meetup

A hands-on talk on how to create and set up a project with GoReleaser. In Portuguese.

Schwarz Golang Montly Meetup

A hands-on talk on how to create and set up a project with GoReleaser.

Using the new prebuilt builder on GoReleaser

You can now import pre-built binaries into GoReleaser! This feature was made with mainly two …

Signing releases with cosign and GoReleaser

In GoReleaser v0.176.0 (both OSS and Pro), we released the ability to sign Docker images - with …

Supply chain integrity with GoReleaser using Go mod proxy

Since the infamous SolarWinds attack, supply chain integrity is something a lot of people are …

Multi-platform Docker images with GoReleaser, Podman and GitHub Actions

A few months ago, I published a post on Multi-platform Docker images with GoReleaser and GitHub …

Incrementally measuring my internet speed with Prometheus

I live in Brazil, and, if you’re not familiar, internet usually sucks here. I’m one …

Sri Lanka Golang meetup

A hands on talk on how to create and setup a project with GoReleaser.

Using GoReleaser includes feature

GoReleaser Pro was released about a month ago, and with it, the ability to include GoReleaser …

Announcing GoReleaser Pro

After more than 4 years working on GoReleaser, I’m launching a Pro version! Why? I think …

GoTime #173 - Releasing with (and without) GoReleaser

I was live with Mat, Natalie & Johnny and we talked a bit about releases, with and without …

GoReleaser: 4 years releasing software

Last year, I made a blog post about GoReleaser turning 3 years old. I kind of like it, so this …

macOS Command Line Tools

Today, again, I forgot the command to install Command Line Tools and had to search for it. This …

Why I migrated to the Fish Shell

Back in June, I started porting my dotfiles from ZSH to Fish. Here’s why. Initial …

Multi-platform Docker images with GoReleaser and GitHub Actions

GoReleaser v0.148.0 is out, and with it, the ability to release multi-platform Docker images, …

Making Python respect Docker memory limits

If you run Python inside containers, chances are you have seen Linux’s OOMKiller working …

Kubernetes pod shutdown lifecycle

I always forget the details about Kubernetes pod shutdown lifecycle is something when I need …

Show me your code: how buildkit can help integrating GoReleaser with multi-arch Docker manifests

A discussion with Tibor and Geanluca about Docker buildkit and GoReleaser.

Publishing libraries with GoReleaser

What if I told you you can now automate the release of your libraries as well? I think some of …

Leader Election inside Kubernetes

Ever needed a simple leader election mechanism on something that will run on a Kubernetes …

Kubernetes Jobs: shut down sidecar when main container finishes

Kubernetes Pod lifecycle does not cover everything just yet. I’m working on an app that …

Easy private Helm repositories

Can we have a private Helm repository using GCS as backend? Yes we can! The easier way to …

4K display on MacOS: the saga

I recently got a 4K display, and it didn’t work as I expected on my MacBook Pro. This is …

GKE using Traefik as the ingress controller

I recently fall into a trap using Traefik as the ingress controller in one cluster. I decided …

/uses

Sometimes people ask me what my setup looks like for remote work. I decided to try to keep a …

GoReleaser: 3 years later

GoReleaser’s journey begins in December 21, 2016: the day I made its very first commit. …

1º Open Source Joinville Meetup

Shared some tips about managing medium-sized OpenSource projects. The slides are in Portuguese.

High availability with nats-streaming-server (fault-tolerance)

I wanted to set up a fault tolerant nats-streaming-server, but couldn’t find a …

Faster Docker builds using go modules

Quick tip to improve the docker build speed using go modules. Normally, I would do something …

High availability with nats-streaming-server (clustering)

I wanted to set up a high available nats-streaming-server cluster, but couldn’t find a …

Git: check if a folder changed

Often I need to “do X only if files on some folder changed” or whatever. I always …

GoReleaser Docker support

The next GoReleaser version will have a more flexible Docker configuration format. In this post …

Golang: cache things using interfaces

Caching things can be hard to do and hard to test. In this post I’ll demonstrate a …

Monitoring GitHub releases with Prometheus

I have written some exporters to observe things on GitHub. This is how and why. We will talk …

Using Goss to validate Packer builds

Ever wanted to validate your Packer image with Goss? Well, you can! I was looking into ways to …

Keeping json files formatted

I’m working in a project that uses Chef, so it has a lot of JSON files. I like everything …

GoReleaser: build and push Snapcraft packages from TravisCI

GoReleaser was able to build Snapcraft packages for a long time, but it wasn’t able to …

Hacktoberfest Joinville

I shared some of my experiences coding GoReleaser, this time, more about community and less …

Couchbase: rolling upgrade from 4.5.x to 5.1.x

I have an old Couchbase 4.5.x cluster, and I though it would be nice to upgrade it. This are my …

GopherCon Brasil 2018

A quick review of my second ever GopherCon - the first one as a speaker, and my experience …

GopherCon Brasil

My first ever talk at a GopherCon. I shared my experiences coding GoReleaser, more or less …

Upgrading ElasticSearch 2 to 5: S3 snapshot/restore strategy

Migrating an ElasticSearch cluster from version 2 to 5 can be challenging, even more if it is a …

GoReleaser: lessons learned so far

I’ve started GoReleaser almost 2 years ago. This is a summary of (some) things I’ve …

One month working remote

It has been one month since I started working fully remote, and I think I learned some things I …

Cleanup old GitHub Forks

I like to keep my GitHub clean. I delete forks I’m not using anymore, move old abandoned …

Prometheus authentication with oauth2_proxy

I wanted to set up a prometheus machine for me to monitor random stuff, but I was always …

I'm Joining TOTVS Labs

Everything in life eventually comes to an end, including life itself. This is not that kind of …

GoReleaser: 1k repositories and beyond

When first announced GoReleaser roughly 1 year ago, on January 2017, I never thought it would …

On being an effective developer

Over the years I read several articles on how to be effective, and how the 10x engineer thing …

Moving to Hugo

After some time, I finally decided to move my blog from Jekyll to Hugo. That was probably the …

2º Joinville Go Meetup

It was the Go 1.10 Release party - my talk was about what changed in Go 1.10.

Creating debs and rpms with Go

I’ve been working on GoReleaser for more than a year now, and one of the things that was …

1º Joinville SRE Meetup

I spoke about how we migrate our monitoring infrastructure to Prometheus & Friends, what we …

1º Changelog Meetup

I showed how to build and release binaries in Go, including cross-compiling, Docker images, …

A Repository Graveyard

This past weekend I decided I need to clean up my GitHub profile. In this post I’ll write …

Charting Repository Stars

I always wanted to know how stargazers of my repos increased over time. I didn’t found a …

GKE in production

I’ve been working with DigitalOcean, Heroku and AWS for some years now. Recently, I …

Improving Jekyll build time

I’ve been using Jekyll on my blog since 2012. It is great! But, lately, its slow build …

70% cheaper Kubernetes cluster on AWS

We are running Kubernetes on both sandbox and production for some months now. Our production …

Writing CLI applications with Golang

Last few months I’ve been using Go to write quite a lot of tools. In this post I intent …

Measuring production code coverage with JaCoCo

Microservices is the new fancy way of doing applications. Yet, most companies still have big …

From Travis Enterprise to BuildKite in 50 repositories

At ContaAzul, we use the CI infrastructure a lot. We open several pull requests in several …

Distributed Locking with Redis

At ContaAzul, we have several old pieces of code that are still running in production. We are …

Fast and easy Go binaries delivery

I have some apps written in Go, which I deliver as binaries for each platform using GitHub …

Watchub

Watchub is a service that notifies you of people who followed/unfollowed you and …

Fixing Alerts

As a DevOps/SRE, I spent a reasonable amount of time dealing with metrics and alerts. Usually, …

How to make people love your product

I have seen a lot of posts like this subject, but almost all of them were about stuff you …

Dealing with Maven dependency hell

Every now and then an active java-based project enters in a “dependency hell” …

Setting up a Go build with Glide on CircleCI

I’ve lost a considerable amount of time trying to bind those things together, so I …

Speeding up my ZSH load time

This is the story on how I speed up my terminal load time. Some time ago I shared my dotfiles …

Flag-oriented Programming

booleans, am I right? What a wonderful piece of technology! They help us solve so many …

What is good code?

I’ve been wanting to write this for a long time, just to clarify my thoughts on the …

Continuous Delivery with GitHub, CircleCI, Docker and AWS Elastic Beanstalk

This is just a quick overview of how I did it in antibody’s homepage. Antibody's …

2º #connect(dev)

I gave a little intro on Docker and talked about when to use it or not. No slides or video …

Parse environment variables to structs in Go

In Go, it’s dead simple to get the value from an environment variable: …

Small Go Apps Containers

Or: how to ship your app in a <20Mb container. Well, as you may know, there is a good amount …

Avoid static imports

There are a lot of Java API’s and Frameworks which rely in static methods and the sort. …

Cross-compiling Go

go build generates a binary for the platform you run it in. So, if I build antibody in a Linux …

I wrote Antigen in Go: Antibody

Learning Go was in my TODO list for a while, and finally I did something about it. This post …

Running a Selenium Grid with docker-compose

At ContaAzul, we had 31 Windows machines powering our Selenium tests - one running the grid and …

Docker: The very basics

Or “what the hell is this Docker thing?” Intro According to their website, Docker …

Docker Protips™

Like my old post on git, this is somewhat a collection of useful Docker …

QCon Sao Paulo - 2015: A short overview

So, this week I attended to QCon-SP. The conference was great (congratulations everyone 🍻), …

Using Mockito's InjectMocks

FYI: Like the previous post, this is a really quick tip. Let’s imagine we have two …

Introducing JVM - The Java Version Manager

Last years it becomes more and more common to work in different projects running on different …

Dump a PostgreSQL table as insert statements

FYI: Like the previous post, this is a really quick tip. This week I’m working closely to …

Find non-ASCII chars

FYI: This is a really quick tip. Sometimes things break because of random characters, like '. …

Integrating Minitest with Shippable

I know, everyone uses Travis. I have nothing against it. But in case you want to test and/or …

How to write a good tech job description

Recently I saw a job description of a Brazilian company, more or less like this: Be a …

Jekyll: Reading time without plugins

Estimated reading time of a post is a feature that became popular, I believe, with Medium. …

OpenSourcing my blog again

Once upon a time, my blog was OpenSource. People liked it and forked it tons of times, but they …

Jekyll with Sass

I followed @mdo recent article “Using Sass with Jekyll”, and wanted to point out …

Lint your shell scripts

I will start this by quoting the bashstyle’s readme: Bash is like the JavaScript of …

Don't use junit.framework

Every once in a while I see somewhere a wrong import to the old, deprecated junit.framework …

Using JUnit Rules to simplify your tests

Have you ever wrote JUnit tests extending a class that does some before and after work, so you …

Exponential Backoff with Java 8

Exponential backoff is an algorithm that uses feedback to multiplicatively decrease the rate of …

Elections, in Ruby

Updated with second round script in Oct 26, 2014. Well, last sunday (Oct 5) was the brazilian …

Install JDK on OSX Yosemite

For some reason, Oracle blocked the installers to run only on a fixed OSX version range with a …

Java 8

Earlier this year, the new version of the Java Programming Language was released. Finally, it …

Find the slowest tests of a Java project

I found that it’s pretty hard to have a project with high test coverage and fast …

PullRequest Coverage Blammer Maven Plugin

At the company I work Pull Requests are part of our culture. When someone opens a Pull Request, …

2º Joinville Software Meetup

I encouraged people to start using git, showing some of its features.

This site is now powered by Turbolinks

I think that turbolinks is great: it mades it easy to add AJAX PushState to your Rails …

Fixing Rubygems Certificates

Today, once again, my environment start throwing that SSL cert error. I followed the basics of …

UP v2

So, this is the all-new UP version. It is more based on my own blog in some way, which is a …

Twitter drops Ruby - The Bullshit

This post is about the Twitter change from Ruby to Java, some years ago, fact that, sadly, is …

Ruby: Nil

Following my previous posts with basic Javascript aspects, like context and variable hoisting, …

Javascript Variable Hoisting

This is article is the second of a series of n articles, where n could be any given number …

Javascript Context

People make a lot of confusion about Javascript context mechanism. I don’t think …

JPA2 with Guice

Some time ago, I posted here about a simple project that I’ve done in my post-graduation …

Riding a MS Network with Linux

I work in a company that have an enterily MS-based network, which means, all that domain login …

Git Protips™

Git has a lot of features, and I bet that 90% of who use it (including me) doesn’t know …

Gemify your assets

Rails 3.1 introduced the asset pipeline, which make it easy to include versioned external …

Turbolinks animated page transitions

Since I’ve seen the new Basecamp, I fall in love with it. It’s fast, had sleek …

Unobtrusive JS

One of the principles of Unobtrusive JS is the “separation of functionality (the …

Seven Languages in Seven Weeks: Erlang

So, I just bought “Seven Languages in Seven Weeks”. I’ve read the Ruby …

UP: A Jekyll theme

After a while using Jekyll Bootstrap, I just realized that it was so much bloated. Then, few …

Things that make me dislike Java

So, I just compiled a little list of things that, I believe, make me dislike Java everyday a …

Rails AJAXSpin

A couple of days ago I wrote about how to build a simple and non intrusive AJAX status with …

Dotfiles Are Meant to Be Forked

My desktop Well, it has been a while since I replaced my old (but gold) bash by the great zsh. …

Simple RoR AJAX Status

tl;dr A simple tutorial explaining how to made a simple coffeescript that can automagically …

Configuring a git server with gitolite

Setup You will need: git git-daemon-run ssh gitolite Install everything: $ apt-get install git …

GWT Bootstrap 2.0.4.0 released

For those wo don’t know, GWT-Bootstrap wants to port the Twitter Bootstrap widgets to GWT …

Quick intro to Google Guava

According to the project site on GitHub, The Guava project contains several of Google’s …

Guice Junit test-runner

Yesterday, I wrote a small article talking about Guice and JUnit, so, this time, I’ll …

Guice and JUnit

First of all: Do you use Guice as Depency Injection Container in your Apps? If not, why? Well, …

Theming GWT-Bootstrap

First of all, if you haven’t done it yet, read Getting started with GWT-Bootstrap. Create …

Getting started with GWT-Bootstrap

GWT-Bootstrap is a project that aims to provide all the Twitter Bootstrap styles and widgets to …

Modular Persistence

Hi everybody! One of the classes of my post-graduate was the Java Persistence API (JPA). The …

Hello World

Hello everyone :) I just decided to start posting in my own blog, in English. I had a blog with …