Generare i report di Lighthouse usando NodeJs

Qualche settimana fa ti ho parlato dell’importanza delle performance (misurate tramite i segnali Core Web Vitals) nel definire la posizione di un sito web all’interno dei risultati di ricerca di Google.

Nell’articolo dicevo che uno degli strumenti principali per l’analisi delle performance di un sito web in sviluppo è proprio Lighthouse che, per ogni pagina del sito, permette di eseguire tutta una serie di test da mobile e da desktop in modo da ottenere istantaneamente un report con le criticità da sistemare.

Poiché fare una scansione completa di un sito web richiede di far girare l’analisi di Lighthouse due volte (mobile e desktop) per ogni pagina i tempi necessari a compiere lo studio possono allungarsi notevolmente. Proprio per evitare di dover fare a mano questo lavoro macchinoso ti spiego come automatizzare il processo utilizzando poche righe di JavaScript.

Ma prima di addentrarci nel codice mi presento: sono Lorenzo Millucci e sono un ingegnere del software che ama lavorare con Symfony e a cui piace condividere in questo blog le cose che impara. Non perderti anche il mio canale Telegram in cui ogni martedì parliamo di news e curiosità legate al mondo della tecnologia!

Creazione del report con JavaScript

La prima cosa da fare per iniziare è chiaramente quella di installare da npm il package di Lighthouse (è richiesta la versione di Node 12 o superiore):

npm install --save lighthouse

Una volta completata l’installazione del pacchetto puoi creare lo script che dovrà prendere in ingresso una lista di URL da analizzare e, per ognuno di essi, salvare il report generato da Lighthouse sia con la simulazione di navigazione da un dispositivo mobile che da uno desktop.

Questo è lo script che mi sono creato:

const fs = require('fs');
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');

// L'elenco delle pagine da analizzare
const pages = [
    'https://www.lorenzomillucci.it/',
    'https://www.lorenzomillucci.it/lorenzo-millucci-chi/',
    'https://www.lorenzomillucci.it/2021/01/19/core-web-vitals-cosa-sono-a-cosa-servono-e-come-si-misurano/',
];

// Carica le stesse configurazioni usate da lighthouse web per il test da mobile e da desktop
const desktopConfig = require('lighthouse/lighthouse-core/config/lr-desktop-config.js');
const mobileConfig = require('lighthouse/lighthouse-core/config/lr-mobile-config.js');

(async () => {
  // Avvio di Chrome headless
  const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});

  // Opzioni specifiche per lighthouse
  const options = {
    logLevel: 'silent', 
    output: 'html',
    port: chrome.port
  };

  for (page of pages) {
    console.log('Testing mobile...');
    const runnerResultMobile = await lighthouse(page, options, mobileConfig);
    fs.writeFileSync(`mobile_${new Date().toUTCString()}.html`, runnerResultMobile.report);

    console.log('Testing desktop...');
    const runnerResultDesktop = await lighthouse(page, options, desktopConfig);
    fs.writeFileSync(`desktop_${new Date().toUTCString()}.html`, runnerResultDesktop.report);
  }

  await chrome.kill();
})();

Eseguendo questo script verranno salvati come file HTML i due report completi (performance, PWA, SEO, accessibilità e best practices) che lighthouse avrebbe generato per desktop e mobile per ogni pagina elencata.

I due report HTML generati dallo script

Se avessi la necessità di fare delle analisi più dettagliate e ti servisse avere i risultati del report in formato machine-readable puoi esportare il report in formato CSV o JSON. Per farlo basta cambiare l’opzione output come segue:

  const options = {
    logLevel: 'silent', 
    output: 'csv', // Oppure json
    port: chrome.port
  };

Ottenere solo i punteggi globali di ogni categoria di test

Nelle fasi di sviluppo di una pagina web può essere utile valutare solo l’impatto di ogni singola modifica sul punteggio globale senza la necessità di avere tutti i dati contenuti nel report. Per ottenere gli score assegnati ad ogni categoria puoi accedere direttamente alle seguenti proprietà del report:

console.log("Performances", runnerResultMobile.lhr.categories['performance'].score * 100);
console.log("Accessibilità", runnerResultMobile.lhr.categories['accessibility'].score * 100);
console.log("Best-practices", runnerResultMobile.lhr.categories['best-practices'].score * 100);
console.log("SEO", runnerResultMobile.lhr.categories['seo'].score * 100);
console.log("PWA", runnerResultMobile.lhr.categories['pwa'].score * 100);

Velocizzare l’analisi di Lighthouse

Un altro caso che può succedere in fase di sviluppo di un sito web è quello di avere la necessità di focalizzare l’attenzione solo su una certa tipologia di dati tra quelli contenuti nel report di Lighthouse (es. solo le performance) senza prendere in considerazione tutti gli altri test svolti dallo strumento. In casi come questo può essere utile configurare Lighthouse in modo da limitare la categoria di test effettuati in modo da guadagnare anche un po’ di tempo nel tempo di generazione del report.

Ad esempio, per limitare l’analisi alle sole performance ti basta è modificare l’oggetto options aggiungendo onlyCategories: ['performance'] nel seguente modo:

  const options = {
    logLevel: 'silent', 
    output: 'html', 
    onlyCategories: ['performance'], 
    port: chrome.port
  };

Naturalmente è possibile limitare il report ad una qualunque altra categoria di test o, addirittura, personalizzare il report combinando più categorie. Tutto ciò di cui hai bisogno è modificare opportunamente la chiave onlyCategories.

Conclusioni

Conosci la storia dei due boscaioli che si sfidano in una gara per determinare chi fosse riuscito a tagliare prima un albero? Se non la conosci la trovi qui.

In pratica alla fine della sfida non vince il boscaiolo che d’impegno si era messo a tagliare l’albero senza mai fermarsi ma vince l’altro che nonostante si fosse riposato 10 minuti dopo ogni ora si era preso la briga di affilare l’ascia ad ogni pausa.

Analizzare un sito web con Lighthouse è un po’ come la sfida tra i due boscaioli in cui ci si può buttare a capofitto nel generare a mano i report per ogni pagina oppure ci si può fermare e “affilare l’ascia” creando uno script che esegua tutti i test in successione in una sola volta.

In questo articolo ti ho mostrato come fare a generare esattamente lo stesso report che è possibile ottenere con Lighthouse da Google Chrome. Naturalmente il modulo Node ha molte altre opzioni di cui non ho parlato che ti consentono di generare dei report su misura per il tuo caso specifico. Per saperne di più ti lascio il link diretto alla documentazione ufficiale del modulo.


Se questo post ti è stato utile puoi farmelo sapere lasciando un commento qui sotto oppure scrivendomi direttamente a t.me/lorenzomillucci.
Inoltre ti invito ad iscriverti al mio canale Telegram e a seguirmi su Twitter per non perderti nemmeno un post del mio blog. A presto!

Software engineer presso Slope.
Appassionato di videogame, nel tempo libero mi diletto a scrivere su questo blog.
Per non perderti nemmeno un post puoi seguirmi su Telegram!

Core Web Vitals: cosa sono a cosa servono e come si misurano

Ti sarà sicuramente capitato di navigare su di un sito inusabile a causa degli infiniti tempi di caricamento e della quantità smodata di banner di ogni sorta. Esperienza terribile.

Proprio l’esperienza di navigazione dell’utente sta per diventare uno dei fattori con cui Google deciderà l’ordinamento dei risultati del motore di ricerca.

Nella pagina about di Google si legge che lo scopo fondamentale del motore di ricerca è:

La nostra missione è organizzare le informazioni a livello mondiale e renderle universalmente accessibili e utili.

https://about.google

Organizzare le informazioni a livello mondiale significa trovare e catalogare tutte le pagine web esistenti in modo da fornire i migliori risultati possibili sulla base delle parole chiave digitate dall’utente.

Ma Google non si limita a classificare i risultati solamente in base al contenuto. Immagina di cercare una parola chiave come “miglior software gestionale per hotel” su Google.

Ti sei mai chiesto come faccia il motore di ricerca a decidere l’ordinamento con cui sono mostrati i risultati quando tutte le pagine hanno contenuti più o meno simili tra loro? Al fine di fornire anche in queste situazione i migliori risultati possibili, Google dichiara di tenere in considerazione oltre 100 fattori differenti!

E tra i fattori presi in considerazione, a partire dalla prima metà del 2021, uno che guadagnerà maggiore importanza nella definizione dell’ordinamento dei risultati di Google sarà proprio la così detta Page Experience. Proprio per misurare in maniera oggettiva la qualità di navigazione di un sito web Google aveva introdotto qualche anno fa i segnali Core Web Vitals. Nei prossimi mesi questi indicatori verranno inclusi all’interno del punteggio della Page Experience e da Maggio 2021 diventeranno un fattore di ranking a tutti gli effetti.

Questo vuol dire che a parità di contenuto un sito pulito, veloce a caricarsi e di facile consultazione verrà favorito rispetto ad un sito lento, pesante e complesso da usare.

NOTA: Chi si intende di ottimizzazione per i motori di ricerca conosce benissimo il motto “content is king” che sta a significare che il contenuto informativo il vero motivo per cui gli utenti aprono un sito. Questo motto continuerà ad essere valido anche con l’avvento dei Core Web Vitals tra i fattori di ranking. Un sito con il contenuto confuso e sgrammaticato ma con segnali Vitals al top continuerà ad essere penalizzato rispetto ad un sito con contenuto di qualità ma scarse performance.

Ma prima di trattare nel dettaglio dei Core Web Vitals mi presento: sono Lorenzo Millucci e sono un ingegnere del software che ama lavorare con Symfony e a cui piace condividere in questo blog le cose che impara. Non perderti anche il mio canale Telegram in cui ogni martedì parliamo di news e curiosità legate al mondo della tecnologia!


Indice


Cosa sono i segnali Core Web Vitals

I segnali Core Web Vitals sono degli indicatori che servono a rispondere alla domanda: “Qual’è l’esperienza di navigazione che il mio sito sta offrendo?”.

Secondo Google i concetti su cui si basa una navigazione di qualità sono tre:

  • Velocità: la navigazione deve avvenire senza la necessità di attendere tempi infiniti di caricamento tra una pagina e l’altra;
  • Interattività: una volta che il contenuto è stato mostrato a schermo l’utente non deve attendere un’infinità di tempo prima di poter interagire con la pagina;
  • Stabilità visuale: il contenuto della pagina non deve subire spostamenti mano a mano che i contenuti vengono caricati (es. viene caricato un banner pubblicitario che fa si che il testo venga scrollato più giù nella pagina).

Questi concetti possono essere misurati utilizzando rispettivamente le seguenti metriche:

  • Largest Contentful Paint (LCP): il caricamento dovrebbe avvenire entro 2.5s
  • First Input Delay (FID): dovrebbe essere possibile interagire con la pagina entro 100ms dal caricamento
  • Cumulative Layout Shift (CLS): il punteggio relativo alla stabilità non dovrebbe essere superiore a 0.1

I report di Google mostrano come un sito che soddisfi a pieno i requisiti di qualità appena definiti abbia un tasso di abbandono più basso del 24% rispetto ad uno sito che non li rispetta.

Misurare i Core Web Vitals

Ora che hai capito le motivazioni che hanno spinto Google ad introdurre i Core Web Vitals come indicatore dell’esperienza di navigazione percepita dall’utente vediamo come misurarli praticamente.

Una prima importante differenziazione da fare nella misura dei segnali Vitals è la distinzione tra “dati sul campo” e “dati sintetici”. I primi sono i dati raccolti da Google tramite l’analisi dei visitatori reali del sito web mentre i secondi sono dati ottenuti in laboratorio simulando quello che potrebbe essere il comportamento dell’utente nel sito.

Google (ovviamente) utilizza i dati sul campo per determinare l’ordinamento dei risultati di ricerca e ti farò vedere non sono facilmente accessibili. I dati sintetici invece possono essere generati facilmente e sono utilizzati principalmente dagli sviluppatori per individuare quali possono a cui gli utenti vanno incontro.

Google offre diversi strumenti per la misura dei Core Web Vitals che coprono diversi aspetti dello stesso problema e in particolare gli strumenti più usati sono:

  • Google Search Console
  • PageSpeed Insight
  • Lighthouse
I 3 strumenti più utilizzati per la misurazione dei segnali Core Web Vitals

Search Console

La Search Console è un servizio di Google dedicato ai webmaster con il quale è possibile monitorare e gestire la presenza del tuo sito nei risultati della ricerca Google.

Tra i vari report che è possibile consultare nella Search Console ne puoi trovare proprio uno dedicato interamente ai segnali Core Web Vitals.

Il report sui segnali web essenziali di Google Search Console

Il report della Search Console mostra i “dati sul campo” ed è ottimo per individuare rapidamente i problemi comuni a più pagine del sito visto che tutte le pagine con problematiche simili vengono raggruppate insieme. Ad esempio, se più pagine del sito hanno un layout comune con una grossa immagine in copertina, è molto probabile che il loro punteggio circa il Largest Contentful Paint (LCP) sia simile. In questi casi il report di Google segnalerà un eventuale problema su tutte le pagine.

Per farla breve la Google Search Console è lo strumento giusto da utilizzare per identificare eventuali problemi di performance a livello globale del sito. Lo svantaggio principale però della Console è che ogni punto del grafico è la media dei punteggi alle performance dei 28 giorni precedenti. Questo vuol dire che un miglioramento fatto oggi non sarà visibili nel report prima di un mese.

PageSpeed Insights (PSI)

PageSpeed Insight è un applicativo web di Google che permette di vedere nella stessa pagina sia i dati sul campo (se disponibili) che quelli sintetici. Tutto ciò che devi fare per ottenere il report di PageSpeed Insight è inserire l’URL della pagina da analizzare nell’applicazione e premere invio.

L’analisi del punteggio di questo blog da desktop secondo PageSpeed Insight

L’analisi svolta da questo strumento è relativa al singolo URL specificato e solo nel caso in cui la pagina sia frequentata da un numero sufficientemente alto di visitatori è possibile vedere i dati raccolti sul campo, altrimenti saranno mostrati solo dei dati sintetici raccolti tramite test automatici.

All’interno della pagina dei risultati dell’analisi sono presenti anche dei consigli relativi alle aree su cui concentrare l’attenzione per migliorare il punteggio della pagina. (Attenzione si tratta di suggerimenti ottenuti dal test sintetico eseguito sulla pagina, gli utenti reali potrebbero riscontrare problematiche differenti).

In breve, tramite l’analisi della PageSpeed Insight è possibile analizzare con precisione i dati reali delle performance misurate dai visualizzatori del sito per una determinata pagina.

L’obiettivo di questo strumento dovrebbe essere quello di mettere a confronto i dati reali con quelli sintetici così da vedere se c’è un’effettiva corrispondenza in modo da scongiurare l’ipotesi per cui i dati sintetici siano migliori di quelli effettivamente riscontrati dagli utenti.

Il problema principale di questo report è che se la pagina da analizzare non è sufficientemente trafficata otterrai solo i dati sintetici (misurati tramite Lighthouse).

Lighthouse

Lighthouse è uno strumento automatico di analisi dei siti web incluso all’interno di Chrome (o anche il nuovo Edge basato su Chromium).

Questo strumento è principalmente rivolto agli sviluppatori e ha come finalità la raccolta di dati sintetici sulle performance di un sito.

Lighthouse in particolare permette di ricavare vari report:

  • Performance del sito: è il report che contiene le metriche legate alle prestazioni (tra cui i Core Web Vitals) ed è in grado di fornire agli sviluppatori vari suggerimenti sulle aree in cui intervenire per migliorare l’esperienza dell’utente.
  • Progressive Web App: questo report è rilevante solo nel caso in cui abbinata al sito ci sia una PWA e serve ad identificare se il sito web aderisce a tutti gli standard richiesti ad una PWA.
  • Best Practices: questo report si concentra sugli aspetti legati alla sicurezza e sugli aspetti legati ai moderni standard di sviluppo web.
  • Accessibilità: questo report serve ad individuare eventuali problematiche che possano rendere la pagina web inutilizzabile da persone con disabilità.
  • SEO: in questo report è indicato quanto la pagina web è facile da scansionare per un motore di ricerca (non solo Google). Più il punteggio è alto e più sarà facile che la pagina venga indicizzata e compaia come risultato della ricerca di un utente.
Punteggio relativo alle performance misurato da Lighthouse su dev.to (in rosso ho evidenziato i Core Vitals)

La navigazione web in questi anni si sta spostando sempre più dai PC verso i dispositivi mobili come smartphone e tablet.

Google è ampiamente a conoscenza di questo fenomeno e proprio per questo motivo tiene in particolare considerazione questa categoria di dispositivi permettendo a Lighthouse di simulare l’esperienza utente da uno smartphone.

La navigazione da smartphone però non è sempre ottimale. Dispositivi dalla scarsa potenza di calcolo e connessioni lente e/o ballerine sono molto più comuni di quanto si pensi. Per tenere conto di queste situazionivo Lighthouse simula uno smartphone che non sia un top di gamma (Moto G4) e che sia sotto una connessione lenta (slow 4G = 1.6Mbps download / 750 Kbps upload – latenza 150ms).
Proprio a causa di questa scelta il sito web che si carica in un lampo nel tuo iPhone 12 Pro potrebbe ottenere un punteggio delle performance basso (per verificare questa ipotesi il test da eseguire è quello della PageSpeed Insight).

Il ragionamento che ha spinto Google ad percorrere questa strada è il seguente: se la pagina web ha performance buone su un dispositivo limitato sicuramente sarà un piacere consultarla su di un cellulare di ultima generazione.

Il modo più semplice per misurare i segnali Core Web Vitals tramite Lighthouse è utilizzarlo direttamente da Chrome usando i seguenti comandi:

  • Naviga sulla pagina per cui vuoi misurare le performance
  • Apri gli strumenti per sviluppatori usando F12 (o utilizzando ctrl+shift+I)
  • Seleziona dalle tab in alto il menù Lighthouse
  • Metti la spunta sulla voce “Performance” (e rimuovere le altre se non sei interessato agli altri report)
  • Seleziona mobile o desktop per decidere se quale report vuoi ottenere
  • Avvia il test tramite il bottone “Genera Report”

Al termine dell’analisi del sito verrà mostrato un voto complessivo del sito e sarà possibile analizzare nel dettaglio tutte le voci che concorrono alla determinazione del punteggio. Per sapere come sono combinate tra loro le voci per il calcolo del punteggio complessivo ti lascio la documentazione ufficiale di Google.

Nel momento in cui scrivo Lighthouse 6 utilizza questi pesi per mediare le metriche e determinare il punteggio complessivo

Il report è diviso in due sezioni: metrics e opportunities. I valori delle metriche sono quelli che vanno ad influire direttamente sul punteggio globale assegnato alle performance mentre le opportunità non incidono direttamente. In ogni caso aggiustare una delle problematiche segnalate nella sezione opportunità può avere un impatto sul valore di una delle metriche e quindi contribuire ad aumentare il punteggio globale.

Analizzando i le voci contenute nella sezione metriche è possibile individuare i valori dei Core Web Vitals:

  • Largest Contentful Paint
  • Cumulative Layout Shift
  • Total Blocking Time (che non è esattamente il First Input Delay ma lo approssima con buona precisione).

NOTA: se ti dovesse servire automatizzare la creazione del report per più pagine non perderti questo articolo.

Conclusione

L’ottimizzazione dei siti web per i motori di ricerca (SEO) non è una scienza esatta. Gli algoritmi usati dai motori di ricerca cambiano continuamente e quello che è valido oggi potrebbe non essere più valido domani. L’unica cosa certa è che ci sono dei principi generici a cui i motori di ricerca si ispirano costantemente. Tra questi principi fondamentali uno che nel 2021 acquisirà maggiore importanza sarà proprio la valutazione delle performance del sito misurata tramite i segnali Core Web Vitals.

Google ha avvisato con largo anticipo che il cambiamento avverrà intorno al mese di Maggio in modo da dare tempo a chiunque gestisca un sito di iniziare a valutarne le performance e ad apportare i cambiamenti necessari. Chi non si adegua in tempo vedrà soffiarsi il primo posto nei risultati di ricerca da i competitor.

Come ho accennato poco fa, Google non fornisce delle regole esatte ma solo dei principi a cui si ispira per questo motivo quello che è scritto in questo post potrebbe essere aggiustato e modificato da Google in ogni momento. Per tale motivo ho cercato di mettere sempre i link alla documentazione ufficiale in modo da poter risalire sempre alla fonte di ogni dato riportato nel post.


Se questo post ti è stato utile puoi farmelo sapere lasciando un commento qui sotto oppure scrivendomi direttamente a t.me/lorenzomillucci.
Inoltre ti invito ad iscriverti al mio canale Telegram e a seguirmi su Twitter per non perderti nemmeno un post del mio blog. A presto!

Software engineer presso Slope.
Appassionato di videogame, nel tempo libero mi diletto a scrivere su questo blog.
Per non perderti nemmeno un post puoi seguirmi su Telegram!

7 trucchi per affinare le tue ricerche su Google

Google search

Quante volte al giorno utilizzi Google per le tue ricerche? Grazie all’altissima precisione dei risultati ottenibili con una ricerca non stupisce il fatto che il famoso motore di ricerca sia il sito web più visitato al mondo. .

Io utilizzo quotidianamente Google per qualunque cosa: dalla documentazione di PHP al significato di qualche parola strana che mi ha colpito.

Usare il motore di ricerca per cercare qualcosa è semplice quanto digitare una parola chiave e premere invio sulla tastiera. Chiunque è in grado di fare ricerche su Google ma pochi conoscono l’esistenza di alcuni operatori che il motore di ricerca mette a disposizione per affinare ulteriormente i risultati ottenuti.
Con questo post ti voglio illustrare 7 operatori che possono farti risparmiare un po’ di tempo la prossima volta che effettui una ricerca sul web.

Indice

1 – Ricerca di frasi esatte

Per trovare tutte le pagine che contengano esattamente le parole cercate ti basta inserire il testo della ricerca tra doppi apici.

Ad esempio, per cercare il titolo di una canzone partendo da una frase puoi digitare sul motore di ricerca: "in the town where i was born lived a man who sailed to sea".
Esempio

2 – Includere nella ricerca anche i sinonimi

Esattamente al contrario dell’operatore precedente, per fare in modo che nella ricerca siano presenti anche i risultati contenenti sinonimi di una determinata parola ti basta utilizzare l’operatore tilde ~. (se anche te non ricordi come fare la tilde con la tastiera guarda qui)

Ad esempio, inserendo i termini di ricerca gestionale ~hotel troverai inclusi tra i risultati anche le pagine contenenti i sinonimi della parola hotel (ad esempio albergo).
Esempio

3 – Escludere risultati dalla ricerca

Per escludere dai risultati tutte le pagine che contengono una determinata parola basta anteporre alla parola da escludere il simbolo -.

Ad esempio per cercare tutte le informazioni sullo YouTuber human safari senza che compaiano i video di YouTube ti basta digitare nel motore di ricerca: human safari -youtube.
Esempio

4 – Limitare la ricerca ai risultati appartenenti ad un certo sito

Per limitare la ricerca ai soli risultati appartenenti ad un certo sito basta mettere prima dell’indirizzo del sito la parola chiave site:.

Nella vita di ogni programmatore spesso capita di dover cercare qualcosa sul forum stackoverflow e per limitare i risultati a questo sito la ricerca da fare è: site:stackoverflow.com symfony.
Esempio

NOTA: questo comando può essere anche utile per sapere quali pagine di un sito sono già nell’indice di Google e quali no.

5 – Limitare i risultati ai file con una determinata estensione

Per cercare tutti i file con una certa estensione basta preporre all’estensione cercata la parola chiave filetype:.
Questo comando è particolarmente utile abbinato al precedente per trovare tutti i risultati di un determinato sito.

Ad esempio per trovare tutti i documenti PDF presenti nel sito dell’agenzia delle entrate la ricerca da fare è: filetype: pdf site:agenziaentrate.gov.it.
Eempio

6 – Dizionario

Tramite la parola chiave define: è possibile utilizzare Google esattamente come se fosse un dizionario.

Ad esempio per sapere qual’è il significato esatto della parola pernicioso la ricerca da fare è define: pernicioso
Esempio

7 – Limitare la ricerca al titolo della pagina

Per limitare i risultati di ricerca a tutti i siti contenenti una parola o una frase nel titolo il comando da utilizzare è allintitile:.

Ad esempio per cercare tutte le pagine che hanno nel titolo Harry Potter la ricerca da fare è allintitle:"Harry Potter".
Esempio

Conclusioni

Esistono molti altri operatori che permettono di affinare ulteriormente i risultati forniti da Google ma questi sono quelli che io reputo i più importanti. Inoltre molti degli operatori citati possono essere combinati per fornire risultati sempre più precisi.

Te conosci qualche altro operatore o qualche altra combinazione meritevole di attenzione? Se si puoi farmelo sapere con un commento qui sotto oppure scrivendomi direttamente nel mio canale Telegram oppure scrivendomi direttamente a t.me/lorenzomillucci.

Software engineer presso Slope.
Appassionato di videogame, nel tempo libero mi diletto a scrivere su questo blog.
Per non perderti nemmeno un post puoi seguirmi su Telegram!