Posts tagged "featured"

Cos’è e com’è stato sviluppato il Lean Validation Playbook

Published on

Il Lean Validation Playbook

Insieme a Fightbean e Matteo Cavucci abbiamo costruito il Lean Validation Playbook.

Che cos'è?

The Lean Validation Playbook è una raccolta di metodi per testare idee e soluzioni legate alla creazione di prodotti digitali e affronta il lato operativo che manca a molte strategie di business.

In questo post descrivo come abbiamo messo online un sito statico con 11ty e altri strumenti utilizzati per organizzare il lavoro.

Simple Static site/blog search in 14 Lines of JavaScript

Published on
#javascript #blogging 

This is my approach to a purely client side search feature for static blogs and sites.

I am currently using this under /posts to let readers search through my blog posts.

Read more below about how to integrate it in your site.

What apps I'm currently self-hosting

Published on
#self-hosting #docker 

Wanted to share what apps & services I'm currently self-hosting on my small Linode VPS


Using docker-compose, nginx and CloudFlare

Everything runs smoothly on a "Nanode" (Linode's version of a 5$/month VPS with 1GB RAM, 25GB SSD, 1 CPU)

Manage multiple network connections in Manjaro (Wireguard VPN + Pi-hole)

Published on
#vpn #privacy #linux 

Found a way to easily connect and disconnect from a network in Manjaro.

The solution is having separate connections for your Wireguard VPN or Pi-hole instance, alongside your usual network you connect to.

Self-hosted Miniflux + Wallabag

Published on
#rss #self-hosting 

Found the perfect combination for self-hosting my reading stack: Miniflux and Wallabag, you may now kiss!

Tracking RSS subscriptions with UTM parameters

Published on
#rss #analytics 

UTM parameters are used since the dawn of time to track marketing campaigns.

Can you use them to reduce dark/direct traffic and label RSS subscriptions?

Learn Elixir - A study path

Published on
#elixir #elixirdash 

Below you can find resources for getting started with Elixir.

Bitcoin is trademarked. Is it really?

Published on

Bitcoin, the cryptocurrency invented in 2008 by an unknown person or group of people using the name Satoshi Nakamoto, is trademarked? Is it really?

3D printed Bitcoin desk watcher

Published on

This is something I wanted to build for a long time: a Bitcoin price watcher and indicator as an elegant desk accessory.

My reading stack with Miniflux/RSS & Pocket

Published on
#rss #open-source #self-hosting 

I want to outline the tools I use to consume textual content, and why it perfectly fits my needs.

Who knows, maybe this can be helpful for you too.

My notes while learning Elixir

Published on
#elixir #elixirdash 

These are my notes for learning Elixir.

Let's learn some Elixir, again

Published on
#elixir #elixirdash 

Setting myself the challenge to learn Elixir, again.

5$/month Self Hosted VPN with WireGuard

Published on
#vpn #privacy 

This will take you less than 5 minutes to get a private VPN on your own Ubuntu server.

A retrospective of 100k yearly pageviews

Published on
#analytics #seo 


70k visitors / 100k pageviews (excluding those with analytics blockers installed) reached this very website in the last year.

Getting started with Mastodon

Published on
#fediverse #social 

First of all, what is Mastodon?


it's a network of thousands of communities operated by different organizations and individuals that provide a seamless social media experience

From Mac to Linux

Published on
#linux #mac 

2020 - A retrospective

Published on

Notes on 'Blogging for Business'

Published on
#blogging #marketing #business 

Here you can find my notes about the course "Blogging for business" by

I highly recommend following the step by step course to convert your blogging from a waste of time to a source of potential customers and sales.

Node.js 15 is here

Published on
#nodejs #javascript 

Node.js 15 has been released, with exciting changes and improvements!

What is technical debt?

Published on
#software #cleancode #technicaldebt 

In a sentence:

Anything about your code and development environment that slows you down.

Indie makers and the Sunk Cost Fallacy

Published on
#indie #economics 

The Sunk Cost Fallacy is a real pain.

It's a cost that you sustained in the past (be it time, money, energy, whatever) and cannot be reversed, cancelled or undone.

The fallacy is that yet knowing about the sunk cost of a project, you are often tempted to justify your future investments because of your past (most likely lost) investments.

The sunk cost should not influence your future decisions, yet it does. And the outcomes are often delusion, sadness and stress.

Tracking HackerNews history in git

Published on
#hackernews #scraping #automation 

First of all: this is based on the idea of and

The gist:

  • every 20min
    • scrape hackernews frontpage items
    • save them in hn.json
    • commit and push

Find the git repository here at christian-fei/hn-history

Test driving a HackerNews scraper with Node.js

Published on
#tdd #nodejs #testing #cleancode #refactoring #javascript 

This is a short summary of my experience while writing a simple HackerNews scraper.

As a pure exercise or kata if you want, I tried to apply Clean code, Refactoring and Testing priciples for this small npm module.

The task is simple:

Get the posts on the front page of and parse them.

How to make Polls with Plausible Analytics

Published on
#plausible #analytics #privacy 

Plausible Analytics recently introduced Custom props for events (here the docs).

This was the perfect opportunity for me to implement an idea I had long time ago: (Privacy-friendly) Polls with Plausible Analytics!

The idea is to use Plausible's Custom props and hook them up to a simple poll component in JavaScript!

Let's get started 🚀

Bangle watch as an accelerometer mouse

Published on
#bangle #iot #nodejs 

Recently I got myself a treat: a Bangle.js Watch! ⌚️

It's a pretty awesome, open-source watch based on Espruino and Node.js, and much more! 🤓

Read about my experiments here especially for creating a mouse-watch app with Node.js and Bluetooth Low Energy!

Why privacy matters - Glenn Greenwald

Published on

My notes about the Ted X talk by Gleen Greenwald at Ted X Global 2014.

The recording of the talk can be found here on

Notes "Edward Snowden interviewed by Ron Paul"

Published on

These are my notes about the Interview of Edward Snowden by Ron Paul at the Liberty Report.

Video can be found here on

Fast virtual scrolling with preact

Published on
#preact #react #javascript 

If you need to show many list items, one common technique to overcome this issue, is to apply the concept of "virtual scrolling".

Get things done for real

Published on
#gtd #getthingsdone #lean 

Read about how I personally get things done.

Notes on “I've got nothing to hide”

Published on

Recently I stumbled upon this paper about “I've Got Nothing to Hide” and Other Misunderstandings of Privacy by Daniel J. Solove

Do yourself a favor and read it here

Raspberry Pi as a local server for self hosting applications

Published on
#raspberrypi #opensource #self-hosting 

Doing an experiment with my RPi 4, using it as a small but powerful local server.

My current PC is a 10 year old Macbook Pro 13" 2010, which is sluggish sometimes.

So I want to offload some heavy tasks (ffmpeg time-lapse creation, long-running tasks and services) to the Raspberry Pi and connect to it either via LAN or Wi-Fi.

Below you can read my findings about performance, applications and general issues I encountered and tried to solve.

DIY IoT door monitor with ESP8266

Published on
#iot #electronics #diy 

Using an ESP8266 for IoT projects makes me go fast while prototyping.

The compact format is perfect for small DIY devices.

Wi-Fi connectivity is built-in, and it's super affordable.

The ESP8266 is a low-cost Wi-Fi microchip, with a full TCP/IP stack and microcontroller capability (wikipedia)

Simple Time-lapse with a Raspberry Pi

Published on
#raspberry #iot #hardware 

Time-lapses always fascinated me. So I wanted to create one on my own.

Had a spare Raspberry Pi Zero W catching dust, you can purchase one for ~ 25$ and the related Raspberry Pi Camera module for < 20$.

4 Most powerful Mini-PCs in 2020

Published on

Rough overview

Chuwi HeroboxIntel Gemini-Lake N41008GB LPDDR4
Intel NUCIntel Core i3 8109UMax 32GB DDR4 2400 MHz
AcePC AK1Intel Celeron Apollo Lake J34558GB DDR3 SDRAM
Coofun CJ34Intel Apollo Lake Celeron J34558GB LPDDR4

Simple email trick to manage your newsletters

Published on
#email #trick 

Struggling with dozens of newsletters in your inbox? (or should I say "Imbox"? </troll>)

I use this super simple organizational trick / habit when signing up for newsletters.

Techniques to improve SEO for a static website or blog

Published on
#blog #seo 

To be found, you need to describe yourself well to computers

SEO is as important as a good mailing-list to reach your (potential) audience.

Over the past 10 years, I've made some mistakes and also took home some knowledge about SEO for blogs and websites.

Below I've compiled a list of techniques and code-snippets that I personally use (hint: view-source) to improve for organic website traffic and SEO.

To make your content more enjoyable by users (social media sharing, RSS, search results) and descriptive to machines (SEO).

Made 13 Dollars with Brave and Basic Attention token

Published on

After using Brave for almost a year, I can extract some stats from its usage over time:

  • 152,906 trackers blocked
  • 2,26GB of bandwidth saved
  • "2,1 hours saved" (no clue how this is calculated)

But more importantly, I made some bucks!

Simple event tracking with Plausible Analytics

Published on
#javascript #analytics 

Do you want to know how users make use of your site? Which links they click most and what converts most?

From the official documentation you can trigger custom events via JS, by including a small utility function plausible:

window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }

Whenever you call plausible('...event...') you put a tracking event in a queue (window.plausible.q) and will be tracked.

Notes on 'Marketing for Developers' -

Published on
#marketing #landing 

Purchased a convenient bundle of "Marketing for Developers" a few years ago. Time passes, and nearly forgot about the book and course. Priorities. Life. You know, first world problems.

Resumed the course, this time for real, and I’m trying to motivate myself by taking notes about my learnings.

Buy it here Marketing for Developers – advice for programmers, software, and SaaS

Get distinct field names of sub documents in MongoDB

Published on

Let's say you have these documents in your collection items:

Aggregations with sub-documents in MongoDB

Published on

I would like to extract statistics about sub-documents in a collection.

E.g. in the form of count, sum and average for each field

Let's say you have the following documents in the items collection:

{ "_id" : ObjectId("5f034ce90b15686f5d78baed"), "subDocument" : { "field1" : 42, "field3" : 10 } }
{ "_id" : ObjectId("5f034ce90b15686f5d78baee"), "subDocument" : { "field2" : 14, "field3" : 6 } }
{ "_id" : ObjectId("5f034ce90b15686f5d78baef"), "subDocument" : { "field1" : 6, "field4" : 11 } }
{ "_id" : ObjectId("5f034cea0b15686f5d78baf0"), "subDocument" : { "field3" : 3, "field4" : 26 } }

How would you solve the use-case of aggregating each field of the subDocument's dynamically?

Event without actually "knowing" which fields are contained in subDocument?

Most valuable developer linux notebooks in 2020

Published on
#linux #notebook #developer 

Recently I got into Linux again after a long hiatus.

I fell in love with Pop!_OS by System76.

Ubuntu 20.04 also looks gorgeous and made me want to go back to the Linux side.

So I started looking for a worthy laptop for the job, with excellent support for Linux, and these are my findings.

Install Homeassistant on Raspberry Pi

Published on
#raspberry #iot #homeassistant #automation is the latest great tool I discovered, it's simply a beautiful piece of technology.

Open source home automation that puts local control and privacy first

I recommend installing the Hass OS on a Raspberry Pi 4 with an SD Card of at least 32GB.

Notes on "Code BEAM V 2020"

Published on
#elixir #elixirdash #elixirlang #myelixirstatus 

What: Code BEAM V official website

When: 2020/05/28 - 2020/05/29

Where: On the interwebz

Schedule: code-beam-v#schedule

Authenticated uplinks with verdaccio

Published on
#nodejs #javascript #npm #npmregistry #registry 

How to configure authenticated uplinks with Verdaccio.

Clean up Mac OS: How I freed 35GB of space

Published on

My disk space was running low. I had less than 100MB of free space. I was sick of running low on disk space.

Clean My Mac wasn't an option. I don't want to spend 40$ for a cleaning tool, if you're so inclined feel free to do it.

Fixing 431 Request Header Fields Too Large in Node.js

Published on
#nodejs #javascript 

You're seeing a blank page saying "HTTP_ERROR 431"?

And you're running a Node.js HTTP server, like express or fastify?

Setting up a Verdaccio npm registry

Published on
#nodejs #javascript #npm #npmregistry #registry 

In case the npm registry goes down, it's wise to have a backup registry.

Privacy-friendly alternatives to popular services and tools

Published on
#privacy #foss 

privacy matters, and coherence costs


I tried to do a self-examination, reflecting on what matters to me about Privacy.

Being more aware of what you share while browsing the web comes with experience and can be seen as a journey.

Elixir trick: start an Observer window with mix

Yesterday I wanted to monitor the processes that my Elixir application was spawning.

I knew there was something called Observer, but couldn't remember exactly how to do it.

Taking a look at the doc, I found this debugging page that mentioned :observer.start().

The suggested usage was with iex -S mix and then running :observer.start() in the mix shell manually.

I don't like manual things that much.

Validate your RSS feed

Published on
#rss #testing #CI #blogging 

Today a dear user made me aware that my RSS feed broke. There was a XML Parsing Error for

ASAP after work I checked the validity through and in fact there were some issues with it.

Minimal dark mode with CSS and JavaScript

Published on
#javascript #css #darkmode 

Dark mode is everywhere nowadays. Personally using darkreader as an extension of Brave browser, and I'm loving it.

But if you want to roll your own, for fun or for whatever reason, continue reading to understand how I did it.

Using µcompress to dramatically optimize static assets

Published on
#javascript #blogging 

µcompress is a lovely utility by WebReflection that compresses common static files.

A micro, all-in-one, compressor for common Web files

Using it since commit ce0a9e on this very website, in my GitHub Actions workflow.

Ad blocking with Raspberry Pi and Pi-hole

Published on
#raspberry #adblocking 

Sick of ads on the Web, YouTube and other services?

Do you have a Raspberry Pi (4, 3, or even a Zero like me) laying around collecting dust and you want to make use of it?

Use it for ad-blocking in your home network and to finally browse the web, watch videos etc. without annoying ads.

Optional chaining in Node.js 14 and JavaScript

Published on
#javascript #nodejs 

A long awaited feature of the language and runtime has been released and is available in Node.js 14 (and modern browsers): Optional chaining!

Nullish coalescing in Node.js 14 and JavaScript

Published on
#javascript #nodejs 

The Nullish coalescing operator in useful to handle default values, without short-circuiting on values that result as falsy.

Falsy values are undefined, null, false, 0, NaN, and '' in JavaScript, and sometimes you want to retain those values, explicitly excluding null and undefined.

Road to Elixir: Monitor Crypto assets

Let's try to monitor crypto assets through the Coinmarketcap API, with Elixir!

Topics I want to explore in this exercise are:

  • Elixir Supervision trees
  • HTTP calls with Elixir (with HTTPoison)
  • TDD and Refactoring

Resuming Elixir by self-hosting plausible analytics

As soon as Elixir was released a few years ago, I got into it and started learning and building things with it.

Thanks to the help of some dear colleagues I had the opportunity to get valuable feedback and learn even more concepts about GenServers, the BEAM virtual machine, ETS and Erlang+Elixir in general.

I also went to my first Erlang+Elixir conf, and had the chance & honour to meet Joe Armstrong, #rememberingjoe.

On 2020/04/22, during quarantine, I decided to get back to Elixir (who knows: maybe even dabble with Erlang directly).

I post-poned this too much now, it's time to get back to the distributed programming world.

Without further ado, below my journey (in form of a daily journal) about learning more about Elixir (again), the BEAM, plausible analytics and things discovered along the way!

devblog: yet another static site generator, seriously

devblog is yet another lightweight static site generator.

Although there are widely used SSG like 11ty (which this blog was previously based on), Jekyll (also previously used), GatsbyJS and many others, I wanted to get my hands dirty and understand how to make the process of building a static blog even simpler, if possible.

Even simpler in the sense of "it does just what I need and nothing more".

Install via npm i -g devblog or create a blog with a one-liner npx devblog init my-new-blog, cd my-new-blog and serve with npx http-server _site 8080. It's that easy.

Rebuild the blog by running npx devblog (or npm i -g devblog and then just run devblog in the main directory)

Continue reading my story of building devblog.

Full list of Chromium Puppeteer flags and command line switches

Published on
#puppeteer #scraping 

After quite a bit of research, I found the full list of Chromium Command Line Switches.

How to connect puppeteer to a Proxy

Published on
#puppeteer #javascript #scraping 

In a previous post I tried to explain how to troubleshoot an issue when connecting to a Proxy with Puppeteer investigating API documentations , Chromium flags and all that funny jazz..

Crawling a web site with browserless, puppeteer and Node.js

Example repository and explanation to a practical crawling with browserless and puppeteer.

Ultimate web scraping with browserless, puppeteer and Node.js

Browser automation built for enterprises, loved by developers. is a neat service for hosted puppeteer scraping, but there is also the official Docker image for running it locally.

I was amazed when I found out about it 🤯!

Find the whole source code on Github christian-fei/browserless-example!

Twitter OAuth Login with fastify and Node.js

Published on
#nodejs #javascript #twitter #oauth #fastify 

GitHub example repo

At christian-fei/twitter-oauth-login-in-nodejs on GitHub you can find the whole source code.

Learn how to create a Twitter OAuth Application

Twitter OAuth Login by example with Node.js

Published on
#nodejs #javascript #twitter #oauth 

Lately I found myself dealing with Twitter and Google OAuth (1.0a and 2.0) to authorize a user to act on their behalf, namely reading profile information, reading and posting content on their behalf or other common permissions.

Since my process of trying to understand and make sense of OAuth has been both fun and rough, I wanted to summarize a full example in a single JavaScript file and document other findings along the way.

First steps with Darklang

Published on

What is it?

Programming language, editor, and infrastructure for building backends

Functional / imperative hybrid language is influenced by Elm, Rust, OCaml, Swift, Ruby on Rails, Clojure, TypeScript.

Take a photo with raspistill on a Raspberry Pi

Published on

raspistill is the command line tool for capturing still photographs with the camera module.

Here you can find the official docs.

Twitter OAuth by example in Node.js

Published on
#javascript #nodejs 

Curious about how to call an HTTP API like Twitter or GitHub by authenticating through OAuth (1.0a and 2.0)?

Read more about how to do it with Node.js

Learn how to create Twitter login with OAuth 1.0a.

So Long, and Thanks for All the Veggies

Published on


As much as it hurts, this action had to be taken due to apparent trademark issues with the word pomodoro. has to close.

Minimal environments with dotenv and Node.js

Published on
#javascript #nodejs 

Personally I use dotenv to handle different environments in my Node.js applications.

It gives you the ability to specify a .env file (generally provisioned on each environment with the corresponding environment variables), along these lines:

Connect to MongoDB with monk in Node.js

Published on
#javascript #nodejs 

An example of connecting to mongodb with the Monk NPM module.

Recover from failed lerna publish

Published on
#javascript #nodejs 

Lately, I was having issues with lerna while trying to publish packages from a mono-repo.

The problem was that lerna, sometimes, failed while publishing the changed packages (with the command lerna publish --conventional-commits)!

The cleanest way to maintain connect / express middlewares in Node.js

Published on
#javascript #nodejs 

I want to share how I maintain my connect / express middlewares for simple HTTP APIs in Node.js

The code snippets below are taken from api source code.

my blogging stack in 2020

Published on

Deploy Eleventy site with Github Actions on AWS S3

Published on
#javascript #nodejs 


I finally managed to get the deployment of an eleventy - 11ty site (namely this one) and sync with AWS S3, where this blog is hosted.

Build for a slow connection

Published on

speed matters

trying to work on your pc in 2019 is the worst if you are experiencing a slow internet connection.

Publishing org scoped npm packages with travis

Published on
#javascript #nodejs 

If you stumbled upon this article, you are probably seeing the following error message on travis in the deployment stage:

A story about npm publish / unpublish

Published on
#javascript #nodejs 

Today I sat down and wrote a tiny package called wait-for-user-input. it can be used to wait for stdin input in a command line script.

My dotfiles

Published on

Join other 100+ developers!
Consider subscribing if you are into topics like DIY, Node.js, Elixir and more.

View the past editions of my newsletter