GeistHaus
log in · sign up

https://g3rv4.com/atom.xml

atom
46 posts
Polling state
Status active
Last polled May 19, 2026 01:36 UTC
Next poll May 20, 2026 00:57 UTC
Poll interval 86400s
ETag W/"64de977f-665c"
Last-Modified Thu, 17 Aug 2023 21:56:15 GMT

Posts

Using Docker on an IPv6 only host on Ubuntu 22.04
Show full content

After setting up my Mastodon instance on Hetzner, with only an IPv6, I wanted to move a couple droplets there. But they all use Docker, and… having Docker work in a host with only IPv6 connectivity wasn’t as straightforward as I expected.

https://g3rv4.com/2023/07/running-docker-ipv6-only-network
Installing Mastodon on an IPv6-only host running Ubuntu 22.04
Show full content

I got my Hetzner account and I took the questionable decision of saving €0.60/mo by only having an IPv6. In order to make financial sense I’ll have to wait some years, but it was fun!

https://g3rv4.com/2023/07/installing-mastodon-ipv6-only-host
GetMoarFediverse on multi-user Mastodon instances
Show full content

I moved to Mastodon and built some tools for it. In this post, I made one smarter :) If you’re a #mastoAdmin of a small instance, this post is for you!

https://g3rv4.com/2022/12/getmoarfediverse-on-multi-user-instances
Building multi architecture docker images on GitHub Actions
Show full content

On my previous article I showed how I could use Puppeteer Sharp to create PDFs on Docker… now, it’s time to publish a multi-arch image to Docker hub from GitHub Actions.

https://g3rv4.com/2022/04/building-multiarch-docker-images-github-actions
Creating PDFs on C# in Docker
Show full content

It’s incredibly hard to find a library to build PDFs on C#, so what if we cheat? Puppetter Sharp is awesome, and we can (ab)use it to just generate PDFs.

https://g3rv4.com/2022/04/creating-pdfs-on-csharp-in-docker
Using Shamir Secret Sharing
Show full content

Here’s a little tool I built to split and recompose secrets using Shamir Secret Sharing

https://g3rv4.com/2022/04/using-shamir-secret-sharing
A plan for my secrets
Show full content

I use 1password for all my secrets. What would happen if I forgot my master key? or if both my computer and phone got stolen? Up until a couple weeks, that would have been terrible.

https://g3rv4.com/2022/04/a-plan-for-my-secrets
Pushing to GitHub Packages Nuget repository: Fixing broken pipe
Show full content

And… almost a year since I switched to Azure Pipelines, I’m now building with GitHub Actions, and pushing to their Nuget package repository. I got this annoying error and I’m blogging about how to fix it.

https://g3rv4.com/2020/07/github-packages-nuget-broken-pipe
Using Azure Pipelines with auto-provisioned self-hosted agents.
Show full content

I started playing with Azure Pipelines, and while it looked great, the lack of caches and inspectability on Microsoft’s agents made it clear that I wanted self-hosted agents. BUT I didn’t want to pay for a machine that I will only house a couple of hours a month. In this post, I touch on my motivations, the challenges I found, and how I made it work.

https://g3rv4.com/2019/11/azure-pipelines-auto-privisioning-agents
Bye bye Refined
Show full content

Slack revamped their app… and lots of those changes make it harder for extensions to interact with it.

Since the main goal of Refined is to make my life easier, I’m stopping its public distribution to avoid playing a cat and mouse game that I can only loose.

https://g3rv4.com/2019/07/bye-bye-refined
Bundling, signing and notarizing a Go application so that Gatekeeper is happy
Show full content

macOS has Gatekeeper… a mechanism to prevent users from installing software they’ve downloaded UNLESS it’s signed by a developer enrolled in they program AND they’ve shomehow verified it’s not extremely malicious. I’ve read it’s not that complicated to do it when building Cocoa apps, but the story is different for a Go application.

https://g3rv4.com/2019/06/bundling-signing-notarizing-go-application
How to migrate to Firefox if you depend on sites that don't support it
Show full content

I’ve been wanting to migrate from Chrome to Firefox for a while now… but I use hangouts and meet and they… don’t work great with Firefox. So I built OnChrome: a Firefox extension where I can specify the sites I want to open in Chrome. The extension just launches Chrome when I visit one of those sites.

https://g3rv4.com/2019/06/how-to-migrate-to-firefox
DuraznoConf - the human side of technology
Show full content

This is a conference like no other. Are you looking for interesting talks? check. Are you looking for a memorable experience? check. This conference will 🤯 you (and I don’t use emoji lightly).

https://g3rv4.com/2019/01/duraznoconf
Want a secure browser? Disable your extensions
Show full content

While working on Refined (my browser extension to personalize Slack) I realized just how easy it is for an extension to go rogue. In this article I explain how a malicious extension dev could really steal your data.

https://g3rv4.com/2018/09/browser-extensions-are-insecure
Bye bye BetterSlack
Show full content

Less than 2 days after announcing BetterSlack, I got an email from somebody on Slack’s Legal team informing me that the extension was in violation of their Acceptable Use Policy.

Injecting javascript into their website is a no-no according to them. So I unshipped it (spoiler alert: we worked it out and it’s back under a new name).

https://g3rv4.com/2018/08/bye-bye-betterslack
Making Slack better with BetterSlack
Show full content

I built a Chrome extension that makes Slack even better :) It was called BetterSlack and it got unpublished following Slack’s Legal Team’s request. On this blog post I announced it.

https://g3rv4.com/2018/08/betterslack
Productionizing an R random forest in C#
Show full content

You’ve got a nice random forest built in R… how can you make it work in your c# app? dotnet add package RandomForest.

https://g3rv4.com/2018/07/csharp-random-forest
Make Jekyll generate only certain posts / pages
Show full content

I love Jekyll. It’s not only straightforward to use for web developers and it’s extremely extensible. But, once you have a bunch of posts, it can get slow.

This site was taking 16s to build on my local environment, so I wrote a plugin to only generate the posts I’m working on, and now the whole thing takes less than 2s.

https://g3rv4.com/2017/10/jekyll-generate-subset-posts
Enabling htmlwidgets on a Jekyll based R blog
Show full content

So far, I’ve enabled htmlwidgets on 3 Jekyll based blogs, authored with RStudio. It’s been harder than I anticipated, and I learned a couple things that I think could be useful for other people.

https://g3rv4.com/2017/08/htmlwidgets-jekyll-rstats
Detect mobile devices on a shiny app
Show full content

If you have a shiny app, you don’t pay for the pro version, and you want to detect mobile browsers (to tweak your logic) then this post is for you.

https://g3rv4.com/2017/08/shiny-detect-mobile-browsers
Overriding git commands
Show full content

Did you ever want git to do things a bit different? In my case, on one repo, I want git push to push to 2 remotes when not in master. Here’s how I did it.

https://g3rv4.com/2017/07/overriding-git-commands
Why I blog
Show full content

I’m going to be writing about different things on my blog, here’s why :)

https://g3rv4.com/2017/03/why-i-blog
Nicely looking URLs using python and github
Show full content

For some reason, I enjoy seeing, clicking and typing nice URLs (being able to say that my blog is at gmc.uy/blog, my twitter is gmc.uy/twitter and my Stack Overflow account is gmc.uy/so makes me happy)… so I’ve always had a way to maintain it, but it was pretty… involved. I wrote a 67 LOC script that lets me define the URLs on github and supports multiple domains.

https://g3rv4.com/2017/01/nice-urls
Exposing a local IIS site on your network
Show full content

Have you ever had your local IIS run a site local.something.com and eventually needed to test it on your phone (to optimize it beyond the emulator) or to share it with a coworker? you may end up doing lots of releases to your development environment just to see minor layout changes.

If you have, and you’d like to expose your environment either on your network, then this article is for you. Otherwise, just go on with your life ;)

https://g3rv4.com/2017/01/exposing-local-iis-site-network
How I got a job at Stack Overflow
Show full content

My experience interviewing for a job at Stack Overflow (and actually getting it!). The most interesting thing is probably the quality of the blog posts I link to. On the long weeks that the whole interviewing process took place, I scraped the internet looking for other people’s experiences… so here I try to “pay it forward” to my future Stackers!

https://g3rv4.com/2017/01/I-got-a-job-at-stackoverflow
New Year, New Identity, New Blog
Show full content

I’ve been elgerva, Gervasio, gmc-dev, gmc_dev… and now, I’m g3rv4. A playful nickname that I feel it identifies me better than all the other nicknames (and that was availabe everywhere!). Also, this blog is built with Jekyll, its code is available on github and it’s deployed automatically on my server with a simple bash script. I had a blast setting it up, I even wrote my first Ruby lines while doing so!

https://g3rv4.com/2016/12/new-year-new-identity-new-blog
Hiding resting splits on Garmin Connect
Show full content

A quick tail of how I started running and built a Chrome Extension that modifies the XHR requests/responses to trick the Garmin Connect web application to show me what I want to see… extensions have so much power over what we see.

https://g3rv4.com/2016/08/hide-slow-splits-garmin-connect-extension
Asterisk 13 on an Ubuntu Docker container
Show full content

I started playing with Docker and I dockerized all the apps that are running on my server. It was all super straightforward except for… Asterisk! here I talk about how I made it happen (it amazes me how you set up Asterisk boxes and just forget about them… they just work)

https://g3rv4.com/2016/06/asterisk-13-ubuntu-docker-container
Compiling PhantomJS 2.0 on an odroid U3
Show full content

The title says it all… c++ compilation fun times!

https://g3rv4.com/2015/09/compiling-phantomjs2-odroid-u3
Mac OS Notifications from Python - with PyCharm debugging :)
Show full content

I built a small python app that notifies me about when my local currency changes… what’s interesting about it is that it uses OSX’s built in notification system. On this post I explain how I made it happen.

https://g3rv4.com/2015/08/macos-notifications-python-pycharm
Defeating OAuth2's purpose with PhantomJS and Selenium
Show full content

TL;DR: As part of a system to report the time I’ve worked on an issue from TimeDoctor to JIRA, I’m doing the OAuth2 dance using selenium and PhantomJS (effectively doing what OAuth2 without a password grant tries to avoid… having the application know the user password).

https://g3rv4.com/2015/02/defeating-oauth-phantomjs
My take on AngularJS authentication with a .NET backend
Show full content

Doing authentication and authorization of an AngularJS application with a C# backend, using signed tokens… I thought a lot about security, is it enough? I’m not sure, but I surely like this article :)

https://g3rv4.com/2015/02/angularjs-authentication-csharp
Getting ready for #signalconf
Show full content

When I wrote this I was super excited to be attending Twilio’s conference, and I planned to build a system to show my skills in there. I didn’t finish it in time, and I honestly didn’t have an awesome time at that conference either :P but it felt wrong to just delete this… if nothing else, you can see some of my positive thinking.

https://g3rv4.com/2015/01/plans-signalconf
Installing Asterisk 12 on Ubuntu 12.04 with pjproject and SRTP
Show full content

A post about what you had to do at that time to install an old version of Asterisk in an old version of Ubuntu. Why is it valuable you ask? I don’t have a good answer.

https://g3rv4.com/2014/04/asterisk-12-ubuntu-1204-pjproject-srtp
Installing paramiko on Windows 8 64-bits with MinGW
Show full content

Ugh… another old post, this time explaining how to make an old version of a python module work in an old version of Windows… but hey! this gave me a bunch of page views at that time!

https://g3rv4.com/2014/03/paramiko-windows8-x64
A RESTful bridge to send and receive SMS using AT commands
Show full content

I’m pretty proud of this little project… It’s just a small python app that polls via telnet to a Portech MV-372 and checks if any new text messages arrived. If they did, it posts them to a RESTful API. It also exposes a RESTful API for other applications to send messages. The beauty? it works! despite the awful AT Commands.

https://g3rv4.com/2014/03/restful-bridge-sms-atcommands
Asterisk 12 on a Raspberry Pi... my experience
Show full content

I installed Asterisk 12 on a Raspberry… but I didn’t document all my steps because I followed another blog’s instructions. Guess what? that blog is now offline :P

https://g3rv4.com/2014/01/asterisk12-raspberrypi
Dynamically loading sip users from a database (and generating extensions for them)
Show full content

A simple approach to manage Asterisk users programatically. It’s nothing weird (and probably how most people solve this issue) but given that I couldn’t find anything already written about it, I just went ahead and documented it.

https://g3rv4.com/2013/12/asterisk-load-peers-db
After twilio... Flowroute
Show full content

I “discovered” (in the same sense that Columbus discovered America) Flowroute as a VoIP trunk provider. This post isn’t particularly insightful… but when I wrote it (in 2013) I was really excited about these things just existing.

https://g3rv4.com/2013/11/flowroute
A home made DDNS service with AWS's Route 53
Show full content

This is how I used to update my Route 53 DNSs record. Right now I’m using a python script, but as soon as I’m bored enough to update it, I want to switch to DigitalOcean’s DNS… they’re free included and update super fast.

https://g3rv4.com/2013/10/updating-route53-dns
Asterisk + Twilio: Motivation (Part I)
Show full content

I was working with twilio, I started playing with Asterisk and obviously wanted them to interact. I was so proud of what I did that I wanted to share it, so this is why I started this blog… This is the first post of 4 about it. There’re way better ways of doing it today, but these posts were an extremely important part in how my professional life changed for the better. So I love them unapologetically.

https://g3rv4.com/2013/10/asterisk-twilio-motivation
Hello World!
Show full content

My very first blog post :)

https://g3rv4.com/2013/10/hello-world