RSSAmplifier

Blog

g3rv4

g3rv4.comRSS feed ↗46 posts

Latest posts

Using Docker on an IPv6 only host on Ubuntu 22.04

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.

Installing Mastodon on an IPv6-only host running Ubuntu 22.04

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!

GetMoarFediverse on multi-user Mastodon instances

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!

Building multi architecture docker images on GitHub Actions

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.

Creating PDFs on C# in Docker

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.

Using Shamir Secret Sharing

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

A plan for my secrets

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.

Pushing to GitHub Packages Nuget repository: Fixing broken pipe

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.

Using Azure Pipelines with auto-provisioned self-hosted agents.

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.

Bye bye Refined

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.

Bundling, signing and notarizing a Go application so that Gatekeeper is happy

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.

How to migrate to Firefox if you depend on sites that don't support it

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.

DuraznoConf - the human side of technology

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).

Want a secure browser? Disable your extensions

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.

Bye bye BetterSlack

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).

Making Slack better with BetterSlack

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.

Productionizing an R random forest in C#

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

Tweetbot feature request: Real Time tweet curation

I would love to curate my tweets in real time :)

Make Jekyll generate only certain posts / pages

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.

Enabling htmlwidgets on a Jekyll based R blog

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.

Detect mobile devices on a shiny app

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.

Overriding git commands

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.

Why I blog

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

Nicely looking URLs using python and github

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.

Exposing a local IIS site on your network

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.…

How I got a job at Stack Overflow

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!

New Year, New Identity, New Blog

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…

Hiding resting splits on Garmin Connect

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.

Asterisk 13 on an Ubuntu Docker container

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 )

Compiling PhantomJS 2.0 on an odroid U3

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

Mac OS Notifications from Python - with PyCharm debugging :)

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.

Defeating OAuth2's purpose with PhantomJS and Selenium

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).

My take on AngularJS authentication with a .NET backend

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 :)

Getting ready for #signalconf

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.

Installing Asterisk 12 on Ubuntu 12.04 with pjproject and SRTP

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.

Installing paramiko on Windows 8 64-bits with MinGW

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!

A RESTful bridge to send and receive SMS using AT commands

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 .

Asterisk 12 on a Raspberry Pi... my experience

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

Dynamically loading sip users from a database (and generating extensions for them)

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.

After twilio... Flowroute

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.

A home made DDNS service with AWS's Route 53

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.

Asterisk + Twilio: Receiving calls from twilio (Part IV)

Fourth (and last) Asterisk + twilio post: Receiving calls from twilio to Asterisk.

Asterisk + Twilio: Making calls from home to twilio (Part III)

Third Asterisk + twilio post: Making calls from Asterisk to twilio.

Asterisk + Twilio: The hardware, Cisco SPA3102 and the FXO vs FXS ports (Part II)

Here I talk about the little boxes I bought to use my regular phones (and my phone line) with my Asterisk box. I bought them in 2013 and they’ve been working great after 3 years.

Asterisk + Twilio: Motivation (Part I)

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…

Hello World!

My very first blog post :)