Contact me →

Blog posts

315 blog posts written over the years

2026

06/13 They are fucking with you, and you like it

2025

08/20 How to fix hanging tests in Node.js 08/15 How to use an iPad Pro as an external display 06/18 Implementing HTTP range requests in Node.js

2024

12/19 Crazy CSS experiments 09/21 Exclude specific tags in Eleventy using a custom filter 09/15 Start Kindle script on system boot with init.d 09/15 Converting my Kindle to a digital photo frame 09/14 Display jailbroken Kindle info using lipc-get-prop 09/14 How to install Epic Games store on iPad with iOS 18 09/13 Displaying RTSP stream on a jailbroken Kindle Paperwhite 09/13 No ImageMagick? No problem, use FFmpeg! 09/11 Display IP address on a jailbroken Kindle using eips 08/28 Rooted / Jailbroke my Kindle Paperwhite 08/03 How to add a TP-link Tapo camera to homeassistant 07/11 PETG I love you, but you're bringing me down 07/07 Google domains / Squarespace transfer (using Porkbun and Cloudflare) 02/13 Google Sheets got fixed on iPad 01/26 Today is my Lucky Backup Day

2023

11/04 Google Sheets on iPad? More like 'Google Shiits' 💩 10/19 htmx and Alpine.js are actually pretty awesome 10/17 ZenGPT: a simple ChapGPT alternative frontend 10/16 Using pure functions as views (with htmx and alpine.js) 10/15 iPad can now control the audio when connected to an external monitor 10/08 Improving my tags using OpenAI's Chat completions API 10/07 ChatGPT for learning Jamaican Patois 10/06 3d printed stuff over the years 10/06 A stupid web component 10/04 Apple watch personal use cases 09/27 My iPad/iOS 17 wish list for 2024 09/19 Protonmail iOS team seems super reactive to user feedback 09/14 Southworking 🇮🇹 09/03 Wanna learn something? Recreate it 08/25 Learning about Web Components 07/24 Unblock single domain in AdGuard Home 07/08 Airtag battery still low after replacing with new CR 2032 batteries 07/03 Opinions on working fully remotely 06/27 Favorite music while programming 06/15 WebAuthn and Secure Payments Confirmation (SPC) 06/13 Ti ricordi di Jumpy? 🇮🇹 06/09 About 1:1s 05/03 Modern frontend apps with ES modules and import maps 04/21 MiCA pizza e fichi 🇮🇹 04/20 My impractical RSS reader in Google Sheets 04/20 Provisioning a Raspberry Pi with Ansible (and an iPad) 04/19 Node.js 20 is here 03/25 ChatGPT practical use cases and examples 03/25 Self-hosting miniflux with docker and provisioning with Ansible 03/25 How to add Node.js & npm to jekyll in GitHub Codespaces 03/22 Programming on an iPad 03/21 Minimal Ansible Playbook to provision a server 03/17 3D printing with an iPad, Raspberry Pi and OctoPrint 03/12 Update Node.js version on CloudFlare Pages 02/22 malicious chrome extension 02/22 yubikey spare keys 02/21 'Being agile' vs 'Doing Agile' 02/21 How I edit this site on an iPad 02/10 I cannot wait for the passwordless authentication future of the web 02/02 How to become a better Software Developer 01/22 OpenAI iOS Shortcut: Siri-like ChatGPT 01/13 Artificial "intelligence"

2022

12/27 Voracious RSS 10/22 Escaping the bullshit web 07/18 minimal-analytics, one year later 07/14 Did an ES module migration, and it was okay 07/12 Self-hosting nitter with docker-compose and nginx 06/05 Fix node command not found using nvm 04/23 Screen Wake Lock API 04/08 Elixir GenServer name registration 04/07 Web Workers + search index = decent blog search 03/10 Barcode Detection API 03/04 Kernel.===/3 02/20 WebTransport 01/18 Productive macOS tricks

2021

12/31 elixir alias __module__ 12/30 cons 12/27 Aggregates in domain driven design 12/27 Domain events in domain driven design 12/27 My Domain-Driven-Design study path 12/04 Pattern matching with Enum.map in Elixir 12/02 elixir mix test --stale --listen-to-stdin 11/24 cqrs es with commanded in elixir 11/24 osint framework 11/16 Elixir Ecto guides and tutorials 11/14 redirect route in phoenix 10/30 Most useful mac keyboard shortcut 10/30 What is a charlist in Elixir 10/28 Vex, a validation library in Elixir 10/27 exploring the github cli 09/29 Spoonerism 08/28 QR code 08/01 4 rules of simple design 08/01 Useful homebrew formulas for Mac 07/17 How to execute a remote script with Ansible 07/14 7 Visual Studio Code extensions I regularly use 07/14 Spotlight not working on Big Sur: how to fix Spotlight index on MacOS Big Sur 07/04 duckduckgo short url 07/03 mallet operator 06/07 queueMicrotask 06/06 manjaro connect bluetooth keyboard at login screen 06/03 Experiment: Navigating the web with JavaScript disabled 06/02 Discontinuing comments 06/01 scroll-behaviour 05/23 How many visitors block ads and web analytics? 05/22 How to solve manjaro different login, missing plasma desktop package 05/22 nmtui 05/17 CAPTCHA 05/14 Self-hosting with nginx + docker-compose 05/11 Lazy loading images in 11ty/eleventy 05/11 Simple Server-sent events example in Node.js/JavaScript 05/06 How to test a function that works with time 04/28 Making Minimal Analytics 04/15 Beware of Monero mining attack through GitHub Actions and malicious Pull requests 04/13 Switching to CloudFlare Pages, from AWS S3 + CloudFlare DNS 04/06 Simple Static site/blog search in 14 Lines of JavaScript 04/06 Cos’è e com’è stato sviluppato il Lean Validation Playbook 🇮🇹 04/05 What apps I'm currently self-hosting 03/24 Manage multiple network connections in Manjaro (Wireguard VPN + Pi-hole) 03/23 Self-hosted Miniflux + Wallabag 03/10 Tracking RSS subscriptions with UTM parameters 03/03 Learn Elixir - A study path 02/19 Beware of new Ledger phishing emails from myledgerlive 02/18 Read mbox file with mutt or Thunderbird 02/17 Bitcoin is trademarked. Is it really? 02/11 3D-printed Bitcoin desk watcher 02/09 My reading stack with Miniflux/RSS & Pocket 02/04 My notes while learning Elixir 02/01 5$/month Self Hosted VPN with WireGuard 02/01 Let's learn some Elixir, again 01/30 Comments on cri.dev are BACK 01/28 Put that in the URL, please 01/22 A retrospective of 100k yearly pageviews 01/19 Getting started with Mastodon 01/05 About donations, free and paid content 01/04 Pair AirPods with Linux Ubuntu 01/03 Experimenting with Webmention 01/03 From Mac to Linux 01/02 2020 - A retrospective

2020

12/03 How to convert Pandas Series column values to lowercase 12/02 GreeMta Madrid Green Sustainability challenge 11/28 Notes on 'Blogging for Business' 11/27 Node.js 15 is here 11/25 What is technical debt? 11/18 Cleanup docker dangling images 11/18 Indie makers and the Sunk Cost Fallacy 11/06 Test driving a HackerNews scraper with Node.js 11/06 Tracking HackerNews history in git 11/05 How to make Polls with Plausible Analytics 11/04 Fix npm process killed during npm install 11/03 Communicating with Bangle.js Watch over BLE with Node.js 11/02 Bangle watch as an accelerometer mouse 11/02 How to fix xcode-select no developer tools found 11/02 Top resources for Bangle.js Watch Development 10/21 The High Privacy Cost of a “Free” Website 10/20 Show realtime visitors on your website with Plausible Analytics and CloudFlare Workers 10/17 Notes "Edward Snowden interviewed by Ron Paul" 10/17 Why privacy matters - Glenn Greenwald 10/12 Fast virtual scrolling with preact 10/11 Get things done for real 10/02 Notes on “I've got nothing to hide” 09/24 What is a retrospective? 09/12 Raspberry Pi as a local server for self hosting applications 09/08 'But I have nothing to hide.' 09/03 DIY IoT door monitor with ESP8266 09/01 Simple Time-lapse with a Raspberry Pi 09/01 Watermark images with montage (ImageMagick) 07/28 4 Most powerful Mini-PCs in 2020 07/23 Don't buy the AirPods Pro - Another Rattlegate story 07/21 Simple email trick to manage your newsletters 07/18 Techniques to improve SEO for a static website or blog 07/17 Made 13 Dollars with Brave and Basic Attention token 07/16 How to fix possible EventEmitter memory leak detected 07/14 Simple event tracking with Plausible Analytics 07/08 Notes on 'Marketing for Developers' - devmarketing.xyz 07/06 Aggregations with sub-documents in MongoDB 07/06 Get distinct field names of sub documents in MongoDB 07/06 How to solve Docker 'Incompatible CPU detected' 07/06 How to solve Docker 'docker-credential-desktop not installed or not available in PATH' 06/20 Most valuable developer linux notebooks in 2020 06/07 Install Homeassistant on Raspberry Pi 05/28 Notes on "Code BEAM V 2020" 05/27 Solve Verdaccio EINTEGRITY error 05/26 Authenticated uplinks with verdaccio 05/26 Upgrade HTTP requests with X-Forwarded-Proto Header in HAProxy 05/26 Upgrading MongoDB 3.6 to 4.2 with brew 05/20 Clean up Mac OS: How I freed 35GB of space 05/20 Testing in Node.js by example using the SOLID principles 05/18 Fixing 431 Request Header Fields Too Large in Node.js 05/15 Setting up a Verdaccio npm registry 05/12 Privacy-friendly alternatives to popular services and tools 05/10 Elixir trick: start an Observer window with mix 05/07 Minimal dark mode with CSS and JavaScript 05/07 Validate your RSS feed 05/03 Ad blocking with Raspberry Pi and Pi-hole 05/03 Using µcompress to dramatically optimize static assets 05/01 Nullish coalescing in Node.js 14 and JavaScript 05/01 Optional chaining in Node.js 14 and JavaScript 04/28 Road to Elixir: Monitor Crypto assets 04/24 Resuming Elixir by self-hosting plausible analytics 04/23 How to exclude Google Analytics in your Cypress E2E tests 04/19 devblog: yet another static site generator, seriously 04/07 Preferred Visual Studio Code theme in 2020 04/05 Boring software development 04/04 Full list of Chromium Puppeteer flags and command line switches 03/30 How to connect puppeteer to a Proxy 03/30 How to solve Puppeteer Chrome Error ERR_INVALID_ARGUMENT 03/27 How to solve: Please specify which branch you want to rebase against 03/09 Crawling a web site with browserless, puppeteer and Node.js 03/08 Ultimate web scraping with browserless, puppeteer and Node.js 03/07 How to create a Twitter application for user login with OAuth 03/07 Twitter OAuth Login with fastify and Node.js 03/05 Twitter OAuth Login by example with Node.js 03/04 Send a Telegram message with Darklang 03/02 First steps with Darklang 03/01 About Cloudflare's support for ccTLDs and gTLDs 02/29 Take a photo with raspistill on a Raspberry Pi 02/25 Simple .npmrc management 02/15 Twitter OAuth by example in Node.js 02/13 So Long, and Thanks for All the Veggies 02/08 Connect to MongoDB with monk in Node.js 02/08 Minimal environments with dotenv and Node.js 02/08 Simplest Vanilla JavaScript static site blog search for Jekyll, Hugo, 11.ty 02/05 Lazy loading images in 2020 01/29 Recover from failed lerna publish 01/28 The cleanest way to maintain connect / express middlewares in Node.js 01/03 Raspberry SSH over Wi-Fi not working

2019

12/12 the color fe1 12/11 better web scraping with node.js 12/08 completed hacktoberfest 2019 10/27 my blogging stack in 2020 08/31 Run Cypress Integration Tests with GitHub Actions Workflow 08/30 AWS Lambda + S3 + ffmpeg = Timelapse 08/29 Deploy Eleventy site with Github Actions on AWS S3 08/29 Preferred way of defining flags in bash 08/29 Simple telegram message with GitHub Actions 08/26 Simple ad and trackers blocking with DNS 08/25 Build for a slow connection 07/19 Fun with single letter commands 07/16 Upgrade MongoDB 3 to 4 on Ubuntu 04/07 Get last non-empty cell value in a spreadsheet 04/04 How to fix Ansible error about "undefined variable"

2018

12/09 Notes about Crash course in Machine Learning 11/28 Publishing org scoped npm packages with travis 10/31 my current blogging stack 10/18 Start an npm script with pm2 10/06 Make Anaconda executables available in your PATH (fish shell) 07/11 clean android device storage 07/03 pm2 deploy fast 04/18 Fix Python 2.7 issue on OSX: bad interpreter 04/12 Easy rate limit with Promise.all and p-limit 04/12 Notes about Blockchain for Smart Communities 04/09 Fix issue with Pandoc, MacOS Sierra and pdflatex / xelatex 04/05 Offloading my Inbox items to /discover 02/07 setup nginx as a reverse proxy with basic auth for an upstream 01/31 A story about npm publish / unpublish

2017

12/11 Mapping historic market data 10/21 Building the new version of pomodoro.cc in the open 10/13 Keeping an eye on your Crypto-currency trades with Übersicht 04/15 Loop jekyll data directory files 03/30 My dotfiles 03/27 Prevent accidental quit of iTerm 03/24 how i deploy my site 03/23 how i build my site 03/22 npm package kata 02/24 Trying out Redash 02/22 Chaining and indenting after the return statement 02/10 How to read Hacker Newsletter 02/05 Use Simple-Jekyll-Search on your blog in these easy steps

2016

05/28 Discourse first installation steps 02/03 I was at fosdem 2016 and it was awesome! 01/07 Forking is a commitment

2015

11/23 Using a daily activity log 10/25 Elixir Plug order matters! 10/24 Jekyll new post script 10/20 Introduction to AngularJS 10/19 What Elixir and Angular have in common 10/18 Favor Viewmodel over $scope 10/15 Always $digest after you expect 08/12 How to invalidate AppCache 07/07 The simplest way to set vagrant default directory 07/05 Backup mongodb from a docker container to host 07/04 Conforming to protocols in JavaScript 05/09 Functional JavaScript: Write your own negate/not function 05/09 Write a damn README 04/27 About business value and confidence in legacy projects 04/23 Angular ui-router: define multiple states with same base url 03/06 Speed up your docker container by caching node_modules 03/04 How to make a pull request on GitHub from the command line 02/23 How to use morgan with node-simple-router 02/21 Start your coding kata the right way 01/17 Write your Protractor tests in Cucumber 01/16 How to zsh and hub auto completition 01/09 Debugging acceptance tests with Angular and Cucumber

2014

12/23 Keep Docker container running 10/27 A list of Angular style guides 08/22 Angular: Filter already selected items from ng-options 08/20 PhoneGap issue, 'device ready' not fired after 5 seconds 08/03 How to configure Drone behind an nginx proxy on a subdomain 08/02 How to setup Drone CI on a DigitalOcean droplet 07/05 A practical workflow for resizing images with ImageMagick 06/30 DRY dependency injection in Angular with gulp-ng-annotate 05/26 A closer look at Angular's dependency injection 03/04 Updating dynamic fields and nested arrays in MongoDB 01/19 node and sudo: now kiss 01/18 Simplest Apache configuration for hosting multiple sites 01/05 Create a new Github repository from the command line 01/04 About vanity metrics and social media bullshit

2013

10/12 Simple templating with regular expressions 09/17 Keep SSH connection alive 07/16 How to: Gzip compression of CSS and JS files on S3 with s3cmd 06/06 How to lazy load Disqus comments 05/08 Auto mount partition on Linux the easy way 04/20 Berlin - April 2013 03/29 Replace links in files with Regular Expressions

2012

12/23 How to index a NTFS partition on Mac