<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>~&#x2F;magostinelli</title>
      <link>https://www.agostinelli.eu</link>
      <description>La casa delle mie passioni</description>
      <generator>Zola</generator>
      <language>it</language>
      <atom:link href="https://www.agostinelli.eu/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Wed, 01 Apr 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>Email in self hosting</title>
          <pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/email-in-self-hosting/</link>
          <guid>https://www.agostinelli.eu/blog/email-in-self-hosting/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/email-in-self-hosting/">&lt;p&gt;Oggi voglio andare un po&#x27; controcorrente: in un mondo pieno di provider email gratuiti e a pagamento, a pochi viene in mente di gestire il proprio server. Eppure, se ci pensiamo bene, la casella email è probabilmente il posto dove transitano più informazioni sensibili su di noi — abbonamenti, estratti conto, comunicazioni private, recupero password. Chiunque abbia accesso a quella casella sa praticamente tutto di voi.&lt;&#x2F;p&gt;
&lt;p&gt;Ecco perché ritengo che il &lt;strong&gt;self hosting&lt;&#x2F;strong&gt; valga la pena anche per l&#x27;&lt;strong&gt;email&lt;&#x2F;strong&gt;: solo così avremo il pieno controllo sulla nostra corrispondenza, senza che nessun terzo possa leggere, analizzare o vendere i nostri dati. Oggi le VPS costano pochissimo, e mettere in piedi un server email non è né complicato né costoso — e avremo spazio praticamente illimitato.&lt;&#x2F;p&gt;
&lt;p&gt;Vediamo come fare.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;prerequisiti&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#prerequisiti&quot; aria-label=&quot;Anchor link for: prerequisiti&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Prerequisiti&lt;&#x2F;h2&gt;
&lt;p&gt;Prima di iniziare, è bene avere chiari alcuni punti:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Una &lt;strong&gt;VPS&lt;&#x2F;strong&gt; con un IP statico (la scelta del provider è vostra). Evitate IP già presenti in blacklist — potete verificarlo su siti come &lt;a href=&quot;https:&#x2F;&#x2F;mxtoolbox.com&#x2F;blacklists.aspx&quot;&gt;MXToolbox&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Un &lt;strong&gt;dominio&lt;&#x2F;strong&gt; di vostra proprietà, su cui poter configurare i record DNS.&lt;&#x2F;li&gt;
&lt;li&gt;Conoscenza base di Linux e Docker.&lt;&#x2F;li&gt;
&lt;li&gt;La &lt;strong&gt;porta 25&lt;&#x2F;strong&gt; (SMTP) non deve essere bloccata dal provider — purtroppo alcuni la chiudono di default. Verificatelo prima di scegliere la VPS.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;perche-una-vps-e-non-un-server-casalingo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche-una-vps-e-non-un-server-casalingo&quot; aria-label=&quot;Anchor link for: perche-una-vps-e-non-un-server-casalingo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché una VPS e non un server casalingo?&lt;&#x2F;h3&gt;
&lt;p&gt;Potrebbe venirvi in mente di ospitare il server direttamente a casa, magari su un vecchio PC o un Raspberry Pi. È una soluzione che funziona per molti servizi, ma per l&#x27;&lt;strong&gt;email è sconsigliata&lt;&#x2F;strong&gt;, per un motivo preciso: gli indirizzi &lt;strong&gt;IP&lt;&#x2F;strong&gt; assegnati dalle &lt;strong&gt;connessioni domestiche&lt;&#x2F;strong&gt; (fibra, ADSL) sono catalogati come tali nei database dei principali provider. Gmail, Outlook e gli altri riconoscono immediatamente che l&#x27;email proviene da un IP residenziale e la &lt;strong&gt;classificano come spam&lt;&#x2F;strong&gt; — o la rifiutano direttamente — indipendentemente da quanto abbiate configurato bene &lt;em&gt;SPF, DKIM e DMARC&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Una VPS, invece, ha un IP di tipo &quot;datacenter&quot;, che i provider trattano in modo completamente diverso. È questo il motivo per cui, in questo contesto, la VPS non è solo una comodità ma una vera e propria necessità.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2026&#x2F;flusso-email-server.svg&quot; alt=&quot;Schema del flusso email&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;due-approcci-possibili&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#due-approcci-possibili&quot; aria-label=&quot;Anchor link for: due-approcci-possibili&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Due approcci possibili&lt;&#x2F;h2&gt;
&lt;p&gt;Per costruire un server email completo servono più componenti che lavorano insieme: un MTA (Mail Transfer Agent) per inviare e ricevere email, un server IMAP per accedervi, un filtro antispam, e opzionalmente una webmail. Si può procedere in due modi.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;setup-manuale-componente-per-componente&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#setup-manuale-componente-per-componente&quot; aria-label=&quot;Anchor link for: setup-manuale-componente-per-componente&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Setup manuale (componente per componente)&lt;&#x2F;h3&gt;
&lt;p&gt;Per chi vuole il controllo totale, i software da mettere insieme sono:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Postfix&lt;&#x2F;strong&gt; (o Exim): MTA, si occupa di inviare e ricevere le email&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Dovecot&lt;&#x2F;strong&gt;: server IMAP&#x2F;POP3, permette ai client di accedere alle caselle&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;SpamAssassin&lt;&#x2F;strong&gt; (o rspamd): filtro antispam&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Roundcube&lt;&#x2F;strong&gt; (o SnappyMail): interfaccia webmail&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Questo approccio offre massima flessibilità, ma richiede di configurare e integrare ogni pezzo manualmente — e di tenerlo aggiornato nel tempo.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;software-all-in-one-l-alternativa-pratica&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#software-all-in-one-l-alternativa-pratica&quot; aria-label=&quot;Anchor link for: software-all-in-one-l-alternativa-pratica&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Software all-in-one (l&#x27;alternativa pratica)&lt;&#x2F;h3&gt;
&lt;p&gt;Se preferite partire velocemente e con meno grattacapi, esistono soluzioni che impacchettano tutto in un unico sistema, gestendo anche aggiornamenti e backup:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mailu&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Mailcow&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Stalwart&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Io uso &lt;strong&gt;Mailu&lt;&#x2F;strong&gt; e lo approfondiremo nel dettaglio. Gli altri meritano comunque una menzione.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;mailu&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#mailu&quot; aria-label=&quot;Anchor link for: mailu&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Mailu&lt;&#x2F;h2&gt;
&lt;p&gt;Mailu è un server di posta completo, basato su container Docker: ogni componente (SMTP, IMAP, antispam, webmail, admin) gira nel proprio container, ma l&#x27;integrazione è già pronta e non richiede configurazione manuale tra i vari pezzi.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2026&#x2F;Mailu-Login-Interface.png&quot; alt=&quot;Mailu login&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;installazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#installazione&quot; aria-label=&quot;Anchor link for: installazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Installazione&lt;&#x2F;h3&gt;
&lt;p&gt;La documentazione ufficiale è ottima e guida passo passo:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mailu.io&#x2F;2024.06&#x2F;setup.html&quot;&gt;https:&#x2F;&#x2F;mailu.io&#x2F;2024.06&#x2F;setup.html&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;La prima parte copre la configurazione di Docker sul sistema; poi si passa alla creazione del file di configurazione.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;configurazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazione&quot; aria-label=&quot;Anchor link for: configurazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazione&lt;&#x2F;h3&gt;
&lt;p&gt;Tutto ruota attorno a un file &lt;code&gt;.env&lt;&#x2F;code&gt;. Il modo più comodo per crearlo è usare il wizard web ufficiale:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;setup.mailu.io&#x2F;2024.06&#x2F;&quot;&gt;https:&#x2F;&#x2F;setup.mailu.io&#x2F;2024.06&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Si inseriscono le proprie preferenze e il sito genera il &lt;strong&gt;file di testo pronto all&#x27;uso&lt;&#x2F;strong&gt; — che si potrà sempre modificare in seguito con un editor. Queste sono le impostazioni &quot;globali&quot; di sistema.&lt;&#x2F;p&gt;
&lt;p&gt;Per la gestione operativa (domini, caselle, alias, inoltri, quote), si usa invece il &lt;strong&gt;pannello web&lt;&#x2F;strong&gt; integrato, il cui link è presente nella webmail, accedendo con le credenziali di amministratore.&lt;&#x2F;p&gt;
&lt;p&gt;Per ulteriori dettagli sulla configurazione e personalizzazione del software, vi invito a consultare la &lt;a href=&quot;https:&#x2F;&#x2F;mailu.io&#x2F;2024.06&#x2F;webadministration.html&quot;&gt;documentazione ufficiale&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2026&#x2F;mailu-main-page.png&quot; alt=&quot;Mailu config&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dns-il-passaggio-piu-importante&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#dns-il-passaggio-piu-importante&quot; aria-label=&quot;Anchor link for: dns-il-passaggio-piu-importante&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
DNS: il passaggio più importante&lt;&#x2F;h3&gt;
&lt;p&gt;Una parte fondamentale — che spesso viene sottovalutata — è la &lt;strong&gt;configurazione DNS&lt;&#x2F;strong&gt;. Per evitare che le email inviate finiscano nello spam dei destinatari, è necessario configurare correttamente:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SPF&lt;&#x2F;strong&gt;: specifica quali server sono autorizzati a inviare email per il vostro dominio&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;DKIM&lt;&#x2F;strong&gt;: firma digitale per autenticare le email&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;DMARC&lt;&#x2F;strong&gt;: policy su cosa fare con le email che non superano SPF o DKIM&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Mailu vi guida nella configurazione di tutti e tre direttamente dal pannello admin — seguite quelle indicazioni con attenzione.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;mailcow&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#mailcow&quot; aria-label=&quot;Anchor link for: mailcow&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Mailcow&lt;&#x2F;h2&gt;
&lt;p&gt;Molto simile a Mailu come approccio: è un insieme di container Docker con una interfaccia web per gestire il tutto. Ha una community molto attiva e un&#x27;interfaccia particolarmente curata. Vale la pena valutarlo se Mailu non vi convince.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;mailcow.email&quot;&gt;https:&#x2F;&#x2F;mailcow.email&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2026&#x2F;mailcow-admin-dashboard.png&quot; alt=&quot;Mailcow&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;stalwart&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#stalwart&quot; aria-label=&quot;Anchor link for: stalwart&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Stalwart&lt;&#x2F;h2&gt;
&lt;p&gt;Stalwart merita una menzione speciale: è un progetto relativamente recente che racchiude &lt;strong&gt;tutte le funzionalità in un singolo eseguibile&lt;&#x2F;strong&gt;, scritto in &lt;strong&gt;Rust&lt;&#x2F;strong&gt;. Supporta già IMAP, SMTP, JMAP e sta aggiungendo funzionalità come CalDAV e CardDAV. È ancora in fase di maturazione, ma la direzione è molto promettente.&lt;&#x2F;p&gt;
&lt;p&gt;Tenetelo d&#x27;occhio: potrebbe diventare la soluzione di riferimento nei prossimi anni.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;stalw.art&quot;&gt;https:&#x2F;&#x2F;stalw.art&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2026&#x2F;stalwart-screencast-setup.gif&quot; alt=&quot;Stalwart setup&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;conclusioni&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#conclusioni&quot; aria-label=&quot;Anchor link for: conclusioni&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Conclusioni&lt;&#x2F;h2&gt;
&lt;p&gt;Questo articolo non ha l&#x27;ambizione di essere una guida esaustiva, ma piuttosto un punto di partenza per chi vuole &lt;strong&gt;riprendere il controllo delle proprie email&lt;&#x2F;strong&gt;. I siti ufficiali di Mailu, Mailcow e Stalwart sono documentati molto bene — non ha senso riscrivere qui quello che trovate là.&lt;&#x2F;p&gt;
&lt;p&gt;Quello che spero di avervi trasmesso è la curiosità di provarci. Il setup è alla portata di chiunque abbia un minimo di dimestichezza con Linux e Docker, e la soddisfazione di avere la propria casella email — su un server proprio, senza intermediari — vale lo sforzo.&lt;&#x2F;p&gt;
&lt;p&gt;Se avete domande specifiche o suggerimenti, usate i commenti qui sotto, a presto!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Backup con Borg e Borgmatic</title>
          <pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/backup-con-borg-e-borgmatic/</link>
          <guid>https://www.agostinelli.eu/blog/backup-con-borg-e-borgmatic/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/backup-con-borg-e-borgmatic/">&lt;h1 id=&quot;backup-con-borg-e-borgmatic&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#backup-con-borg-e-borgmatic&quot; aria-label=&quot;Anchor link for: backup-con-borg-e-borgmatic&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Backup con Borg e Borgmatic&lt;&#x2F;h1&gt;
&lt;p&gt;Se anche tu sei un self-host compulsivo, la questione dei &lt;strong&gt;backup&lt;&#x2F;strong&gt; non è una scelta, ma una &lt;strong&gt;necessità&lt;&#x2F;strong&gt;. Dopo anni di utilizzo e varie prove, su tutti i miei server, utilizzo Borg come software per il backup: non solo è molto affidabile (ho avuto bisogno del restore qualche volta) ma anche straordinariamente semplice da gestire.&lt;&#x2F;p&gt;
&lt;p&gt;In questo articolo ti mostrerò perché questi due software hanno conquistato il mio cuore (e i miei dati), come funzionano e soprattutto come iniziare a usarli nel tuo ambiente self-hosted.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chi-e-borg-e-perche-dovresti-usarlo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#chi-e-borg-e-perche-dovresti-usarlo&quot; aria-label=&quot;Anchor link for: chi-e-borg-e-perche-dovresti-usarlo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Chi è Borg e Perché Dovresti Usarlo&lt;&#x2F;h2&gt;
&lt;p&gt;Borg (BorgBackup) è un software di backup dedicato alla deduplica, compressione e cifratura dei dati. Sviluppato in Python con componenti critici in C, è stato pensato fin dall&#x27;inizio per essere veloce, efficiente e sicuro. A differenza di soluzioni più tradizionali, Borg non crea semplici copie dei tuoi file, ma applica una serie di tecniche sofisticate per rendere i backup efficienti e gestibili.&lt;&#x2F;p&gt;
&lt;p&gt;Borgmatic è un&#x27;&lt;em&gt;estensione&lt;&#x2F;em&gt; di Borg e permette di configurare il nostro backup attraverso un unico file di configurazione.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2026&#x2F;borg-logo.png&quot; alt=&quot;Borg&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;le-tre-caratteristiche-che-cambiano-il-gioco&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#le-tre-caratteristiche-che-cambiano-il-gioco&quot; aria-label=&quot;Anchor link for: le-tre-caratteristiche-che-cambiano-il-gioco&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Le Tre Caratteristiche che Cambiano il Gioco&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;Deduplica&lt;&#x2F;strong&gt;: Questo è il punto che rende Borg veramente speciale. Immagina di avere 100 GB di dati e di fare un backup ogni giorno. Con i backup tradizionali, finiresti per avere 2.8 TB di dati in un mese (100 GB × 28 giorni). Con Borg, se solo il 5% dei tuoi dati cambia ogni giorno, utilizzerai solo circa 140 GB di spazio totale (100 GB iniziali + 5 GB × 28 giorni). Borg identifica i file identici e i blocchi di dati duplicati, memorizzandoli una sola volta.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Compressione&lt;&#x2F;strong&gt;: Borg comprime i dati utilizzando algoritmi come ZSTD, riducendo ulteriormente lo spazio occupato. Un documento di testo compresso può ridursi del 90%, immagini del 20-30%, database del 40-60%. La compressione avviene durante il backup, non dopo, quindi non impatta sulla velocità di accesso ai dati ripristinati.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Cifratura&lt;&#x2F;strong&gt;: Tutti i tuoi backup sono cifrati end-to-end con AES-256. Significa che anche se qualcuno riuscisse ad accedere al tuo repository di backup, non potrebbe leggere nulla senza la passphrase. La cifratura viene applicata sia in transito (se usi SSH) che a riposo sul disco.&lt;&#x2F;p&gt;
&lt;p&gt;Grazie a queste tre caratteristiche puoi usare anche un servizio esterno per il tuo backup, cosi avrai i tuoi dati al sicuro in un luogo diverso rispetto a quello di dove girano i tuoi servizi.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;il-vantaggio-decisivo-point-in-time-recovery&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#il-vantaggio-decisivo-point-in-time-recovery&quot; aria-label=&quot;Anchor link for: il-vantaggio-decisivo-point-in-time-recovery&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Il Vantaggio Decisivo: Point-in-Time Recovery&lt;&#x2F;h2&gt;
&lt;p&gt;Tra le molte cose che Borg fa bene, il point-in-time recovery è una capacità che raramente ho visto in altri backup tools gratuiti. Cosa significa? Semplicemente che puoi ripristinare i tuoi dati a qualsiasi punto nel tempo in cui hai eseguito un backup.&lt;&#x2F;p&gt;
&lt;p&gt;Facciamo un esempio concreto. Sei lunedì alle 14:30 e realizzi che un file importante è stato eliminato accidentalmente venerdì scorso. Con Borg, puoi accedere al backup di giovedì mattina alle 08:00 e recuperare esattamente quello che ti serve. Non è &quot;il file è sparito, è perso per sempre&quot;, ma &quot;posso scegliere quale versione del mio sistema voglio ripristinare&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Questo funziona perché ogni volta che esegui un backup con Borg, viene creato un &quot;snapshot&quot; completo dello stato del tuo sistema in quel momento. Borg poi usa la deduplica per assicurarsi che lo spazio aggiuntivo necessario sia minimo, ma tu mantieni sempre accesso a qualsiasi versione precedente.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;borg-in-pratica-cosa-devi-sapere&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#borg-in-pratica-cosa-devi-sapere&quot; aria-label=&quot;Anchor link for: borg-in-pratica-cosa-devi-sapere&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Borg in Pratica: Cosa Devi Sapere&lt;&#x2F;h2&gt;
&lt;p&gt;Borg è estremamente flessibile e può essere usato in molti modi diversi. Ecco gli scenari che coprono la maggior parte dei casi d&#x27;uso:&lt;&#x2F;p&gt;
&lt;h3 id=&quot;local-to-local-il-backup-nel-tuo-ufficio&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#local-to-local-il-backup-nel-tuo-ufficio&quot; aria-label=&quot;Anchor link for: local-to-local-il-backup-nel-tuo-ufficio&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Local-to-Local: Il Backup nel Tuo Ufficio&lt;&#x2F;h3&gt;
&lt;p&gt;Il caso più semplice è fare il backup dei tuoi dati locali su un disco esterno o su un&#x27;altra partizione. È velocissimo e non richiede internet. Il comando base è:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;borg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; init&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; --&lt;&#x2F;span&gt;encryption&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-option z-shell&quot;&gt;=&lt;&#x2F;span&gt;repokey &#x2F;mnt&#x2F;backup&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;borg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; create &#x2F;mnt&#x2F;backup::&lt;span class=&quot;z-meta z-group z-expansion z-brace z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-brace z-begin z-shell&quot;&gt;{&lt;&#x2F;span&gt;now&lt;span class=&quot;z-punctuation z-section z-expansion z-brace z-end z-shell&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &#x2F;home&#x2F;utente&#x2F;dati&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Perfetto per chi vuole un backup fisico nelle vicinanze e non si preoccupa di perdere tutto se la casa prende fuoco (per quello servono i backup remoti).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;self-hosted-il-backup-su-un-altro-server&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#self-hosted-il-backup-su-un-altro-server&quot; aria-label=&quot;Anchor link for: self-hosted-il-backup-su-un-altro-server&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Self-Hosted: Il Backup su un Altro Server&lt;&#x2F;h3&gt;
&lt;p&gt;Questo è il mio setup preferito per il self-hosting. Hai il tuo server principale dove girano Nextcloud, il tuo Git personale, la tua email, quello che vuoi. E hai un secondo server (anche molto meno potente) dove archi i backup.&lt;&#x2F;p&gt;
&lt;p&gt;Borg comunica via SSH e comprime&#x2F;cifra tutto prima di inviare i dati. Anche se il server di backup venisse compromesso, non potrebbero leggere nulla. Il comando diventa:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;borg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; create ssh:&#x2F;&#x2F;utente@backup.example.com:22&#x2F;path&#x2F;to&#x2F;repo::&lt;span class=&quot;z-meta z-group z-expansion z-brace z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-brace z-begin z-shell&quot;&gt;{&lt;&#x2F;span&gt;now&lt;span class=&quot;z-punctuation z-section z-expansion z-brace z-end z-shell&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &#x2F;dati&#x2F;importanti&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bellissimo, vero? Un server, una passphrase, tutto cifrato. E lo spazio utilizzato è ridicolmente piccolo grazie alla deduplica.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;un-dettaglio-fondamentale-il-modello-client-server&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#un-dettaglio-fondamentale-il-modello-client-server&quot; aria-label=&quot;Anchor link for: un-dettaglio-fondamentale-il-modello-client-server&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Un Dettaglio Fondamentale: Il Modello Client-Server&lt;&#x2F;h3&gt;
&lt;p&gt;C&#x27;è una cosa importante da capire se decidi di fare il backup su un server remoto: Borg deve essere &lt;strong&gt;installato su entrambe le macchine&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;A differenza di altri strumenti che usano il protocollo SFTP o rsync &quot;passivo&quot;, Borg utilizza un modello &lt;em&gt;client-server&lt;&#x2F;em&gt;. Quando avvii un backup, il tuo server locale (il client) si connette via SSH al server di destinazione e avvia un&#x27;istanza di Borg anche lì (il server).&lt;&#x2F;p&gt;
&lt;p&gt;Perché questa complicazione? In realtà è un enorme vantaggio per due motivi:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Efficienza: Il server remoto calcola localmente quali pezzi di dati possiede già, evitando di farti inviare file che sono già nel repository.&lt;&#x2F;li&gt;
&lt;li&gt;Integrità: Il processo remoto verifica che i dati arrivino correttamente e gestisce la scrittura sul disco in modo atomico.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Ad esempio, se stai usando una VPS Debian come destinazione, ricordati di fare un semplice &lt;code&gt;apt install borgbackup&lt;&#x2F;code&gt;, altrimenti il client non saprà con chi parlare e riceverai un errore del tipo &lt;em&gt;Remote: bash: borg: command not found&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;servizi-di-terze-parti-hetzner-e-simili&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#servizi-di-terze-parti-hetzner-e-simili&quot; aria-label=&quot;Anchor link for: servizi-di-terze-parti-hetzner-e-simili&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Servizi di Terze Parti: Hetzner e Simili&lt;&#x2F;h3&gt;
&lt;p&gt;Se non vuoi gestire il tuo server di backup, ci sono servizi come Hetzner Storage Box che offrono spazio di backup a costi molto bassi (qualche euro al mese per TB). Borg lavora perfettamente con loro e mantiene la stessa garanzia di cifratura end-to-end.&lt;&#x2F;p&gt;
&lt;p&gt;Ad esempio, Hetzner (non mi hanno sponsorizzato), offre un servizio molto economico e ben funzionante chiamato storage box: https:&#x2F;&#x2F;www.hetzner.com&#x2F;storage&#x2F;storage-box&#x2F;
(Ci sono pacchetti con vari tagli di spazio disco).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;borg-e-l-ecosistema-self-hosted&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#borg-e-l-ecosistema-self-hosted&quot; aria-label=&quot;Anchor link for: borg-e-l-ecosistema-self-hosted&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Borg e l&#x27;Ecosistema Self-Hosted&lt;&#x2F;h2&gt;
&lt;p&gt;Due sistemi che uso hanno adottato Borg come soluzione di backup nativa:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;YunoHost&lt;&#x2F;strong&gt;: Se usi YunoHost per gestire il tuo server, i backup sono gestiti di default attraverso Borg. L&#x27;interfaccia web di YunoHost ti permette di configurare tutto con pochi click. Scegli la destinazione, inserisci i parametri (credenziali e url), e il sistema si occupa di tutto.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Nextcloud AIO (All-in-One)&lt;&#x2F;strong&gt;: Nextcloud AIO, il modo più moderno di deployare Nextcloud, ha integrato Borg come sistema di backup predefinito. Quando installi Nextcloud AIO, la possibilità di fare backup via Borg è già incorporata. Questo dovrebbe dirvi tutto quello che dovete sapere sulla fiducia che anche i principali progetti ripongono in Borg.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;borgmatic-quando-borg-diventa-semplice&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#borgmatic-quando-borg-diventa-semplice&quot; aria-label=&quot;Anchor link for: borgmatic-quando-borg-diventa-semplice&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Borgmatic: Quando Borg Diventa Semplice&lt;&#x2F;h2&gt;
&lt;p&gt;Borg è fantastico, ma ha una curva di apprendimento. I comandi sono molti, le opzioni sono numerose, e ricordare tutti i parametri ogni volta è difficile. Qui entra in gioco Borgmatic.&lt;&#x2F;p&gt;
&lt;p&gt;Borgmatic è uno strato di semplificazione costruito sopra Borg. È un software che prende un file di configurazione (YAML, molto leggibile) e trasforma complessi flussi di backup in un singolo comando: &lt;code&gt;borgmatic&lt;&#x2F;code&gt;. Non solo, ma Borgmatic aggiunge funzionalità utili come le notifiche, la verifica automatica dei backup, il controllo della salute del repository e molto altro.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2026&#x2F;borgmatic.png&quot; alt=&quot;Borgmatic&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;configurare-borgmatic-un-esempio-pratico&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurare-borgmatic-un-esempio-pratico&quot; aria-label=&quot;Anchor link for: configurare-borgmatic-un-esempio-pratico&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurare Borgmatic: Un Esempio Pratico&lt;&#x2F;h3&gt;
&lt;p&gt;Per iniziare con Borgmatic, installa il pacchetto:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;pip&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; install&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; --&lt;&#x2F;span&gt;user&lt;&#x2F;span&gt; borgmatic&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Poi crea la directory di configurazione:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;mkdir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;p&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-expansion z-tilde&quot;&gt;&lt;span class=&quot;z-variable z-language z-tilde z-shell&quot;&gt;~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&#x2F;.config&#x2F;borgmatic&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;E un file di configurazione di base:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yaml&quot; class=&quot;language-yaml z-code&quot;&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; Configurazione di Borgmatic - salva come ~&#x2F;.config&#x2F;borgmatic&#x2F;config.yaml
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;source_directories&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&#x2F;home&#x2F;utente&#x2F;documenti&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&#x2F;home&#x2F;utente&#x2F;progetti&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&#x2F;etc&#x2F;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;repositories&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;label&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;backup_principale&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;path&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&#x2F;mnt&#x2F;discoesterno&#x2F;backup&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; Se vuoi un backup remoto SSH, usa questo:
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; path: ssh:&#x2F;&#x2F;utente@backup.example.com:22&#x2F;backups&#x2F;mio_server
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;retention&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;keep_daily&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-yaml&quot;&gt;7&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;keep_weekly&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-yaml&quot;&gt;4&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;keep_monthly&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-yaml&quot;&gt;12&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;keep_yearly&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-yaml&quot;&gt;2&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;checks&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;repository&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;frequency&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;2 weeks&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;archives&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;frequency&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;4 weeks&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;hooks&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;before_backup&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;echo &amp;quot;Inizio backup a $(date)&amp;quot;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;after_backup&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;echo &amp;quot;Backup completato con successo&amp;quot;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;on_error&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;echo &amp;quot;ERRORE durante il backup!&amp;quot;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ora, per fare un backup completo, basta eseguire:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;borgmatic&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Questo comando:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Effettua il backup di tutti i directory elencati&lt;&#x2F;li&gt;
&lt;li&gt;Applica la deduplica e la compressione&lt;&#x2F;li&gt;
&lt;li&gt;Cifra tutto con la tua passphrase&lt;&#x2F;li&gt;
&lt;li&gt;Applica le politiche di retention (mantiene 7 backup giornalieri, 4 settimanali, etc.)&lt;&#x2F;li&gt;
&lt;li&gt;Verifica l&#x27;integrità del repository secondo il calendario definito&lt;&#x2F;li&gt;
&lt;li&gt;Esegue gli hook (comando prima e dopo il backup)&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;automazione-con-cron&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#automazione-con-cron&quot; aria-label=&quot;Anchor link for: automazione-con-cron&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Automazione con Cron&lt;&#x2F;h3&gt;
&lt;p&gt;Ora che hai configurato Borgmatic, il passo logico è automatizzare il backup. Aggiungi una voce al crontab:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;crontab&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;e&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;E aggiungi questa riga per eseguire il backup ogni giorno alle 02:00 di notte:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; 2 &lt;span class=&quot;z-keyword z-operator z-regexp z-quantifier z-shell&quot;&gt;*&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-regexp z-quantifier z-shell&quot;&gt;*&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-regexp z-quantifier z-shell&quot;&gt;*&lt;&#x2F;span&gt; &#x2F;home&#x2F;utente&#x2F;.local&#x2F;bin&#x2F;borgmatic&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;c&lt;&#x2F;span&gt; &#x2F;home&#x2F;utente&#x2F;.config&#x2F;borgmatic&#x2F;config.yaml&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Se vuoi eseguire il backup ogni 6 ore:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-keyword z-operator z-regexp z-quantifier z-shell&quot;&gt;*&lt;&#x2F;span&gt;&#x2F;6 &lt;span class=&quot;z-keyword z-operator z-regexp z-quantifier z-shell&quot;&gt;*&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-regexp z-quantifier z-shell&quot;&gt;*&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-regexp z-quantifier z-shell&quot;&gt;*&lt;&#x2F;span&gt; &#x2F;home&#x2F;utente&#x2F;.local&#x2F;bin&#x2F;borgmatic&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;c&lt;&#x2F;span&gt; &#x2F;home&#x2F;utente&#x2F;.config&#x2F;borgmatic&#x2F;config.yaml&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;il-superpotere-di-borgmatic-i-database&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#il-superpotere-di-borgmatic-i-database&quot; aria-label=&quot;Anchor link for: il-superpotere-di-borgmatic-i-database&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Il Superpotere di Borgmatic: I Database&lt;&#x2F;h2&gt;
&lt;p&gt;Se gestisci servizi come Nextcloud, Ghost o un qualsiasi stack LAMP&#x2F;LEMP, sai che salvare i file non basta: devi mettere al sicuro il &lt;strong&gt;database&lt;&#x2F;strong&gt;. Di solito questo significa scrivere uno script che fa il dump, lo salva in una cartella e poi Borg lo carica.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Borgmatic fa tutto da solo&lt;&#x2F;strong&gt;. Può collegarsi ai tuoi database, farne il &lt;em&gt;dump&lt;&#x2F;em&gt; &quot;al volo&quot; e inviarlo direttamente nel repository di backup senza sporcare il disco con file temporanei.&lt;&#x2F;p&gt;
&lt;p&gt;Ecco come aggiungere il supporto per i database nel tuo config.yaml:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;YAML&quot; class=&quot;language-YAML z-code&quot;&gt;&lt;code class=&quot;language-YAML&quot; data-lang=&quot;YAML&quot;&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; Aggiungi questo al tuo file di configurazione
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;databases&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;nextcloud_db&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;type&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;postgresql&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; o mysql &#x2F; mariadb &#x2F; sqlite
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;username&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;nextcloud_user&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; Se il DB gira in un container, puoi specificarlo qui:
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; hostname: localhost 
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;perche-e-fondamentale-per-nextcloud&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche-e-fondamentale-per-nextcloud&quot; aria-label=&quot;Anchor link for: perche-e-fondamentale-per-nextcloud&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché è fondamentale per Nextcloud?&lt;&#x2F;h3&gt;
&lt;p&gt;Nextcloud salva i metadati dei file, i contatti, i calendari e le configurazioni nel database. Se ripristini solo la cartella data ma non il database, ti ritroverai con un&#x27;istanza &quot;rotta&quot;. Con questa configurazione, Borgmatic:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Blocca (se necessario) e interroga il DB.&lt;&#x2F;li&gt;
&lt;li&gt;Trasmette il contenuto crittografato al volo.&lt;&#x2F;li&gt;
&lt;li&gt;Lo include nello stesso &quot;snapshot&quot; dei file.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;In caso di disastro, avrai la certezza matematica che i file e il database siano sincronizzati allo stesso identico istante, evitando &lt;em&gt;inconsistenze&lt;&#x2F;em&gt; che sono l&#x27;incubo di ogni sysadmin.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;notifiche-e-monitoraggio&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#notifiche-e-monitoraggio&quot; aria-label=&quot;Anchor link for: notifiche-e-monitoraggio&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Notifiche e Monitoraggio&lt;&#x2F;h3&gt;
&lt;p&gt;Una delle feature migliori di Borgmatic è la capacità di avvisarti istantaneamente se un backup fallisce o se è andato a buon fine. Invece di controllare i log ogni mattina, io uso &lt;strong&gt;ntfy&lt;&#x2F;strong&gt;, un servizio di messaggistica pub-sub semplicissimo (e ovviamente self-hostabile).&lt;&#x2F;p&gt;
&lt;p&gt;Puoi configurare le notifiche direttamente nel tuo config.yaml. Ecco come inviare un messaggio al tuo telefono ogni volta che Borgmatic finisce il suo lavoro:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;YAML&quot; class=&quot;language-YAML z-code&quot;&gt;&lt;code class=&quot;language-YAML&quot; data-lang=&quot;YAML&quot;&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;ntfy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; L&amp;#39;URL del tuo server ntfy (o quello ufficiale)
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;topic&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;il_tuo_topic_segreto&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;server&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;https:&#x2F;&#x2F;ntfy.sh&lt;&#x2F;span&gt; 
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; Invia notifiche solo in caso di errore o sempre?
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;states&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-flow-sequence z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-sequence z-begin z-yaml&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-in z-yaml&quot;&gt;failed&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-sequence z-yaml&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-in z-yaml&quot;&gt;finished&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-sequence z-end z-yaml&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; Puoi anche aggiungere una priorità diversa in base allo stato
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;priority&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-yaml&quot;&gt;5&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Se invece preferisci usare i classici hooks per personalizzare il messaggio (magari includendo il nome dell&#x27;host), puoi fare così:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;YAML&quot; class=&quot;language-YAML z-code&quot;&gt;&lt;code class=&quot;language-YAML&quot; data-lang=&quot;YAML&quot;&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;hooks&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;on_error&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;curl -d &amp;quot;❌ Backup fallito su $(hostname)&amp;quot; https:&#x2F;&#x2F;ntfy.sh&#x2F;il_tuo_topic_segreto&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;after_backup&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;curl -d &amp;quot;✅ Backup completato con successo su $(hostname)&amp;quot; https:&#x2F;&#x2F;ntfy.sh&#x2F;il_tuo_topic_segreto&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Con l&#x27;app di ntfy installata sullo smartphone, riceverai una notifica push in tempo reale. Se non vedi arrivare nulla, allora sai che c&#x27;è qualcosa da controllare.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;recuperare-i-dati-quando-il-backup-diventa-importante&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#recuperare-i-dati-quando-il-backup-diventa-importante&quot; aria-label=&quot;Anchor link for: recuperare-i-dati-quando-il-backup-diventa-importante&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Recuperare i Dati: Quando il Backup Diventa Importante&lt;&#x2F;h2&gt;
&lt;p&gt;Tutto questo lavoro di backup è inutile se non puoi effettivamente recuperare i tuoi dati. Con Borg è sorprendentemente semplice.&lt;&#x2F;p&gt;
&lt;p&gt;Per elencare tutti i backup disponibili:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;borg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; list &#x2F;mnt&#x2F;discoesterno&#x2F;backup&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Per elencare i file all&#x27;interno di un backup specifico:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;borg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; list &#x2F;mnt&#x2F;discoesterno&#x2F;backup::backup_2025_01_15&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Per estrarre un singolo file:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;borg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; extract &#x2F;mnt&#x2F;discoesterno&#x2F;backup::backup_2025_01_15 &#x2F;home&#x2F;utente&#x2F;documenti&#x2F;importante.txt&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Per ripristinare l&#x27;intero backup in una directory temporanea:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;mkdir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &#x2F;tmp&#x2F;ripristino&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-support z-function z-cd z-shell&quot;&gt;cd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &#x2F;tmp&#x2F;ripristino&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;borg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; extract &#x2F;mnt&#x2F;discoesterno&#x2F;backup::backup_2025_01_15&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;La bellezza di Borg è che il ripristino è altrettanto semplice della creazione del backup. Non c&#x27;è magia incomprensibile, solo comandi diretti e intuitivi.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;le-limitazioni-che-non-sono-molte&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#le-limitazioni-che-non-sono-molte&quot; aria-label=&quot;Anchor link for: le-limitazioni-che-non-sono-molte&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Le Limitazioni (Che Non Sono Molte)&lt;&#x2F;h2&gt;
&lt;p&gt;Borg è meraviglioso, ma non è perfetto. Vale la pena menzionare un paio di limitazioni:&lt;&#x2F;p&gt;
&lt;p&gt;Innanzitutto, per i database, Borg avrebbe bisogno di un dump preventivo su disco. Fortunatamente, come abbiamo visto, Borgmatic risolve il problema gestendo i dump al volo, ma è sempre bene verificare di avere abbastanza spazio temporaneo per queste operazioni se i database sono mastodontici.&lt;&#x2F;p&gt;
&lt;p&gt;In secondo luogo, la prima esecuzione di un backup remoto è lenta. Se hai 500 GB da inviare al tuo server di backup via SSH, i tempi saranno significativi. Ma i backup successivi saranno enormemente più veloci grazie alla deduplica. La &lt;em&gt;deduplica cross-archive&lt;&#x2F;em&gt; (tra diversi backup) significa che i cambiamenti incrementali sono davvero incrementali.&lt;&#x2F;p&gt;
&lt;p&gt;Infine, il ripristino di backup molto grandi con molti file può essere un po&#x27; lento, soprattutto se il repository è su un disco lento. Ma una volta che hai i dati localmente, sei a posto.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusione-perche-ho-scelto-borg&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#conclusione-perche-ho-scelto-borg&quot; aria-label=&quot;Anchor link for: conclusione-perche-ho-scelto-borg&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Conclusione: Perché Ho Scelto Borg&lt;&#x2F;h2&gt;
&lt;p&gt;Negli ultimi anni ho usato Borg su ogni server che amministro. A volte ho dovuto recuperare i dati, e ogni singola volta Borg c&#x27;è stato, puntuale e affidabile. Ha sempre ripristinato esattamente quello che mi serviva, senza cerimoniali inutili.&lt;&#x2F;p&gt;
&lt;p&gt;Borg è ciò che mi piace in un software: semplice nei concetti, potente nell&#x27;esecuzione, straordinariamente efficiente, e completamente open source. Borgmatic lo rende ancora più accessibile, anche per chi non vuole passare ore a studiare manuali complessi.&lt;&#x2F;p&gt;
&lt;p&gt;Se gestisci un server self-hosted, uno o più personal computer, o semplicemente dati che non puoi permetterti di perdere, Borg e Borgmatic meritano seriamente di essere nella tua cassetta degli attrezzi. Il tempo che dedicherai alla loro configurazione sarà tempo ben speso, e il giorno in cui avrai bisogno di recuperare un file eliminato accidentalmente, ringrazierai te stesso di averlo fatto.&lt;&#x2F;p&gt;
&lt;p&gt;Buon backup!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Nuovo sito - Parte 1</title>
          <pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/nuovo_sito_1/</link>
          <guid>https://www.agostinelli.eu/nuovo_sito_1/</guid>
          <description xml:base="https://www.agostinelli.eu/nuovo_sito_1/">&lt;h1 id=&quot;nuovo-sito-2026&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#nuovo-sito-2026&quot; aria-label=&quot;Anchor link for: nuovo-sito-2026&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Nuovo sito 2026&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;prima-parte&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#prima-parte&quot; aria-label=&quot;Anchor link for: prima-parte&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Prima parte&lt;&#x2F;h2&gt;
&lt;p&gt;Benvenuti nel primo articolo della serie.
Non appena mi sono messo a scrivere due righe sul nuovo sito, mi sono accorto che non ne sarebbe bastato uno solo.
Un&#x27;attività di per se banale, un piccolo sito personale con blog e galleria immagini, in realtà si è rivelata una piccola sfida.&lt;&#x2F;p&gt;
&lt;p&gt;Ma partiamo con ordine:
prima di questo &lt;em&gt;&quot;restyling&quot;&lt;&#x2F;em&gt; avevo due siti, uno statico (con galleria immagini) e un blog con &lt;a href=&quot;&#x2F;tag&#x2F;writefreely&quot;&gt;writefreely&lt;&#x2F;a&gt;.
Da qui sono partito e mi sono detto, facciamo un sito unico, almeno ne ho uno solo da manutenere!&lt;&#x2F;p&gt;
&lt;p&gt;Cosi inizia la prima sfida: &lt;strong&gt;quale software&lt;&#x2F;strong&gt; usare?
&lt;em&gt;Writefreely&lt;&#x2F;em&gt; ormai sembra abbandonato, peccato perchè, se pur semplice, integrava nativamente activity pub.
Per le fotografie volevo trovare qualcosa che le potesse suddividere in cartelle, ma allo stesso tempo che la visualizzazione delle immagini fosse fruibile da tutti i dispositivi.&lt;&#x2F;p&gt;
&lt;p&gt;Infine come prerequisiti volevo anche:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;feed rss&lt;&#x2F;li&gt;
&lt;li&gt;sito snello (non pesante da caricare)&lt;&#x2F;li&gt;
&lt;li&gt;grafica responsive (banale, ma non sempre è cosi)&lt;&#x2F;li&gt;
&lt;li&gt;scrittura delle pagine in linguaggio MarkDown&lt;&#x2F;li&gt;
&lt;li&gt;tenere traccia delle modifiche effettuate&lt;&#x2F;li&gt;
&lt;li&gt;usare più automatismi possibili&lt;&#x2F;li&gt;
&lt;li&gt;statistiche sulle pagine più lette&lt;&#x2F;li&gt;
&lt;li&gt;multilingua (integrare inglese in futuro)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Insomma senza tenervi sulle spiena, alla fine ho scelto &lt;a href=&quot;&#x2F;tag&#x2F;zola&quot;&gt;Zola&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;perche-zola&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche-zola&quot; aria-label=&quot;Anchor link for: perche-zola&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perchè Zola&lt;&#x2F;h2&gt;
&lt;p&gt;Di recente ho avuto un&#x27;eperienza con Hugo (altro generatore di siti statici), perchè abbiamo rimesso in piedi il sito del &lt;a href=&quot;https:&#x2F;&#x2F;prato.linux.it&quot;&gt;PLUG&lt;&#x2F;a&gt; e per alcune cose mi ha incuriosito, sono rimasto &quot;affascinato&quot; anche dalla CI di gitlab, che abbiamo usato per quel progetto.
Infine, in questo ultimo periodo mi sono &quot;innamorato&quot; di &lt;a href=&quot;&#x2F;tag&#x2F;forgejo&quot;&gt;Forgejo&lt;&#x2F;a&gt;.
Quindi ho messo insieme queste cose, ho fatto una navigata sul web, e ho scoperto &lt;a href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt;.
Ho trovato anche un tema (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;welpo&#x2F;tabi&quot;&gt;tabi&lt;&#x2F;a&gt;) che mi è piaciuto subito, e quindi la decisione era già presa!&lt;&#x2F;p&gt;
&lt;p&gt;Nelle prossime puntate della serie ci addentreremo nelle singole problematiche che ho trovato e vedremo quali soluzioni (=software) ho deciso di implementare e perché.&lt;&#x2F;p&gt;
&lt;p&gt;Vi aspetto nelle prossime puntate!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Chi sono</title>
          <pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/about/</link>
          <guid>https://www.agostinelli.eu/about/</guid>
          <description xml:base="https://www.agostinelli.eu/about/">&lt;p&gt;Poliedrico navigatore della rete, appassionato di tecnologia, musica, fotografia e sostenitore del software libero.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;le-mie-passioni&quot;&gt;Le mie passioni&lt;&#x2F;h1&gt;
&lt;p&gt;Appassionato di tecnologia e informatica fin da ragazzo, la curiosità mi ha portato prima a conoscere e poi a collaborare con il Linux User Group della mia città (&lt;a href=&quot;https:&#x2F;&#x2F;prato.linux.it&quot;&gt;PLUG&lt;&#x2F;a&gt;), facendo attività di volontariato mirata alla diffusione del software libero, realizzando vari linuxday.&lt;&#x2F;p&gt;
&lt;p&gt;La mia passione é poi diventa anche il mio lavoro (gestione di infrastrutture complesse in contesti di alta affidabilità basate su linux).&lt;&#x2F;p&gt;
&lt;p&gt;Mi interesso di decentralizzazione, libertà degli utenti, indipendenza tecnica. Ho iniziato, quindi, a collaborare con il gruppo &lt;a href=&quot;http:&#x2F;&#x2F;devol.it&quot;&gt;Devol&lt;&#x2F;a&gt;: gestiamo una serie di &lt;a href=&quot;https:&#x2F;&#x2F;servizi.devol.it&quot;&gt;servizi liberi&lt;&#x2F;a&gt; che offriamo gratuitamente, con la consapevolezza di offrire alternative libere e rispettose della privacy.
Ho dato il mio contributo in quasi tutti i &lt;a href=&quot;https:&#x2F;&#x2F;servizi.devol.it&quot;&gt;servizi&lt;&#x2F;a&gt;, installandoli o collaborando alla loro gestione quotidiana.&lt;&#x2F;p&gt;
&lt;p&gt;Socio fondatore di &lt;a href=&quot;https:&#x2F;&#x2F;www.fedimedia.it&quot;&gt;Fedimedia Italia APS&lt;&#x2F;a&gt;, riporto cos&#x27;è direttamente dal sito:
&lt;strong&gt;Fedimedia Italia APS&lt;&#x2F;strong&gt; nasce per costruire un ecosistema digitale e sociale dove tecnologia, diritti e ambiente coesistono in armonia. Ci ispiriamo ai principi di software libero, decentralizzazione, privacy, sostenibilità e inclusività, collaborando con realtà che condividono la nostra visione. Per un futuro digitale etico, aperto e rispettoso del pianeta.&lt;&#x2F;p&gt;
&lt;p&gt;La passione per la tecnologia poi mi ha portato ad avvicinarmi (e a praticare come hobby) la fotografia, l&#x27;audio (hifi), la stampa 3d e le incisioni laser.&lt;&#x2F;p&gt;
&lt;p&gt;Per finire, non appena scopro un nuovo software, una nuova soluzione devo provarla subito!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;biografia-fotografica&quot;&gt;Biografia fotografica&lt;&#x2F;h2&gt;
&lt;p&gt;Sono nato in Toscana, nel centro Italia, all&#x27;inizio degli anni &#x27;80.
La fotografia è sempre stata la mia passione perché amo cambiare punto di vista.&lt;&#x2F;p&gt;
&lt;p&gt;Qualche anno fa ho acquistato la mia prima reflex e ho frequentato un corso di fotografia presso un circolo locale &lt;a href=&quot;https:&#x2F;&#x2F;www.ilbacchino.it&quot;&gt;Fotoclub Il Bacchnio&lt;&#x2F;a&gt;.
Da allora mi sono innamorato di quest&#x27;arte e ho lavorato sodo per affinare la mia tecnica e il mio gusto estetico.
Nel mio tempo libero, che non è mai abbastanza, amo scoprire il mondo che mi circonda attraverso l&#x27;obiettivo della mia macchina.&lt;&#x2F;p&gt;
&lt;p&gt;Ho selezionato alcuni dei miei lavori e li ho pubblicati su questo sito.
Le immagini che troverete qui sono state scattate nella zona in cui vivo e nei dintorni, ma non mancano foto scattate durante i miei viaggi (che purtroppo sono sempre troppo pochi e troppo brevi!).&lt;&#x2F;p&gt;
&lt;p&gt;Se avete suggerimenti, domande o se volete semplicemente condividere le vostre idee con me, potete contattarmi usando i link presenti a fondo di pagina.&lt;&#x2F;p&gt;
&lt;p&gt;A presto!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Forgejo Runner</title>
          <pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/forgejo-runner/</link>
          <guid>https://www.agostinelli.eu/blog/forgejo-runner/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/forgejo-runner/">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2025&#x2F;forgejo-logo.png&quot; alt=&quot;Forgejo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;che-cos-e-forgejo-runner&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#che-cos-e-forgejo-runner&quot; aria-label=&quot;Anchor link for: che-cos-e-forgejo-runner&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Che cos&#x27;è Forgejo Runner&lt;&#x2F;h2&gt;
&lt;p&gt;Se usi #forgejo e desideri automatizzare i processi di sviluppo, &lt;strong&gt;Forgejo Runner&lt;&#x2F;strong&gt; è uno strumento che non puoi perderti.&lt;&#x2F;p&gt;
&lt;p&gt;Se, invece, non sai cos&#x27;è #forgejo, clicca sulla parola e leggi l&#x27;articolo che avevo pubblicato qui sul blog.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definizione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#definizione&quot; aria-label=&quot;Anchor link for: definizione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Definizione&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo Runner è un sistema di automazione che &lt;strong&gt;esegue compiti&lt;&#x2F;strong&gt; in background quando &lt;strong&gt;accadono determinati eventi&lt;&#x2F;strong&gt; nel tuo repository. In altre parole, ti permette di automatizzare il flusso di lavoro del tuo progetto senza intervento manuale.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;come-funziona&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-funziona&quot; aria-label=&quot;Anchor link for: come-funziona&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come funziona&lt;&#x2F;h2&gt;
&lt;p&gt;Quando effettui un push, apri una pull request, o altro ancora, Forgejo Runner può automaticamente:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Eseguire test del codice&lt;&#x2F;li&gt;
&lt;li&gt;Compilare il progetto&lt;&#x2F;li&gt;
&lt;li&gt;Distribuire l&#x27;applicazione&lt;&#x2F;li&gt;
&lt;li&gt;Generare documentazione&lt;&#x2F;li&gt;
&lt;li&gt;Eseguire controlli di qualità&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Il tutto accade in automatico dietro le quinte, senza che tu debba fare nulla.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;perche-e-utile&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche-e-utile&quot; aria-label=&quot;Anchor link for: perche-e-utile&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché è utile&lt;&#x2F;h2&gt;
&lt;p&gt;Immagina di dover controllare manualmente che il tuo codice non abbia errori ogni volta che lo carichi. Sarebbe noioso, vero? Forgejo Runner elimina questo problema. Puoi definire una volta le regole che desideri applicare, e il sistema le seguirà automaticamente per ogni nuovo commit.&lt;&#x2F;p&gt;
&lt;p&gt;Questo significa codice più pulito, meno errori e molto meno lavoro manuale.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;un-esempio-pratico&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#un-esempio-pratico&quot; aria-label=&quot;Anchor link for: un-esempio-pratico&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Un esempio pratico&lt;&#x2F;h2&gt;
&lt;p&gt;Vogliamo che che ogni volta che qualcuno contribuisce al progetto, il codice venga testato automaticamente. Con Forgejo Runner, puoi impostare una regola che dice: &quot;Quando ricevi un nuovo push, esegui i test&quot;. Se i test falliscono, riceverai una notifica. Se passano, tutto procede normalmente.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;forgejo-runner-e-docker&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#forgejo-runner-e-docker&quot; aria-label=&quot;Anchor link for: forgejo-runner-e-docker&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Forgejo Runner e Docker&lt;&#x2F;h2&gt;
&lt;p&gt;Una delle migliori pratiche è eseguire i compiti dentro &lt;strong&gt;container Docker&lt;&#x2F;strong&gt;. Questo è diventato, ormai, lo standard di fatto nel settore.&lt;&#x2F;p&gt;
&lt;p&gt;Utilizzare Docker con Forgejo Runner offre numerosi vantaggi: isolamento completo tra i vari compiti (un test non interferisce con un altro), ambienti di esecuzione riproducibili e coerenti, e la certezza che il codice funzionerà allo stesso modo sia sulla tua macchina che sui server di produzione.&lt;&#x2F;p&gt;
&lt;p&gt;In pratica, invece di &lt;em&gt;eseguire i compiti direttamente sul sistema operativo host&lt;&#x2F;em&gt;, Forgejo Runner li avvia all&#x27;interno di container Docker preconfigurati. Questo significa che puoi definire esattamente quali dipendenze, librerie e versioni delle applicazioni servono per i tuoi test o per la compilazione, senza doverti preoccupare di conflitti con altre configurazioni.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pratica&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#pratica&quot; aria-label=&quot;Anchor link for: pratica&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Pratica&lt;&#x2F;h2&gt;
&lt;p&gt;Premesso quanto detto sopra, eseguire il nostro workflow in un container docker ci permette di avere un alto livello di sicurezza, sopratutto in un server condiviso.
Per rendere semplice l&#x27;esecuzione, ho pensato di realizzare un file &lt;strong&gt;docker compose&lt;&#x2F;strong&gt; (e un &lt;em&gt;.env&lt;&#x2F;em&gt;) con tutto il necessario: registrazione, aggiornamento automatico e avvio automatico.
Trovate il codice di questo mini progetto qui (ovviemente sempre ospitato su forgejo): https:&#x2F;&#x2F;forgejo.it&#x2F;magostinelli&#x2F;forgejo-runner-docker&lt;&#x2F;p&gt;
&lt;h3 id=&quot;configurazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazione&quot; aria-label=&quot;Anchor link for: configurazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazione&lt;&#x2F;h3&gt;
&lt;p&gt;Per prima cosa assicuratevi che la vostra istanza di forgejo abbia le action abilitate (altrimenti non vedrete la voce del menù).
Per poter aggiungere un runner al vostro workflow, sarà necessario generare un token.
Andate su &lt;em&gt;Forgejo Admin Panel → Runner (o Runners)&lt;&#x2F;em&gt;
(in alternativa potete aggiungere il runner al singolo progetto git)&lt;&#x2F;p&gt;
&lt;p&gt;Seguite le istruzioni presenti nel link sopra, compilando le varibili (file .env) con i vostri parametri, e lanciate (&lt;em&gt;docker compose up&lt;&#x2F;em&gt;) il vostro container.
Se tutto ha funzionato, vedrete il runner attivo nella schermata web di forgejo.&lt;&#x2F;p&gt;
&lt;p&gt;Adesso passiamo ad utilizzarlo.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;utilizzo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#utilizzo&quot; aria-label=&quot;Anchor link for: utilizzo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Utilizzo&lt;&#x2F;h3&gt;
&lt;p&gt;Vedi documentazione al link: https:&#x2F;&#x2F;forgejo.org&#x2F;docs&#x2F;latest&#x2F;user&#x2F;actions&#x2F;overview&#x2F;&lt;&#x2F;p&gt;
&lt;p&gt;Crea il file &lt;em&gt;forgejo&#x2F;workflows&#x2F;test.yml&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;esempio-di-workflow&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#esempio-di-workflow&quot; aria-label=&quot;Anchor link for: esempio-di-workflow&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Esempio di workflow&lt;&#x2F;h4&gt;
&lt;p&gt;forgejo&#x2F;workflows&#x2F;test.yml&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;yml&quot; class=&quot;language-yml z-code&quot;&gt;&lt;code class=&quot;language-yml&quot; data-lang=&quot;yml&quot;&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;Test Workflow&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;run-name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;Eseguito da ${{ forgejo.actor }}&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-constant z-language z-boolean z-yaml&quot;&gt;on&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-flow-sequence z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-sequence z-begin z-yaml&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-in z-yaml&quot;&gt;push&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-sequence z-end z-yaml&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;jobs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;  &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;test-job&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; Qui specifichi su quale runner deve girare il job
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-comment z-line z-number-sign z-yaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-line z-number-sign z-yaml&quot;&gt;#&lt;&#x2F;span&gt; Deve corrispondere a una delle etichette in RUNNER_LABELS
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;runs-on&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;docker&lt;&#x2F;span&gt; 
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;    &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;steps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;      &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;Stampa un messaggio&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;        &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;run&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;echo &amp;quot;Ciao mondo! Questo job sta girando sul mio runner Docker.&amp;quot;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;      &lt;span class=&quot;z-punctuation z-definition z-block z-sequence z-item z-yaml&quot;&gt;-&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;Mostra informazioni sul sistema&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;        &lt;span class=&quot;z-string z-unquoted z-plain z-out z-yaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-yaml&quot;&gt;run&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-mapping z-yaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-flow z-block-scalar z-literal z-yaml&quot;&gt;|&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-block z-yaml&quot;&gt;          echo &amp;quot;Utente corrente: $(whoami)&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-block z-yaml&quot;&gt;          echo &amp;quot;Directory corrente: $(pwd)&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-yaml&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-block z-yaml&quot;&gt;          uname -a
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;conclusione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#conclusione&quot; aria-label=&quot;Anchor link for: conclusione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Conclusione&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo Runner è essenzialmente un assistente che automatizza i compiti ripetitivi nel tuo flusso di lavoro di sviluppo. È perfetto se desideri risparmiare tempo, ridurre errori umani e mantenere la qualità del tuo codice consistente nel tempo.&lt;&#x2F;p&gt;
&lt;p&gt;Se stai già usando Forgejo, integrarvi Forgejo Runner (preferibilmente con Docker) potrebbe aiutarti ad incrementare la produttività grazie alle automazioni.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Mastodon: toot da command line</title>
          <pubDate>Sat, 01 Nov 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/mastodon-toot-da-command-line/</link>
          <guid>https://www.agostinelli.eu/blog/mastodon-toot-da-command-line/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/mastodon-toot-da-command-line/">&lt;p&gt;Non tutti sanno che... E&#x27; semplicissimo fare un &lt;strong&gt;post (toot)&lt;&#x2F;strong&gt; sul proprio profilo #mastodon con un semplice comando, ad esempio utilizzando #curl.&lt;&#x2F;p&gt;
&lt;p&gt;Vediamo come fare.&lt;&#x2F;p&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2025&#x2F;mastodon.svg&quot; alt=&quot;mastodon&quot; class=&quot;center-img&quot;&gt;
&lt;h2 id=&quot;abilitazione-e-creazione-token&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#abilitazione-e-creazione-token&quot; aria-label=&quot;Anchor link for: abilitazione-e-creazione-token&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Abilitazione e creazione token&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Accedere, con il vostro account, al l&#x27;istanza mastodon di riferimento.&lt;&#x2F;li&gt;
&lt;li&gt;Andare su &lt;em&gt;Preferenze&lt;&#x2F;em&gt; (menù a destra)&lt;&#x2F;li&gt;
&lt;li&gt;Andare su &lt;em&gt;Sviluppo&lt;&#x2F;em&gt; (menù a sinistra)&lt;&#x2F;li&gt;
&lt;li&gt;Fare click su &lt;em&gt;Nuova applòicazione&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Compilare tutti i campi e &lt;em&gt;concedere&lt;&#x2F;em&gt; almeno i permessi di &lt;em&gt;scrittura post&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Salvare in un &lt;strong&gt;luogo sicuro&lt;&#x2F;strong&gt; (password manager) quanto generato.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;comando-curl-di-esempio&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#comando-curl-di-esempio&quot; aria-label=&quot;Anchor link for: comando-curl-di-esempio&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Comando curl di esempio&lt;&#x2F;h2&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;curl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;X&lt;&#x2F;span&gt; POST https:&#x2F;&#x2F;mastodon.uno&#x2F;api&#x2F;v1&#x2F;statuses &lt;span class=&quot;z-punctuation z-separator z-continuation z-line z-shell&quot;&gt;\
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt;     -&lt;&#x2F;span&gt;H&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;Authorization: Bearer TOKEN_DI_ACCESSO&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-continuation z-line z-shell&quot;&gt;\
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt;     -&lt;&#x2F;span&gt;d&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;status=Ciao mondo&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-continuation z-line z-shell&quot;&gt;\
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt;     -&lt;&#x2F;span&gt;d&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;visibility=public&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-continuation z-line z-shell&quot;&gt;\
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;semplice-script-di-invio&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#semplice-script-di-invio&quot; aria-label=&quot;Anchor link for: semplice-script-di-invio&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Semplice Script di invio&lt;&#x2F;h3&gt;
&lt;p&gt;A questo punto possiamo farci un semplice script che prende in input, come parametro, del testo e lo invia per noi.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;cat&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; toot.sh&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-begin z-shell&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;!&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-begin z-shell&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt; Verifica che sia stato passato almeno un argomento&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-if z-shell&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-function z-test z-begin z-shell&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt;-&lt;&#x2F;span&gt;z&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-function z-test z-end z-shell&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-continue z-shell&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-conditional z-then z-shell&quot;&gt;then&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;  &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-support z-function z-echo z-shell&quot;&gt;echo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;Errore: devi passare il testo del toot come parametro.&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;  &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-support z-function z-echo z-shell&quot;&gt;echo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;Uso: &lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-character z-escape z-shell&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;Testo del toot&lt;span class=&quot;z-constant z-character z-escape z-shell&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;  &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-support z-function z-exit z-shell&quot;&gt;exit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; 1&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-end z-shell&quot;&gt;fi&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-begin z-shell&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt; Salva il parametro in una variabile&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-assignment z-shell&quot;&gt;TOOT&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-shell&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-begin z-shell&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt; Esegui la richiesta POST&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;curl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;s&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;X&lt;&#x2F;span&gt; POST https:&#x2F;&#x2F;mastodon.uno&#x2F;api&#x2F;v1&#x2F;statuses &lt;span class=&quot;z-punctuation z-separator z-continuation z-line z-shell&quot;&gt;\
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt;     -&lt;&#x2F;span&gt;H&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;Authorization: Bearer TOKEN_DI_ACCESSO&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-continuation z-line z-shell&quot;&gt;\
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt;     -&lt;&#x2F;span&gt;d&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;status=&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;TOOT&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-continuation z-line z-shell&quot;&gt;\
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt;     -&lt;&#x2F;span&gt;d&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;visibility=public&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-continuation z-line z-shell&quot;&gt;\
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt;-&lt;&#x2F;span&gt;H&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;Authorization: Bearer TOKEN_DI_ACCESSO&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-continuation z-line z-shell&quot;&gt;\
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-pipe z-shell&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;jq&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-string z-quoted z-single z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;.uri&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ho inserito #jq in fondo con un &lt;strong&gt;filtro&lt;&#x2F;strong&gt; (che possiamo modificare a nostro piacimento), perché l&#x27;output in formato &lt;em&gt;json&lt;&#x2F;em&gt; è abbastanza prolisso&lt;&#x2F;p&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2025&#x2F;curl_small.png&quot; alt=&quot;curl&quot; class=&quot;center-img&quot;&gt;
&lt;h2 id=&quot;perche&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche&quot; aria-label=&quot;Anchor link for: perche&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché?&lt;&#x2F;h2&gt;
&lt;p&gt;A parte che è bello fare il nerd è usare #mastodon da command line, ma la cosa può essere molto utile se la usiamo in abbinata ad altre azioni&#x2F;comandi.
Pensiamo ad esempio ad un integraszione con #forgejo, ad esempio potremmo fare un post (tramite #webook) al termine del nostro workflow.&lt;&#x2F;p&gt;
&lt;p&gt;Un altro esempio è il collegare l&#x27;account ad un servizio di monitoraggio come #uptimekuma in questo modo si avrà una pagina che indica ai follower lo stato dei nostri servizi.&lt;&#x2F;p&gt;
&lt;p&gt;Oppure usarlo al termine di un nostro script che preleva i prossimi appuntamenti da un caledario ics.&lt;&#x2F;p&gt;
&lt;p&gt;Insomma, potete integrare l&#x27;invio di un toot alla fine di un vostro script custom, il limite a questo punto è solo la fantasia!&lt;&#x2F;p&gt;
&lt;p&gt;E voi come lo usate?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Forgejo con Docker: Git self-hosted senza fronzoli</title>
          <pubDate>Fri, 11 Jul 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/forgejo-con-docker-git-self-hosted-senza-fronzoli/</link>
          <guid>https://www.agostinelli.eu/blog/forgejo-con-docker-git-self-hosted-senza-fronzoli/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/forgejo-con-docker-git-self-hosted-senza-fronzoli/">&lt;p&gt;Da tempo utilizzo Git per gestire i miei progetti personali, sia software che di configurazione. Per anni mi sono affidato al pc di qualcunaltro (es: Gitlab o GitHub), ma la dipendenza da un servizio centralizzato, per quanto comodo, inizia a starmi stretta. Così ho cercato una soluzione più allineata alla mia filosofia: &lt;strong&gt;Forgejo&lt;&#x2F;strong&gt;, un fork comunitario di Gitea, leggero e facilmente self-hostabile.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2025&#x2F;forgejo-logo.png&quot; alt=&quot;Forgejo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;perche-forgejo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche-forgejo&quot; aria-label=&quot;Anchor link for: perche-forgejo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché Forgejo&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo nasce da una comunità che punta alla trasparenza e all’autonomia, senza il rischio che un progetto venga assorbito o piegato a logiche commerciali. La compatibilità con Gitea è totale, e i requisiti minimi lo rendono perfetto per VPS o server casalinghi.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;veniamo-subito-al-dunque-e-facciamolo-partire-cosi-potremo-provarlo-con-mano&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#veniamo-subito-al-dunque-e-facciamolo-partire-cosi-potremo-provarlo-con-mano&quot; aria-label=&quot;Anchor link for: veniamo-subito-al-dunque-e-facciamolo-partire-cosi-potremo-provarlo-con-mano&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Veniamo subito al dunque e facciamolo partire, cosi potremo provarlo con mano!&lt;&#x2F;h2&gt;
&lt;h2 id=&quot;setup-con-docker&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#setup-con-docker&quot; aria-label=&quot;Anchor link for: setup-con-docker&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Setup con Docker&lt;&#x2F;h2&gt;
&lt;p&gt;Ci affidiamo a Docker Compose, cosi con un solo file di configurazione abbiamo tutto il necessario.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker-compose-yaml&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#docker-compose-yaml&quot; aria-label=&quot;Anchor link for: docker-compose-yaml&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
docker-compose.yaml&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;services:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;  &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;forgejo:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;image:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; codeberg.org&#x2F;forgejo&#x2F;forgejo:latest&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;container_name:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; forgejo&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;restart:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; always&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;environment:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; USER_UID=1000&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; USER_GID=1000&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;volumes:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; .&#x2F;data:&#x2F;data&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &#x2F;etc&#x2F;timezone:&#x2F;etc&#x2F;timezone:ro&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &#x2F;etc&#x2F;localtime:&#x2F;etc&#x2F;localtime:ro&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; .&#x2F;robots.txt:&#x2F;data&#x2F;gitea&#x2F;public&#x2F;robots.txt:ro&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;expose:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;3000&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;networks:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;      &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;-&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; forgejo_net&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;networks:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;  &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;forgejo_net:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;    &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;driver:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; bridge&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;reverse-proxy&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#reverse-proxy&quot; aria-label=&quot;Anchor link for: reverse-proxy&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Reverse Proxy&lt;&#x2F;h3&gt;
&lt;p&gt;E&#x27; possibile usare il web server che preferiamo, come ad esempio traefik, caddy, apache o nginx, in questo articolo vedremo un esempio con quest&#x27;ultimo.&lt;&#x2F;p&gt;
&lt;p&gt;Qui una configurazione base con https (via Let&#x27;s Encrypt, gestito esternamente):&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;etc&#x2F;nginx&#x2F;sites-available&#x2F;forgejo.conf
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;server {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    listen 80;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    server_name git.miodominio.it;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    return 301 https:&#x2F;&#x2F;$host$request_uri;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;}
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;server {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    listen 443 ssl;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    server_name git.miodominio.it;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    ssl_certificate &#x2F;etc&#x2F;letsencrypt&#x2F;live&#x2F;git.miodominio.it&#x2F;fullchain.pem;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    ssl_certificate_key &#x2F;etc&#x2F;letsencrypt&#x2F;live&#x2F;git.miodominio.it&#x2F;privkey.pem;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    location &#x2F; {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        proxy_pass http:&#x2F;&#x2F;localhost:3000;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        proxy_set_header Host $host;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        proxy_set_header X-Real-IP $remote_addr;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;        proxy_set_header X-Forwarded-Proto $scheme;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    }
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Dopo aver creato il file, attivare con:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;ln&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;s&lt;&#x2F;span&gt; &#x2F;etc&#x2F;nginx&#x2F;sites-available&#x2F;forgejo.conf &#x2F;etc&#x2F;nginx&#x2F;sites-enabled&#x2F;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;nginx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;t&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-and z-shell&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;systemctl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; reload nginx&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;backup-automatico&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#backup-automatico&quot; aria-label=&quot;Anchor link for: backup-automatico&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Backup automatico&lt;&#x2F;h2&gt;
&lt;p&gt;Il backup rappresenta un step fondamentale del nostro setup, conviene implementarne subito uno all&#x27;avvio del servizio, cosi non ce ne dimenticvheremo e terremo i nostri dati al sicuro. Ricordiamoci che qui salveremo il risultato di diverse ore di programmazione, studio e prove!&lt;&#x2F;p&gt;
&lt;p&gt;I nostri dati si trovano nel volume data di cui sopra, quindi sarà sufficiente salvare il docker file e la directory data.
Io consiglio di usare #borg ma potete usare il softwsre che preferite, trovo particolarmente utile aggiungere questa nuova directory alle procedure di salvataggio che sicuremante avrete già per tutto il resto.
(se non le avete potete anche smettere di leggere questo blog, tornate quando ne avrete implementata una).&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;configurazioni-iniziali&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazioni-iniziali&quot; aria-label=&quot;Anchor link for: configurazioni-iniziali&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazioni iniziali&lt;&#x2F;h2&gt;
&lt;p&gt;A questo punto, dopo l&#x27;installazione, non ci resta che accedere via web al nostro software e fare le prime configurazioni.
È possibile creare utenti, organizzazioni, concedere permessi e creare tutti i repository che si desiderano.&lt;&#x2F;p&gt;
&lt;p&gt;Ciascun progetto può essere impostato ad accesso &lt;em&gt;privatp&lt;&#x2F;em&gt; o &lt;em&gt;pubblico&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;In questo modo sarà semplicissimo collaborare in più persone allo stesso progetto, tenendo traccia delle varie modifiche.&lt;&#x2F;p&gt;
&lt;p&gt;Infine è anche possibile importare direttamente altri repository git.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;runner-e-action&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#runner-e-action&quot; aria-label=&quot;Anchor link for: runner-e-action&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Runner e Action&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo, essendo un fork di Gitea, supporta un sistema di &lt;em&gt;CI&#x2F;CD&lt;&#x2F;em&gt; integrato chiamato Actions, simile a GitHub Actions, e permette di eseguire job di build o deploy tramite runner personalizzati.&lt;&#x2F;p&gt;
&lt;p&gt;Io stesso ne faccio uso, è uno dei motivi per cui mi sto trovando benissimo con forgejo! Ho varie configurazione a seconda del progetto ospitato, ma essenzialmente queste si occupano di effettuare il &quot;deploy&quot; del codice, cioé copiano a destinazione (server di sviluppo o di produzione a seconda dei casi), il codice modificato, cosi che sia pronto all&#x27;uso.
In questo modo, grazie alla history di git, sarà sempre possibile tornare indietro, nonché tenere traccia delle modifiche nel tempo.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;come-funziona&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-funziona&quot; aria-label=&quot;Anchor link for: come-funziona&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come funziona&lt;&#x2F;h3&gt;
&lt;p&gt;Le Actions sono definite da file YAML nei repository (.forgejo&#x2F;workflows&#x2F;), e possono contenere job con step eseguiti su runner registrati.&lt;&#x2F;p&gt;
&lt;p&gt;I runner sono agent installati su macchine (stessa VPS o remote), che si collegano al server Forgejo e attendono job da eseguire.&lt;&#x2F;p&gt;
&lt;p&gt;Una volta definita la condizione scatenante (es: commit su ramo main, rilascio di una nuova versione, ecc) partirà il worksflow che abbiamo definito, con la possibilità di verificarne lo stato di esecuzione in tempo reale. Infine è anche possibile andare a vedere i log delle esecuzione precedenti.&lt;&#x2F;p&gt;
&lt;p&gt;All&#x27;interno di una action si possono usare #secret e #variabili, in modo da poter riusare il codice della action e allo stesso tempo mantenere al sicuro le credenziali.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;setup-runner-base&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#setup-runner-base&quot; aria-label=&quot;Anchor link for: setup-runner-base&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Setup runner base&lt;&#x2F;h3&gt;
&lt;p&gt;Vediamo come creare un nuovo runner, passo passo:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-shell&quot;&gt;export&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-assignment z-shell&quot;&gt;RUNNER_VERSION&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-shell&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-shell&quot;&gt;&lt;span class=&quot;z-meta z-group z-expansion z-command z-parens z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-shell&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;curl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;X&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;GET&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; https:&#x2F;&#x2F;data.forgejo.org&#x2F;api&#x2F;v1&#x2F;repos&#x2F;forgejo&#x2F;runner&#x2F;releases&#x2F;latest&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-pipe z-shell&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;jq&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; .name&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;r&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-pipe z-shell&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;cut&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;c&lt;&#x2F;span&gt; 2-&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-shell&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;wget&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;O&lt;&#x2F;span&gt; forgejo-runner https:&#x2F;&#x2F;code.forgejo.org&#x2F;forgejo&#x2F;runner&#x2F;releases&#x2F;download&#x2F;v&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-begin z-shell&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;RUNNER_VERSION&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-end z-shell&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&#x2F;forgejo-runner-&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-begin z-shell&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;RUNNER_VERSION&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-end z-shell&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;-linux-amd64&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;chmod&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; +x forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; mv forgejo-runner &#x2F;usr&#x2F;local&#x2F;bin&#x2F;forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; useradd&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;m&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;s&lt;&#x2F;span&gt; &#x2F;bin&#x2F;bash forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; usermod&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;aG&lt;&#x2F;span&gt; docker forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Rechiamoci sull&#x27;interfaccia web di Forgejo:
&lt;em&gt;Forgejo &amp;gt; Repository &amp;gt; Settings &amp;gt; Actions &amp;gt; Runners &amp;gt; &quot;Generate new token&quot;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;i&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;u&lt;&#x2F;span&gt; forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;forgejo-runner&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; register&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;avvio-automatico-del-runner&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#avvio-automatico-del-runner&quot; aria-label=&quot;Anchor link for: avvio-automatico-del-runner&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Avvio automatico del runner&lt;&#x2F;h4&gt;
&lt;p&gt;Io ho usato uno script systemd per l&#x27;avvio automatico, ve lo riporto di seguito&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; echo &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;[Unit]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;Description=Forgejo Act Runner
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;After=network.target docker.service
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;Requires=docker.service
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;[Service]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;User=forgejo-runner
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;Group=forgejo-runner
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;ExecStart=&#x2F;usr&#x2F;local&#x2F;bin&#x2F;forgejo-runner daemon
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;Restart=always
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;WorkingDirectory=&#x2F;home&#x2F;forgejo-runner
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;[Install]
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;WantedBy=multi-user.target&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-redirection z-shell&quot;&gt;&amp;gt;&lt;&#x2F;span&gt; &#x2F;etc&#x2F;systemd&#x2F;system&#x2F;forgejo-runner.service&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; systemctl daemon-reload&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; systemctl enable forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; systemctl start forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;systemctl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; status forgejo-runner&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;vantaggi-in-breve&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#vantaggi-in-breve&quot; aria-label=&quot;Anchor link for: vantaggi-in-breve&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Vantaggi in breve&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Repository del proprio codice, diviso come si preferisce: singoli progetti, organizzazioni, ecc.&lt;&#x2F;li&gt;
&lt;li&gt;Possibilità di creare utenti per collaboratori&#x2F;amici con controllo sugli accessi&#x2F;permessi.&lt;&#x2F;li&gt;
&lt;li&gt;Automatizzo test, build, deploy senza dipendere da servizi esterni.&lt;&#x2F;li&gt;
&lt;li&gt;Nessuna dipendenza da fornitori terzi e nessun limite di spazio, esecuzioni, personalizzazioni.&lt;&#x2F;li&gt;
&lt;li&gt;Versionamento del codice, e nel caso di ci&#x2F;cd garanzia di riproducibilità&lt;&#x2F;li&gt;
&lt;li&gt;Pocchissime risorse necessarie lato server&lt;&#x2F;li&gt;
&lt;li&gt;Vuoi mettere quanto è figo avere il proprio servizio di versionamento?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;uso-quotidiano&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#uso-quotidiano&quot; aria-label=&quot;Anchor link for: uso-quotidiano&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Uso quotidiano&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo supporta #git via #ssh, Web UI e #webhooks. Ho configurato alcuni repository con CI locale usando le Actions e i runner integrati. L’interfaccia è leggera e pulita, senza funzionalità inutili.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusioni&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#conclusioni&quot; aria-label=&quot;Anchor link for: conclusioni&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Conclusioni&lt;&#x2F;h2&gt;
&lt;p&gt;Forgejo è una soluzione Git solida, coerente con un approccio decentralizzato. Semplice da gestire, veloce da installare, e adatta anche per chi – come me – preferisce sapere dove stanno i propri dati. Per ora lo utilizzo solo per progetti personali, ma potrei iniziare a usarlo anche per collaborazioni future.&lt;&#x2F;p&gt;
&lt;p&gt;Non vi resta che provarlo, fatemi sapere le vostre impressioni con un commento nel #fediverso su questo articolo.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Upgrade Home Server </title>
          <pubDate>Mon, 09 Dec 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/upgrade-home-server/</link>
          <guid>https://www.agostinelli.eu/blog/upgrade-home-server/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/upgrade-home-server/">&lt;p&gt;Alla fine ho ceduto, ho acquistato un &lt;strong&gt;mini pc&lt;&#x2F;strong&gt; usato di qualche anno fa.
Come molti si voi sapranno, da anni il pc sempre acceso di casa mia è un raspberry pi 4, dove gira la domotica di casa (#homeassistant) e qualche altro (piccolo) servizio.&lt;&#x2F;p&gt;
&lt;p&gt;Da tempo ero arrivato un po&#x27; al limite, perché ho un sacco di sensori e vorrei conservare un po&#x27; di storico (comodo ad esempio per analizzare consumi), ho quindi iniziato a guardarmi intorno.&lt;&#x2F;p&gt;
&lt;p&gt;Per primo ho pensato al pi 5, a cui però vanno aggiunti alimentatore, case, memorie, e quindi il prezzo quasi raddoppia. Da lì sono passato a guardare cosa offriva il mercato dell&#x27;usato, ed eccomi giunto a questa riflessione che condivido con voi.&lt;&#x2F;p&gt;
&lt;p&gt;Innanzi tutto i minipc, grazie ai nuovi dischi &lt;strong&gt;nvme&lt;&#x2F;strong&gt; sono sia &lt;strong&gt;compatti&lt;&#x2F;strong&gt;, ma anche &lt;strong&gt;silenziosi&lt;&#x2F;strong&gt;, e poi finalmente da qualche anno a questa parte, non si guarda solo all&#x27;evoluzione in termini di prestazioni, ma anche all&#x27; &lt;strong&gt;efficienza energetica&lt;&#x2F;strong&gt;.
Anche l&#x27;ormai affermata architettura &lt;strong&gt;x86&lt;&#x2F;strong&gt; è stata costretta a correre ai ripari nei confronti di &lt;strong&gt;arm&lt;&#x2F;strong&gt;, molto più efficiente sotto questo punto di vista.&lt;&#x2F;p&gt;
&lt;p&gt;Altra cosa da considerare è che negli ultimi 4-5 anni non c&#x27;è stata chissà quale &lt;strong&gt;rivoluzione sull&#x27;hardware&lt;&#x2F;strong&gt; e quindi un pc di qualche anno fa è più che sufficiente per i miei scopi (e quelli di molti) .
Il sistema operativo #GnuLinux è molto &lt;strong&gt;efficiente&lt;&#x2F;strong&gt; nel &quot;ridare&quot; vita a vecchi pc, è in pratica un matrimonio perfetto!&lt;&#x2F;p&gt;
&lt;p&gt;In rete (ebay, subito, amazon) si trovano molti di questi pc ricondizionati, in quanto spesso sono usati, o meglio noleggiati, da aziende per pc ad uso ufficio.&lt;&#x2F;p&gt;
&lt;p&gt;Ovviamente questi mini pc hanno un tdp (= consumo) più alto di un raspberry pi, ma anche molta più potenza di calcolo!
Potete addirittura metterci sopra #proxmox e vari server virtuali, a patto di avere memoria ram a sufficienza.
Io penso che opterò per #debian su cui userò un po&#x27; di software nativi (pacchetti ufficiali) e un po&#x27; di immagini #docker alla bisogna.&lt;&#x2F;p&gt;
&lt;p&gt;Il modello che ho scelto (&lt;strong&gt;Lenovo m900 tiny&lt;&#x2F;strong&gt;) è dotato di processore Intel Core i5 6500T, dove la T finale, appunto, strizza l&#x27;occhio ai bassi consumi.&lt;&#x2F;p&gt;
&lt;p&gt;Il pc è anche dotato di varie uscite video e può anche essere montato dietro ad uno schermo, ma io lo userò in modalità #headless, cioè senza monitor collegato.&lt;&#x2F;p&gt;
&lt;p&gt;L&#x27;interno hardware del dispositivo è tale e quale ad un portatile, stesso processore, stessa scheda madre, ecc ecc.
Ritengo che per uso ufficio e casa è perfetto, basta collegare un monitor (o una tv), tastiera, mouse e via.
Per questi usi, va più che bene (con linux), ed è poco rumoroso.&lt;&#x2F;p&gt;
&lt;p&gt;Quindi, per concludere, adesso aspetto che mi arrivi e dopo ci vorrà qualche giorno (non vi nascondo che mi fa un po&#x27; fatica) per trasferire tutto quello che avevo sul vecchio sul nuovo!&lt;&#x2F;p&gt;
&lt;p&gt;Spero di avervi fornito qualche spunto di riflessione interessante, soprattutto riguardo al &lt;strong&gt;riciclo&lt;&#x2F;strong&gt; dell&#x27;hardware, e voi ci avete mai fatto un pensierino?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Terminale nel 2025? Ha ancora senso?</title>
          <pubDate>Sat, 19 Oct 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/terminale-nel-2025-ha-ancora-senso/</link>
          <guid>https://www.agostinelli.eu/blog/terminale-nel-2025-ha-ancora-senso/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/terminale-nel-2025-ha-ancora-senso/">&lt;p&gt;Beh, chi mi conosce saprà già che la mia risposta è decisamente si!&lt;&#x2F;p&gt;
&lt;p&gt;Non c&#x27;è giorno in cui non lo utilizzi.
Molte operazioni sono molto &lt;strong&gt;più veloci&lt;&#x2F;strong&gt; se fatte da terminale, come ad esempio quelle che si possono effettuare su molti file in un colpo solo!
Bisogna ammettere che, iniziando da zero, la strada è in salita, c&#x27;è molto da imparare, ma una volta acquisita una certa padronanza, velocizzerete moltissimo il vostro flusso di lavoro e non solo ci sono delle operazioni che si possono effettuare solo in questo modo.. Pensate, ad esempio, alla modifica solo di alcuni file in mezzo a migliaia, oppure spostare solo quelli che rispettano alcuni criteri.&lt;&#x2F;p&gt;
&lt;p&gt;Nel mio caso terminale è sinonimo di #bash, la shell più usata in ambito #linux.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;Bash-Functions.jpg&quot; alt=&quot;Bash&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;esempi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#esempi&quot; aria-label=&quot;Anchor link for: esempi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Esempi&lt;&#x2F;h2&gt;
&lt;p&gt;Quelli che seguono sono alcuni esempi dei &lt;strong&gt;miei utilizzi più comuni&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;resize-massivo-di-immagini&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#resize-massivo-di-immagini&quot; aria-label=&quot;Anchor link for: resize-massivo-di-immagini&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Resize massivo di immagini&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;find&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &#x2F;home&#x2F;yunohost.app&#x2F;nextcloud&#x2F;data&#x2F;__groupfolders&#x2F;3&#x2F;prove&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;type&lt;&#x2F;span&gt; f&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;iname&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;*.jpg&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;exec&lt;&#x2F;span&gt; mogrify&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;define&lt;&#x2F;span&gt; preserve-timestamp=true&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;verbose&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;resize&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;2048x2048&amp;gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;quality&lt;&#x2F;span&gt; 90 &lt;span class=&quot;z-meta z-group z-expansion z-brace z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-brace z-begin z-shell&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-brace z-end z-shell&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-character z-escape z-shell&quot;&gt;\;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;resize-massivo-di-video&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#resize-massivo-di-video&quot; aria-label=&quot;Anchor link for: resize-massivo-di-video&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Resize massivo di video&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;mencoder&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; panettone.mov&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;vf&lt;&#x2F;span&gt; rotate=1&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;oac&lt;&#x2F;span&gt; pcm&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;ovc&lt;&#x2F;span&gt; lavc&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;lavcopts&lt;&#x2F;span&gt; ffmpeg&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;i&lt;&#x2F;span&gt; input.file&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;c&lt;&#x2F;span&gt;:v mpeg4&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;q&lt;&#x2F;span&gt;:v 5&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;tag&lt;&#x2F;span&gt;:v DIVX&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;vf&lt;&#x2F;span&gt; scale=w=720:h=576:force_original_aspect_ratio=decrease&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;c&lt;&#x2F;span&gt;:a libmp3lame&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;q&lt;&#x2F;span&gt;:a 3&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;ac&lt;&#x2F;span&gt; 2&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;ar&lt;&#x2F;span&gt; 44100 output.avi&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;trovare-tutti-i-link-simbolici-rotti&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#trovare-tutti-i-link-simbolici-rotti&quot; aria-label=&quot;Anchor link for: trovare-tutti-i-link-simbolici-rotti&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Trovare tutti i link simbolici &quot;rotti&quot;&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;find&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &#x2F;opt&#x2F;mypath&#x2F;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;xtype&lt;&#x2F;span&gt; l&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;rinomina-di-massa-file&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#rinomina-di-massa-file&quot; aria-label=&quot;Anchor link for: rinomina-di-massa-file&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Rinomina di massa file&lt;&#x2F;h3&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-for z-shell&quot;&gt;for&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-for z-shell&quot;&gt; i &lt;span class=&quot;z-keyword z-control z-in z-shell&quot;&gt;in&lt;&#x2F;span&gt; File&lt;span class=&quot;z-keyword z-operator z-regexp z-quantifier z-shell&quot;&gt;*&lt;&#x2F;span&gt;.txt&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-continue z-shell&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-loop z-do z-shell&quot;&gt;do&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-readwrite z-assignment z-shell&quot;&gt;j&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-shell&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-meta z-group z-expansion z-command z-backticks z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-shell&quot;&gt;`&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-support z-function z-echo z-shell&quot;&gt;echo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-pipe z-shell&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-string z-quoted z-single z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;s&#x2F;questo&#x2F;quello&#x2F;g&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-shell&quot;&gt;`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-continue z-shell&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;mv&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;j&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-continue z-shell&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-loop z-end z-shell&quot;&gt;done&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;ottimizzazione-file-pdf&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#ottimizzazione-file-pdf&quot; aria-label=&quot;Anchor link for: ottimizzazione-file-pdf&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Ottimizzazione file pdf&lt;&#x2F;h3&gt;
&lt;p&gt;Se vogliamo ridurre le dimensioni di alcuni file pdf in un certo path, rinunciando alla qualità delle immmagini.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-for z-shell&quot;&gt;for&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-for z-shell&quot;&gt; file &lt;span class=&quot;z-keyword z-control z-in z-shell&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-expansion z-command z-parens z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-shell&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; suffisso_&lt;span class=&quot;z-keyword z-operator z-regexp z-quantifier z-shell&quot;&gt;*&lt;&#x2F;span&gt;.pdf&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-shell&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-continue z-shell&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-loop z-do z-shell&quot;&gt;do&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;gs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;sOutputFile&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-option z-shell&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-begin z-shell&quot;&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;resize_file&lt;span class=&quot;z-keyword z-operator z-expansion z-shell&quot;&gt;%%&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;.&lt;span class=&quot;z-keyword z-operator z-regexp z-quantifier z-shell&quot;&gt;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-expansion z-parameter z-end z-shell&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;.pdf&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;sDEVICE&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-option z-shell&quot;&gt;=&lt;&#x2F;span&gt;pdfwrite&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;dBATCH&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;dNOPAUSE&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;dDownsampleColorImages&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-option z-shell&quot;&gt;=&lt;&#x2F;span&gt;true&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;dDownsampleGrayImages&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-option z-shell&quot;&gt;=&lt;&#x2F;span&gt;true &lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;file&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-continue z-shell&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-loop z-end z-shell&quot;&gt;done&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;sincronizzazione-di-file-e-directory&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#sincronizzazione-di-file-e-directory&quot; aria-label=&quot;Anchor link for: sincronizzazione-di-file-e-directory&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
sincronizzazione di file e directory&lt;&#x2F;h3&gt;
&lt;p&gt;Questo comando si può usare sia tra due directory dello stesso computer, sia nel caso uno dei due sia remoto, l&#x27;enorme vantaggio sta nella seconda volta in cui viene lanciato, solo le differenze tra il primo e il secondo saranno trasferite, ottimizzando, quindi, i tempi del trasferimento. (saranno riportati anche i permessi dei singoli file)&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;rsync&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;auvx&lt;&#x2F;span&gt; &#x2F;orgine&#x2F; &#x2F;destinazione&#x2F;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;conversioni-di-formato-audio-video-ma-non-solo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#conversioni-di-formato-audio-video-ma-non-solo&quot; aria-label=&quot;Anchor link for: conversioni-di-formato-audio-video-ma-non-solo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Conversioni di formato (audio, video, ma non solo)&lt;&#x2F;h3&gt;
&lt;h4 id=&quot;flac-diversi-metodi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#flac-diversi-metodi&quot; aria-label=&quot;Anchor link for: flac-diversi-metodi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Flac (diversi metodi)&lt;&#x2F;h4&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;sox&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; track_01.wav track_01.flac&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-for z-shell&quot;&gt;for&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-for z-shell&quot;&gt; myfile &lt;span class=&quot;z-keyword z-control z-in z-shell&quot;&gt;in&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-expansion z-command z-parens z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-shell&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-keyword z-operator z-regexp z-quantifier z-shell&quot;&gt;*&lt;&#x2F;span&gt;.wav&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-shell&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-continue z-shell&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-loop z-do z-shell&quot;&gt;do&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;flac&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; --&lt;&#x2F;span&gt;verify&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; --&lt;&#x2F;span&gt;replay-gain&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; --&lt;&#x2F;span&gt;best&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; --&lt;&#x2F;span&gt;delete-input-file&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;myfile&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-logical z-continue z-shell&quot;&gt;;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-loop z-end z-shell&quot;&gt;done&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;ffmpeg&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;i&lt;&#x2F;span&gt; in.wav&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;af&lt;&#x2F;span&gt; aformat=s16:44100 out.flac&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;ssh&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#ssh&quot; aria-label=&quot;Anchor link for: ssh&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Ssh&lt;&#x2F;h2&gt;
&lt;p&gt;Spesso la shell (= riga di comando) va a braccetto con il software ssh, che permette di collegarsi su un sistema remoto.
Grazie alla combinazione dei due, è possibile amministrare server remoti (cioé diversi dal pc che stiamo usando) o headless, cioé privi dell&#x27;interfaccia grafica (che consuma solo risorse aggiuntive), come il famoso #raspberrypi.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;curl&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#curl&quot; aria-label=&quot;Anchor link for: curl&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
curl&lt;&#x2F;h2&gt;
&lt;p&gt;Come non citare &lt;a href=&quot;https:&#x2F;&#x2F;curl.se&quot;&gt;curl&lt;&#x2F;a&gt; il coltellino svizzero della riga di comando, specializzando in richieste remote via http e trasferimento di file.
Su questo strumento (#curl) farò un articolo apposito, perché è uno strumento molto potente, in continuo sviluppo e con numerosi casi d&#x27;uso.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vim&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#vim&quot; aria-label=&quot;Anchor link for: vim&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Vim&lt;&#x2F;h2&gt;
&lt;p&gt;E&#x27; il mio editor per eccellenza, quando uso il terminale uso lui per editare i file di testo (e non solo).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installazione-pacchetti&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#installazione-pacchetti&quot; aria-label=&quot;Anchor link for: installazione-pacchetti&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Installazione pacchetti&lt;&#x2F;h2&gt;
&lt;p&gt;Tutte le varie distribuzioni linux hanno degli appositi software (rigorosamente da riga di comando) per installare i pacchetti e le loro dipendenze, alcuni esempi:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;apt (Debian&#x2F;Ubuntu)&lt;&#x2F;li&gt;
&lt;li&gt;dnf (Fedora, redhat)&lt;&#x2F;li&gt;
&lt;li&gt;pacman (Arclinux)&lt;&#x2F;li&gt;
&lt;li&gt;apk (Alpine)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;ansible&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#ansible&quot; aria-label=&quot;Anchor link for: ansible&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Ansible&lt;&#x2F;h2&gt;
&lt;p&gt;Oltre a bash, di cui sopra abbiamo ampiamente parlato, #ansible merita una mensione d&#x27;onore (è probabile che in futuro farò un articolo dedicato a questo strumento).
Ansible è un tool (open source) di automazione, con cui effettuare il provisioning, la gestione della configurazione, il deploy delle applicazioni e moltissimi altri processi IT, in modo semplice, organizzato e automatizzato.
Il suo utilizzo è libero, e in rete è possibile trovare migliaia di playbook (script), condivisi da altri utenti che permettono di automatizzare i compiti più disparati.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;software-di-backup&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#software-di-backup&quot; aria-label=&quot;Anchor link for: software-di-backup&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Software di Backup&lt;&#x2F;h2&gt;
&lt;p&gt;Da sempre Linux (ma non solo) offre molti software per gestire il backup da riga di comando.
Alcuni esempi&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;borg&lt;&#x2F;li&gt;
&lt;li&gt;duplicity&lt;&#x2F;li&gt;
&lt;li&gt;restic&lt;&#x2F;li&gt;
&lt;li&gt;rsync&lt;&#x2F;li&gt;
&lt;li&gt;rclone&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;powershell&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#powershell&quot; aria-label=&quot;Anchor link for: powershell&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Powershell&lt;&#x2F;h2&gt;
&lt;p&gt;Infine una piccola digressione&#x2F;informazione, anche Microsoft è stata costretta ad ammettere la &lt;strong&gt;superiorità della riga di comando&lt;&#x2F;strong&gt;, infatti dopo anni in cui ha puntato esclusivamente a rendere le interfacce sempre più accattivanti, da qualche anno fornisce insieme ai suoi sistemi operativi la #powershell.
Con questo software, di fatto, non ha voluto rimanere indietro rispetto al competitor #linux. In pratica è un ammissione circa il fatto che alcune cose si fanno meglio e più velocemente con la riga di comando!
Nel corso del tempo sono nate estenzioni per questa shell, e ormai è possibile effettuare moltissime operazioni, purtroppo ha una propria sintassi, quindi sarà necessario studiare un po&#x27;.&lt;&#x2F;p&gt;
&lt;p&gt;Per motivi spazio e tempi di lettura l&#x27;articolo finisce qui, ma ci sarebbe materiale a sufficienza per scrivere libri su libri o riempire di articoli giornalieri un blog.
Spero di avervi un po&#x27; incuriosito a provare, e con che i miei &lt;em&gt;appunti&lt;&#x2F;em&gt; su qualche comando che uso vi siano di aiuto.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Storage S3 (Simple Storage Service) </title>
          <pubDate>Sun, 22 Sep 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/storage-s3-simple-storage-service/</link>
          <guid>https://www.agostinelli.eu/blog/storage-s3-simple-storage-service/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/storage-s3-simple-storage-service/">&lt;h2 id=&quot;cos-e&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cos-e&quot; aria-label=&quot;Anchor link for: cos-e&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cos&#x27;è?&lt;&#x2F;h2&gt;
&lt;p&gt;Amazon S3 è un tipo di storage in grado di memorizzare vari tipi di oggetti, è usato per applicazioni internet, backup, disaster receovery, archiviazione dati e per memorizzare grandissime quantità di dati per poi essere analizzate.
Questo servizio è stato lanciato negli usa nel 2006 ed in Europa è arrivato, invece, l&#x27;anno successivo.&lt;&#x2F;p&gt;
&lt;p&gt;Come abbiamo visto, è nato come un servizio del cloud Amazon, ma poi moltissimi altri vendor (o software) hanno implementato le stesse Api, e quindi è diventato uno standard usato da molti altri fornitori (o software).
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;308082479.png&quot; alt=&quot;S3 storage&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vantaggi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#vantaggi&quot; aria-label=&quot;Anchor link for: vantaggi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Vantaggi&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Costo ridotto&lt;&#x2F;li&gt;
&lt;li&gt;Possibilità di usarlo come repository per i nostri backup (a buon mercato).&lt;&#x2F;li&gt;
&lt;li&gt;Se hostiamo un servizio, possiamo optare per una VPS con disco ridotto (magari del tipo NVME), per poi usare s3 per memorizzare i dati di grandi dimensioni, in questo modo massimizziamo prestazioni e conteniamo i costi.&lt;&#x2F;li&gt;
&lt;li&gt;Funzionalità avanzate: cifratura dei dati, immutabilità del dato, snapshot, regole sul ciclo di vita dei dati, ecc.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;svantaggi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#svantaggi&quot; aria-label=&quot;Anchor link for: svantaggi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Svantaggi&lt;&#x2F;h2&gt;
&lt;p&gt;Vendor locking, diventa fondamentale prevedere un backup (magari incrementale) su un altro provider, ma non ovviamente avremo un raddoppio dei costi.
Impossibilità di accedere ai dati in modo tradizionale: non c&#x27;è una directory con i dati organizzati in modo gerarchico.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bucket&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#bucket&quot; aria-label=&quot;Anchor link for: bucket&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Bucket&lt;&#x2F;h2&gt;
&lt;p&gt;Un bucket è un container per gli oggetti archiviati in S3, si possono avere più bucket con uno stesso account, può essere utile per separare ambiti diversi e anche per creare chiavi di accesso seperate per ciascun bucket, cosi da segregare le applicazioni.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;1655781747.png&quot; alt=&quot;S3 bucket&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;provider-suggeriti&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#provider-suggeriti&quot; aria-label=&quot;Anchor link for: provider-suggeriti&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Provider suggeriti&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.backblaze.com&quot;&gt;Backblaze&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.idrive.com&#x2F;s3-storage-e2&quot;&gt;IDrive e2&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;wasabi.com&quot;&gt;Wasabi&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;s3&quot;&gt;Amazon AWS&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;software-server&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#software-server&quot; aria-label=&quot;Anchor link for: software-server&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Software server&lt;&#x2F;h2&gt;
&lt;p&gt;Se vogliamo self-hostare il servizio esistono dei software tramite i quali noi stessi possiamo diventare fornitori del servizio.
È consigliabile avere più vps, magari di provider diversi, che formino un cluster, in modo da garantire la disponibilità del dato anche nel caso di un crash singolo.
Alcuni di questi software sono:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;min.io&quot;&gt;minio&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;garagehq.deuxfleurs.fr&quot;&gt;garage&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;pipilavvy&#x2F;seeweedfs-wiki&quot;&gt;seeweedFS&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;backup&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#backup&quot; aria-label=&quot;Anchor link for: backup&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Backup&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;software-client-backup&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#software-client-backup&quot; aria-label=&quot;Anchor link for: software-client-backup&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Software client backup&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;duplicati.com&quot;&gt;duplicati&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;duplicity.gitlab.io&quot;&gt;duplicity&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.iperiusbackup.com&quot;&gt;iperious backup&lt;&#x2F;a&gt; (commerciale)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;rclone.org&quot;&gt;rclone&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;rclone&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#rclone&quot; aria-label=&quot;Anchor link for: rclone&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
rclone&lt;&#x2F;h3&gt;
&lt;p&gt;E&#x27;un software da riga di comando che è in grado di gestire files che si trova su cloud storage, tra questi quelli di tipo s3.
Detto in parole povere, è #rsync con supporto #s3.
Quindi possiamo usarlo per spostare i dati da un bucket ad un altro, sincronizzare due bucket, ecc ecc.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;vendor-backup&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#vendor-backup&quot; aria-label=&quot;Anchor link for: vendor-backup&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Vendor backup&lt;&#x2F;h3&gt;
&lt;p&gt;Alcuni fornitori offrono un proprio servizio di backup (e ripristino) dei dati, in questo caso bisogna fidarsi del fornitore scelto.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Writefreely: il blog della semplicità</title>
          <pubDate>Sun, 15 Sep 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/writefreely-il-blog-della-semplicita/</link>
          <guid>https://www.agostinelli.eu/blog/writefreely-il-blog-della-semplicita/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/writefreely-il-blog-della-semplicita/">&lt;p&gt;Questo #blog è realizzato con il software #writefreely, la più semplice piattaforma per scrivere contenuti permanenti sul web.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;writefreely_logo.png&quot; alt=&quot;Writefreely Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;caratteristiche&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#caratteristiche&quot; aria-label=&quot;Anchor link for: caratteristiche&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Caratteristiche&lt;&#x2F;h2&gt;
&lt;p&gt;Si tratta di un software minimalista con cui creare un Blog, o anche un&#x27;intera comunità di più blog.&lt;&#x2F;p&gt;
&lt;p&gt;Tra le funzionalità, abbiamo l&#x27;&lt;strong&gt;autosaving&lt;&#x2F;strong&gt;, un editor lineare, senza distrazioni, con il supporto di #markup language.
Quella che può sembrare una limitazione, invece è un vantaggio: ci si concentra sul contenuto, e non sull&#x27;apparenza.&lt;&#x2F;p&gt;
&lt;p&gt;Ci sono sia il supporto per il feed rss che la federazione con il #fediverso.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;writefreely_updates.png&quot; alt=&quot;Rss Fediverso&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;federazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#federazione&quot; aria-label=&quot;Anchor link for: federazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Federazione&lt;&#x2F;h2&gt;
&lt;p&gt;I vostri post saranno federati con il fediverso, per cui, ad esempio, chiunque abbiamo un account su #mastodon potrà seguire il vostro blog.
Se non sapete cos&#x27;è il #fediverso, potete approfondire qui: https:&#x2F;&#x2F;fediverso.it&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installazione-e-configurazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#installazione-e-configurazione&quot; aria-label=&quot;Anchor link for: installazione-e-configurazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Installazione e configurazione&lt;&#x2F;h2&gt;
&lt;p&gt;Software leggerissimo, occupa pochissime risorse ed è un solo semplice eseguibile, con l&#x27;unico requisito di un database #mysql, che \e dove saranno salvati i contenuti.&lt;&#x2F;p&gt;
&lt;p&gt;Se volete cimentarvi nell&#x27;installazione e configurazione, seguita la guida ufficiale, davvero molto semplice, ma esaustiva:
https:&#x2F;&#x2F;writefreely.org&#x2F;start&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gestione-immagini&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#gestione-immagini&quot; aria-label=&quot;Anchor link for: gestione-immagini&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Gestione Immagini&lt;&#x2F;h2&gt;
&lt;p&gt;Dopo averlo provato, l&#x27;unica cose di cui sentivo la mancanza era una gestione delle #immagini, ma ho risolto in maniera molto semplice e utile, vi lascio all&#x27;articolo che avevo scritto a tal proposito (basterà cliccare sul tag #immagini).&lt;&#x2F;p&gt;
&lt;p&gt;##Personalizzazione
E&#x27; possibile configurarlo per gestire più blog o uno soltanto (il sito sui cui vi trovato è in modalità mono).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;writefreely_publicity.png&quot; alt=&quot;Pubblicazione post&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ciascun blog, può essere configurato i 3 modalità:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pubblico&lt;&#x2F;strong&gt;: tutti leggono i vostri articoli.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Privato&lt;&#x2F;strong&gt;: accessibile solo agli utenti registrati&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Protetto da password&lt;&#x2F;strong&gt;: unica per tutti per poter leggere&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Riguardo al punto 1, starà poi a voi decidere se renderlo &lt;strong&gt;indicizzabile dai motori di ricerca&lt;&#x2F;strong&gt; oppure no, semplicemente configurando il file #robots.txt&lt;&#x2F;p&gt;
&lt;p&gt;Esistono 3 &lt;strong&gt;modalità di visualizzazione&lt;&#x2F;strong&gt; dei post:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Blog&lt;&#x2F;strong&gt;: vengono mostrate le data degli articoli che saranno visualizzati dal più recente.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Novel&lt;&#x2F;strong&gt;: nessuna data degli articoli, ordinamento dal primo post in poi&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Notebook&lt;&#x2F;strong&gt;: nessuna data degli articoli, ordinamento dal post più recente.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;writefreely_display_post.png&quot; alt=&quot;Display post&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Infine è disponibile un campo per la firma da personalizzare, questo &lt;em&gt;&quot;pezzetto&quot;&lt;&#x2F;em&gt; di testo, o codice, sarà presente in calce a tutti gli articoli.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;css&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#css&quot; aria-label=&quot;Anchor link for: css&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Css&lt;&#x2F;h3&gt;
&lt;p&gt;Le uniche &lt;strong&gt;personalizzazioni grafiche&lt;&#x2F;strong&gt; realizzabili sono tramite il #css, è possibile trovare in rete dei temi giù pronti da cui partire, tramite i quali personalizzare colori, stili, dimensioni e distanze della pagina, in pieno spirito minimalista.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusioni&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#conclusioni&quot; aria-label=&quot;Anchor link for: conclusioni&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Conclusioni&lt;&#x2F;h2&gt;
&lt;p&gt;Personalmente trovo sia davvero piacevole aprire la schermata di nuovo articolo e trovare un schermo pulito, vuoto, in cui concentrarsi sulla scrittura e quindi sul contenuto, &lt;em&gt;less is more&lt;&#x2F;em&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;Ho scelto questo software perché non avevo bisogno di fare chissà quale cose strabilianti, ma appunto la necessità era quella di scrivere qualcosa utile per gli altri, ma anche per me (scrivere mi rilassa).&lt;&#x2F;p&gt;
&lt;p&gt;Costa aspettate a provarlo? Per chi non si vuol sbattere (o non ha dove farlo) nell&#x27;installazione, consiglio questo sito dove potete aprire il vostro blog writefreely: https:&#x2F;&#x2F;noblogo.org&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Condivisione file</title>
          <pubDate>Tue, 14 May 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/condivisione-file/</link>
          <guid>https://www.agostinelli.eu/blog/condivisione-file/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/condivisione-file/">&lt;h2 id=&quot;introduzione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#introduzione&quot; aria-label=&quot;Anchor link for: introduzione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Introduzione&lt;&#x2F;h2&gt;
&lt;p&gt;Scambiare file tra dispositivi diversi (o persone diverse), si dà per scontato che sia sempre facile, veloce e alla portata di tutti, ma quasi mai è così!
Nel 2024.ha senso fare un&#x27;articolo sull&#x27;argomento? Decisamente sì!
Di soluzioni ce ne sono moltissime, ma qui ne vedremo solo 3, che poi sono quelle che uso io, con le quali riesco a coprire tutte le esigenze che ho mai avuto.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pairdrop&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#pairdrop&quot; aria-label=&quot;Anchor link for: pairdrop&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Pairdrop&lt;&#x2F;h2&gt;
&lt;p&gt;Ispirato all&#x27;app AirDrop di Apple, questo software offre un servizio semplice, ma allo stesso geniale!
Non serve installare alcuna app sul dispositivo, basta un browser!
Funziona con tutti i dispositivi e sistemi operativi.
E&#x27; possibile associare i dispositivi in modo permanente e creare delle stanze in cui scambiare i file.
Lo scambio dei file avviene in maniera sicura, il server viene usato solo per mettere in comunicazione i dispositivi, nessun file verrà depositato, anche temporaneamente, sul server.&lt;&#x2F;p&gt;
&lt;p&gt;Vi  lascio un&#x27;istanza se volete provarlo:
https:&#x2F;&#x2F;pairdrop.devol.it&#x2F;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;pairdrop.png&quot; alt=&quot;Pairdrop&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nextcloud&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#nextcloud&quot; aria-label=&quot;Anchor link for: nextcloud&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Nextcloud&lt;&#x2F;h2&gt;
&lt;p&gt;Funziona in modo asincrono, cioè i due dispositivi non devono essere usati (e disponibili) contemporaneamente. Consente varie opzioni di condivisione, come ad esempio la possibilità di avere una cartella condivisa permanente e aggiornata in tempo reale (gli utenti devono avere account sul sistema (o federati).
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;Nextcloud_Logo.svg.png&quot; alt=&quot;Nextcloud Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ho parlato su questo blog di #nextcloud con un articolo dedicato, clicca sul nome se vuoi approfondire.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bitwarden-vaultwarden&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#bitwarden-vaultwarden&quot; aria-label=&quot;Anchor link for: bitwarden-vaultwarden&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Bitwarden (Vaultwarden)&lt;&#x2F;h2&gt;
&lt;p&gt;Il famoso password manager Bitwarden (e la sua controparte open Vaultwarden) oltre che per gestire le nostre password, può essere usato anche per inviare file e testi, e non si tratta di una funzione di ripiego, ma è molto bene implementata!
Abbiamo la possibilità di proteggere il file con una password, impostare la scadenza del link e addirittura può la modalità usa e getta (il file si autodistrugge dopo lo scaricamento) !
Se volete un&#x27;istanza da usare liberamente vi suggerisco questa:  https:&#x2F;&#x2F;vaultwarden.devol.it
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;bitwarden_send.png&quot; alt=&quot;Bitwarden send&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;E voi cosa usate?&lt;&#x2F;p&gt;
&lt;p&gt;#sharing #filesharing #pairdrop #airdrop #bitwarden #vaultwarden&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Retropie</title>
          <pubDate>Fri, 03 May 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/retropie/</link>
          <guid>https://www.agostinelli.eu/blog/retropie/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/retropie/">&lt;p&gt;RetroPie è un software gratuito che è possibile installare su Raspberry Pi, Odroid e sistemi x86 e permette di emulare i videogiochi del passato!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;RetroPie-Logo.svg.png&quot; alt=&quot;Retropie logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Si basa su retroarch, che è un frontend per vari emulatori, uno dei suoi punti di forza è la possibilità di avere una configurazione unificata per tutte le piattaforme.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;RetroArch&#x2F;Libretro&lt;&#x2F;em&gt; è un progetto di frontend e backend che si propone di creare un proprio ecosistema software che giri come codice dinamico.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;1004000479.png&quot; alt=&quot;cadillac&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;1889398773.jpg&quot; alt=&quot;mortal kombat&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;360801805.jpg&quot; alt=&quot;street fighter&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;guida-brevissima&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#guida-brevissima&quot; aria-label=&quot;Anchor link for: guida-brevissima&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Guida brevissima&lt;&#x2F;h2&gt;
&lt;p&gt;Perché una guida brevissima? Il web è pieno di guide per installare retropie, non ha senso scriverne un&#x27;altra, quindi, fate una ricerca: &lt;a href=&quot;https:&#x2F;&#x2F;librey.devol.it&#x2F;search.php?q=installare+retropie&amp;amp;p=0&amp;amp;t=0&quot;&gt;installare retropie&lt;&#x2F;a&gt;.
In breve: si scarica immagine della scheda SE, con un software come balena etcher (o dd) la si scrive sulla scheda, si copiano i giochi in nostro possesso, e, infine, si inserisce e via!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;come-si-gioca&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-si-gioca&quot; aria-label=&quot;Anchor link for: come-si-gioca&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come si gioca&lt;&#x2F;h2&gt;
&lt;p&gt;E&#x27; possibile collegare joypad usb o bluetooth, o usare una tastiera (magari meccanica) per navigare tra i menù e giocare.
Date un&#x27;occhiata ai joypad della &lt;a href=&quot;https:&#x2F;&#x2F;www.8bitdo.com&quot;&gt;8bitdo&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Essendo un sistema estremamente portatile, è l&#x27;ideale da portare ad una cena tra amici e trascorrere la serata a ricordare i giochi che hanno caratterizzato la nostra adolescenza! Sarà sufficiente trovare un tv dotato di porta HDMI, una presa di alimentazione e il divertimento è assicurato.&lt;&#x2F;p&gt;
&lt;p&gt;Se emulate giochi &lt;em&gt;&quot;pesanti&quot;&lt;&#x2F;em&gt; potrebbe essere necessario montare una ventola e dei buoi dissipatori sul vostro raspberry.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;raspberry-pi-retropie.jpg&quot; alt=&quot;Raspberry e Retropie&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;configurazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazione&quot; aria-label=&quot;Anchor link for: configurazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazione&lt;&#x2F;h2&gt;
&lt;p&gt;Le personalizzazioni alla configurazione e il caricamento di nuovi file può essere effettuato in due modi:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Collegando direttamente la scheda sd ad un altro computer&lt;&#x2F;li&gt;
&lt;li&gt;Configurare il sistema per collegarsi alla rete (wifi, ethernet), in modo da poter accedere alle cartelle condivise (già configurate di default).&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Il secondo metodo è molto utile anche per applicare aggiornamenti o per fare lo &lt;em&gt;scraping&lt;&#x2F;em&gt; delle copertine.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;emulationstation&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#emulationstation&quot; aria-label=&quot;Anchor link for: emulationstation&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
EmulationStation&lt;&#x2F;h3&gt;
&lt;p&gt;Si tratta del frontend (menù) che ci accoglie dopo aver acceso il sistema. Da qui si fanno partire i vari giochi (e programmi), è altamente personalizzabile, sia come temi che come immagini.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;retroarch&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#retroarch&quot; aria-label=&quot;Anchor link for: retroarch&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Retroarch&lt;&#x2F;h3&gt;
&lt;p&gt;Trattandosi di un unico frontend per i vari emulatori, è possibile accedere al menu e cambiare le configurazioni (es mappatura tasti) per il singolo gioco o come globali e quindi per tutti i giochi che andremo a provare successivamente&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;retroarch_logo.png&quot; alt=&quot;Retroarch&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sistemi-emulati&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#sistemi-emulati&quot; aria-label=&quot;Anchor link for: sistemi-emulati&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Sistemi emulati&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;3do&lt;&#x2F;li&gt;
&lt;li&gt;Amiga&lt;&#x2F;li&gt;
&lt;li&gt;Amstrad CPC&lt;&#x2F;li&gt;
&lt;li&gt;Apple II&lt;&#x2F;li&gt;
&lt;li&gt;Atari 2600&lt;&#x2F;li&gt;
&lt;li&gt;Atari 5200&lt;&#x2F;li&gt;
&lt;li&gt;Arari 7800&lt;&#x2F;li&gt;
&lt;li&gt;Atari Jaguar&lt;&#x2F;li&gt;
&lt;li&gt;Atari Lynx&lt;&#x2F;li&gt;
&lt;li&gt;Atari ST, STE, TT, Falcon&lt;&#x2F;li&gt;
&lt;li&gt;Coco&lt;&#x2F;li&gt;
&lt;li&gt;Colevovision&lt;&#x2F;li&gt;
&lt;li&gt;Commodore 64, Vic-20&lt;&#x2F;li&gt;
&lt;li&gt;Daphne&lt;&#x2F;li&gt;
&lt;li&gt;Dragon 32&lt;&#x2F;li&gt;
&lt;li&gt;Dreamcast&lt;&#x2F;li&gt;
&lt;li&gt;FinalBurn Neo&lt;&#x2F;li&gt;
&lt;li&gt;Famicon Disk System&lt;&#x2F;li&gt;
&lt;li&gt;GameCube&lt;&#x2F;li&gt;
&lt;li&gt;Game &amp;amp; Watch&lt;&#x2F;li&gt;
&lt;li&gt;Game Gear&lt;&#x2F;li&gt;
&lt;li&gt;Game Boy&lt;&#x2F;li&gt;
&lt;li&gt;Game Boy Color&lt;&#x2F;li&gt;
&lt;li&gt;Game Boy Advance&lt;&#x2F;li&gt;
&lt;li&gt;Intellivision&lt;&#x2F;li&gt;
&lt;li&gt;Macintosh&lt;&#x2F;li&gt;
&lt;li&gt;MAME&lt;&#x2F;li&gt;
&lt;li&gt;Master System&lt;&#x2F;li&gt;
&lt;li&gt;Mega-Cd&#x2F;Sega Cd&lt;&#x2F;li&gt;
&lt;li&gt;Megadrive &#x2F; Genesis&lt;&#x2F;li&gt;
&lt;li&gt;MESS&lt;&#x2F;li&gt;
&lt;li&gt;MSX&lt;&#x2F;li&gt;
&lt;li&gt;Neo Geo&lt;&#x2F;li&gt;
&lt;li&gt;Neo Geo Pocket&lt;&#x2F;li&gt;
&lt;li&gt;Neo Geo Pocket Color&lt;&#x2F;li&gt;
&lt;li&gt;Nintendo 64&lt;&#x2F;li&gt;
&lt;li&gt;Nintendo DS&lt;&#x2F;li&gt;
&lt;li&gt;Nintendo Entertainment System&lt;&#x2F;li&gt;
&lt;li&gt;Oriuc&#x2F;Armos&lt;&#x2F;li&gt;
&lt;li&gt;PC&lt;&#x2F;li&gt;
&lt;li&gt;PC-8800&lt;&#x2F;li&gt;
&lt;li&gt;PC-9800&lt;&#x2F;li&gt;
&lt;li&gt;PC Engine&lt;&#x2F;li&gt;
&lt;li&gt;PC Engine 2&lt;&#x2F;li&gt;
&lt;li&gt;Playstation 1&lt;&#x2F;li&gt;
&lt;li&gt;Playstation 2&lt;&#x2F;li&gt;
&lt;li&gt;Pokemon Mini&lt;&#x2F;li&gt;
&lt;li&gt;PSP&lt;&#x2F;li&gt;
&lt;li&gt;ResidualVM&lt;&#x2F;li&gt;
&lt;li&gt;SAM Coupé&lt;&#x2F;li&gt;
&lt;li&gt;Saturn&lt;&#x2F;li&gt;
&lt;li&gt;ScummVM&lt;&#x2F;li&gt;
&lt;li&gt;Sega 32x&lt;&#x2F;li&gt;
&lt;li&gt;Sega SG-1000&lt;&#x2F;li&gt;
&lt;li&gt;Sharp X1&lt;&#x2F;li&gt;
&lt;li&gt;Sharp X68000&lt;&#x2F;li&gt;
&lt;li&gt;Super Nintendo Entertainment System&lt;&#x2F;li&gt;
&lt;li&gt;TI-99&lt;&#x2F;li&gt;
&lt;li&gt;TRS-80&lt;&#x2F;li&gt;
&lt;li&gt;Vectrex&lt;&#x2F;li&gt;
&lt;li&gt;Videopac&lt;&#x2F;li&gt;
&lt;li&gt;Virtual Boy&lt;&#x2F;li&gt;
&lt;li&gt;Wii&lt;&#x2F;li&gt;
&lt;li&gt;WonderSwan&lt;&#x2F;li&gt;
&lt;li&gt;WonderSwan Color&lt;&#x2F;li&gt;
&lt;li&gt;ZX-81&lt;&#x2F;li&gt;
&lt;li&gt;ZX Spectrum&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;rom-e-licenze-disclaimer&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#rom-e-licenze-disclaimer&quot; aria-label=&quot;Anchor link for: rom-e-licenze-disclaimer&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Rom e licenze (disclaimer)&lt;&#x2F;h2&gt;
&lt;p&gt;Attenzione al fatto che molte delle rom anche ancora il copyright in vigore, per cui è necessario possedere una copia acquistata dei giochi che andrete a caricare sul vostro sistema.
Usare copie pirata dei giochi è un reato&lt;&#x2F;p&gt;
&lt;h2 id=&quot;approfondimenti&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#approfondimenti&quot; aria-label=&quot;Anchor link for: approfondimenti&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Approfondimenti&lt;&#x2F;h2&gt;
&lt;p&gt;Se ne volete sapere ancora di più vi lascio qualche sito:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;retropie.org.uk (sito ufficiale)&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;www.retropie.it (sito italiano non ufficiale)&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;t.me&#x2F;retropie_it (gruppo telegram in italiano)&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;mastodon.uno&#x2F;tags&#x2F;retropie (mastodon)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;per-veri-nerd&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#per-veri-nerd&quot; aria-label=&quot;Anchor link for: per-veri-nerd&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Per veri nerd&lt;&#x2F;h2&gt;
&lt;p&gt;Se ho incuriosito, lo avete provato, vi siete divertiti il passo successivo è quello di costruire un cabinet personalizzato!&lt;&#x2F;p&gt;
&lt;p&gt;Vi lascio a qualche immagine presa in giro sul web, giusto per farvi un&#x27;idea.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;5li7ikzmf1w11.jpg&quot; alt=&quot;cabinet1&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;pi-inside.jpg&quot; alt=&quot;cabinet2&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;Final.jpg&quot; alt=&quot;cabinet3&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;maxresdefault.jpg&quot; alt=&quot;cabinet4&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nes-case&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#nes-case&quot; aria-label=&quot;Anchor link for: nes-case&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Nes Case&lt;&#x2F;h3&gt;
&lt;p&gt;Io ho questo come case per il raspberry che uso con retropie. Il disco ssd si trova in quella che era la cartuccia del videogioco!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nespi4_case.jpg&quot; alt=&quot;nespi4&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nespi4_case_2.webp&quot; alt=&quot;nespi42&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Nextcloud</title>
          <pubDate>Fri, 23 Feb 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/nextcloud/</link>
          <guid>https://www.agostinelli.eu/blog/nextcloud/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/nextcloud/">&lt;p&gt;&lt;em&gt;Nota Introduttiva: questo articolo sarà solo un&#x27;introduzione, seguiranno approfondimenti sui singoli componenti.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cos-e-nextcloud&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cos-e-nextcloud&quot; aria-label=&quot;Anchor link for: cos-e-nextcloud&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cos&#x27;è nextcloud&lt;&#x2F;h2&gt;
&lt;p&gt;Software open source che permette di realizzare  un servizio Cloud personale per i propri dati.  Ambiente collaborativo e può anche essere federato con altre installazioni.
È possibile installarlo su un proprio dispositivo o usare quello messo a disposizione da alcune aziende o associazioni.
L&#x27;architettura è modulare, questo ci permette di attivare solo le funzionalità che ci servono e se ne possono aggiungere di nuove (via via che gli sviluppatori le rilasciano). C&#x27;è un plugin per ogni esigenza!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;Nextcloud_Logo.svg.png&quot; alt=&quot;Nextcloud Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;caratteristiche&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#caratteristiche&quot; aria-label=&quot;Anchor link for: caratteristiche&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Caratteristiche&lt;&#x2F;h2&gt;
&lt;p&gt;Il suo punto di forza è la &lt;strong&gt;condivisione&lt;&#x2F;strong&gt; e la &lt;strong&gt;sincronizzazione&lt;&#x2F;strong&gt; dei file, che può avvenire tramite semplice browser web o utilizzando l&#x27;applicazione disponibile per tutti i sistemi operativi. Possiamo considerarlo un&#x27;alternativa a Dropbox, Google drive o onedrive.
Ci sono anche numerosi &lt;strong&gt;servizi aggiuntivi&lt;&#x2F;strong&gt;, che coprono diverse esigenze, come ad esenpio:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;calendario&lt;&#x2F;li&gt;
&lt;li&gt;contatti&lt;&#x2F;li&gt;
&lt;li&gt;webmail&lt;&#x2F;li&gt;
&lt;li&gt;attività (task)&lt;&#x2F;li&gt;
&lt;li&gt;note (markup language)&lt;&#x2F;li&gt;
&lt;li&gt;chat interna&lt;&#x2F;li&gt;
&lt;li&gt;suite per l&#x27;ufficio (via web, basata su libreoffice)&lt;&#x2F;li&gt;
&lt;li&gt;galleria immagini&lt;&#x2F;li&gt;
&lt;li&gt;ebook reader&lt;&#x2F;li&gt;
&lt;li&gt;password manager&lt;&#x2F;li&gt;
&lt;li&gt;gestione bookmark (con possibilità di sync con plugin per il browser)&lt;&#x2F;li&gt;
&lt;li&gt;podcast&lt;&#x2F;li&gt;
&lt;li&gt;libro di ricette&lt;&#x2F;li&gt;
&lt;li&gt;ricerca&lt;&#x2F;li&gt;
&lt;li&gt;forms&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Questi servizi possono essere usati via web, o con i vari client, con il vantaggio di avere tutto &lt;strong&gt;sincronizzato tra più dispositivi&lt;&#x2F;strong&gt;.
Nextcloud diventa così il proprio hub personale dove ci sono tutti i propri dati e le proprie attività.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_dashboard.png&quot; alt=&quot;Nextcloud Dashboard&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vantaggi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#vantaggi&quot; aria-label=&quot;Anchor link for: vantaggi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Vantaggi&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;self hosting: possiamo installarlo su un nostro pc o su una #vps in modo che i &lt;strong&gt;nostri dati&lt;&#x2F;strong&gt; siano sempre sotto il nostro controllo.&lt;&#x2F;li&gt;
&lt;li&gt;nel caso si voglia affidarsi al lavoro di altri, possiamo scegliere il provider che vogliamo e cambiarlo in qualsiasi momento (esportando i dati)&lt;&#x2F;li&gt;
&lt;li&gt;tra utenti dello stesso server (o federati) è possibile collaborare&lt;&#x2F;li&gt;
&lt;li&gt;condivisione di file (e immagini) avendo sempre tutto sotto controllo, vedi paragrafo dedicato sotto.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;ricerca globale&lt;&#x2F;strong&gt;: usando la casella di ricerca, questa verrà effettuata ovunque: file, note, contatti, calendario, ecc. ecc.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_passwordmanager.webp&quot; alt=&quot;Nextcloud Dashboard&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;backup&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#backup&quot; aria-label=&quot;Anchor link for: backup&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Backup&lt;&#x2F;h2&gt;
&lt;p&gt;Come abbiamo visto nextcloud è la nostra casa personale di tutti i dati e attività, diventa quindi fondentale prevedere un sistema di backup affidabile, a cui far ricorso in caso di problemi.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cosa-salvare&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cosa-salvare&quot; aria-label=&quot;Anchor link for: cosa-salvare&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cosa salvare&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;Database: dipende da quello che avete scelto, ma solitamente si tratta di &lt;em&gt;Mysql&lt;&#x2F;em&gt; (o &lt;em&gt;MariaDB&lt;&#x2F;em&gt;). Le procedure di salvataggio sono quelle consuete (&lt;em&gt;mysqldump&lt;&#x2F;em&gt;), che potete trovare in rete o in questo blog (in futuro).&lt;&#x2F;li&gt;
&lt;li&gt;File: salvataggio della directory nextcloud ospitata dal webserver, che contiene sia il software che i nostri dati&lt;&#x2F;li&gt;
&lt;li&gt;Se non siamo gli unici utilizzatori dell&#x27;istanza, è consigliabile impostare l&#x27;istanza in &lt;strong&gt;modalità manutenzione&lt;&#x2F;strong&gt; durante le operazioni di salvataggio, in modo da avere la consistenza dei dati.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Vi consiglio di usare un sistema come #borg, il quale può essere usato in modalità &lt;strong&gt;incrementale&lt;&#x2F;strong&gt; così vi garantisce di poter recuperare sempre una certa versione dei vostri documenti e ha il vantaggio che, dopo la prima esecuzione, i backup successivi trasferiranno solo le nuove modifiche sul backup, saranno così molto veloci e occuperanno solo lo spazio strettamente necessario!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;condivisione-di-file&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#condivisione-di-file&quot; aria-label=&quot;Anchor link for: condivisione-di-file&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Condivisione di file&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;cartelle (e file) in sola lettura per utenti anonimi anche protetti da password&lt;&#x2F;li&gt;
&lt;li&gt;possibilità di poter ricevere file da altri (upload)&lt;&#x2F;li&gt;
&lt;li&gt;galleria foto&lt;&#x2F;li&gt;
&lt;li&gt;cartelle collaborative con altri utenti del server (o istanze federate)&lt;&#x2F;li&gt;
&lt;li&gt;supporto nativo a #webdav&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;applicazione desktop&lt;&#x2F;strong&gt; per sincronizzazione automatica dei file.&lt;&#x2F;li&gt;
&lt;li&gt;supporto al versionamento&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;calendario-e-contatti&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#calendario-e-contatti&quot; aria-label=&quot;Anchor link for: calendario-e-contatti&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Calendario e contatti&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;configurando un app come #davx5 vi permette di sincronizzare contatti e calendario del vostro smartphone&lt;&#x2F;li&gt;
&lt;li&gt;È possibile sincronizzare anche i client desktop, sfruttando i protocolli standard #caldav e #carddav&lt;&#x2F;li&gt;
&lt;li&gt;import e export da e verso altri sistemi&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;app-mobile&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#app-mobile&quot; aria-label=&quot;Anchor link for: app-mobile&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
App mobile&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;accesso a tutti i propri file in mobilità&lt;&#x2F;li&gt;
&lt;li&gt;auto upload delle foto scattate&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;task&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#task&quot; aria-label=&quot;Anchor link for: task&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Task&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;gestione categorie&lt;&#x2F;li&gt;
&lt;li&gt;sotto task&lt;&#x2F;li&gt;
&lt;li&gt;date di inizio e scadenza&lt;&#x2F;li&gt;
&lt;li&gt;percentuale avanzamento&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;note&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#note&quot; aria-label=&quot;Anchor link for: note&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Note&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;accesso web&lt;&#x2F;li&gt;
&lt;li&gt;markup language&lt;&#x2F;li&gt;
&lt;li&gt;categorie&lt;&#x2F;li&gt;
&lt;li&gt;app mobile&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;nota-personale&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#nota-personale&quot; aria-label=&quot;Anchor link for: nota-personale&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Nota personale&lt;&#x2F;h3&gt;
&lt;p&gt;Io sto usando tantissimo le note, per segnarmi di tutto: appunti, comandi, persino le bozze che scrivo per il blog. Trovo che sia la vera killer application, ritrovo sempre tutto e l&#x27;impaginazione è semplice e funzionale.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_notes.png&quot; alt=&quot;Nextcloud Note&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_postit.jpeg&quot; alt=&quot;Nextcloud PostIt&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;suite-ufficio&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#suite-ufficio&quot; aria-label=&quot;Anchor link for: suite-ufficio&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Suite ufficio&lt;&#x2F;h2&gt;
&lt;p&gt;E&#x27; possibile &lt;strong&gt;editare i documenti&lt;&#x2F;strong&gt; office anche via interfaccia web:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Software basato sul diffuso libreoffice&lt;&#x2F;li&gt;
&lt;li&gt;Editing collaborativo real time (è necessario installare &lt;strong&gt;Collabora office&lt;&#x2F;strong&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;utenti-di-mastodon-uno&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#utenti-di-mastodon-uno&quot; aria-label=&quot;Anchor link for: utenti-di-mastodon-uno&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Utenti di mastodon.uno&lt;&#x2F;h2&gt;
&lt;p&gt;Se vi ho incuriosito e volete provare ad usarlo, vi segnalo che gli utenti di mastodon.uno posso richiedere un account da qui:
https:&#x2F;&#x2F;cloud.mastodon.uno&#x2F;apps&#x2F;forms&#x2F;s&#x2F;YSCoCC37D9omTN8iXSKkQqz9
(sul server sono già preinstallati diversi software aggiuntivi)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_photos.webp&quot; alt=&quot;Nextcloud Photos&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;nextcloud_cookbook.jpg&quot; alt=&quot;Nextcloud Cookbook&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Come bloccare la pubblicità sullo smartphone </title>
          <pubDate>Sat, 10 Feb 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/come-bloccare-la-pubblicita-sullo-smartphone/</link>
          <guid>https://www.agostinelli.eu/blog/come-bloccare-la-pubblicita-sullo-smartphone/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/come-bloccare-la-pubblicita-sullo-smartphone/">&lt;p&gt;&lt;strong&gt;Aggiornamento 14&#x2F;02&#x2F;2024&lt;&#x2F;strong&gt;: aggiungo in fondo all&#x27;articolo le modifiche necessarie per la parte server.&lt;&#x2F;p&gt;
&lt;p&gt;Questo metodo lo utilizzo ormai da svariati mesi e &lt;strong&gt;funziona benissimo&lt;&#x2F;strong&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;Premetto subito che non è una semplice soluzione adatta per tutti, poiché richiede un server #wireguard e un&#x27;installazione di #pihole.
Però se avete un amico che ha già configurato tutto per se, sarà molto semplice farlo usare anche a voi! E&#x27; complessa la configurazione server, mentre la &lt;strong&gt;parte client è semplicissima&lt;&#x2F;strong&gt;: scaricare un&#x27;app e scansionare un qr code.&lt;&#x2F;p&gt;
&lt;p&gt;Abbiamo visto la configurazione di entrambi su questo blog (cliccate sui due hashtag per le leggere le guide).&lt;&#x2F;p&gt;
&lt;p&gt;Con questo metodo non solo bloccherete le pubblicità invasive sul browser, ma &lt;strong&gt;su tutte le app&lt;&#x2F;strong&gt;!
Inoltre oltre al blocco pubblicità avrete anche il &lt;strong&gt;blocco dei siti malevoli&lt;&#x2F;strong&gt; (in base alle liste che avete deciso di aggiungere a pihole).&lt;&#x2F;p&gt;
&lt;p&gt;Il trucco è usare la vpn per fare in modo che lo smartphone navighi nello stessa modalità che avviene da casa, cioè protetto da pihole!&lt;&#x2F;p&gt;
&lt;p&gt;Abbiamo due diverse modalità di uso per la vpn:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;usarla solo per la risoluzione dns&lt;&#x2F;li&gt;
&lt;li&gt;usarla per tutto il traffico&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;L&#x27;una non esclude l&#x27;altra, cioè possiamo fare due profili diversi e passare da uno all&#x27;altro in base alle necessità (ad esempio se ci connettiamo un WiFi pubblico non protetto, conviene usare la seconda opzione).
La prima soluzione ha il vantaggio di consumare pochissima banda per il server, solo lo stretto necessario per le risoluzioni dns.&lt;&#x2F;p&gt;
&lt;p&gt;Esempio di configurazione solo dns:&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Interface]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PrivateKey = chiave_priv_client1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Address = 192.168.20.2&#x2F;24
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Dns = ip_vpn_privato_server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Peer]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PublicKey = chiave_pub_server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PresharedKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;AllowedIPs = ip_vpn_privato_server&#x2F;32
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Endpoint = hostname_pubblico_server:porta
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Esempio di configurazione traffico completo:&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Interface]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PrivateKey = chiave_priv_client1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Address = 192.168.20.2&#x2F;24
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Dns = ip_vpn_privato_server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Peer]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PublicKey = chiave_pub_server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PresharedKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;AllowedIPs  = 0.0.0.0&#x2F;0, ::&#x2F;0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Endpoint = hostname_pubblico_server:porta
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Vi consiglio di usare questo client per wireguard &lt;strong&gt;wg-tunnel&lt;&#x2F;strong&gt;, perché ha una funzionalità fondamentale per il nostro scopo: è in grado di &lt;strong&gt;attivare automaticamente la vpn&lt;&#x2F;strong&gt; quando ci disconnettiamo dalla nostra wifi (è possibile scegliere più reti fidate).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;wg-tunnel_logo.png&quot; alt=&quot;Wg tunnel Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;wg-tunnel_screen1.png&quot; alt=&quot;Wg tunnel Screen 1&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;wg-tunnel_screen2.png&quot; alt=&quot;Wg tunnel Screen 2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Non ho provato questa soluzione su iPhone, ma presumo che possa funzionare anche lì.&lt;&#x2F;p&gt;
&lt;p&gt;Infine vi consiglio anche un&#x27;ottimo client #android per gestire pihole: Pi-hole Droid.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aggiornamento-14-12-2024&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#aggiornamento-14-12-2024&quot; aria-label=&quot;Anchor link for: aggiornamento-14-12-2024&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Aggiornamento 14&#x2F;12&#x2F;2024&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;modifiche-configurazione-server&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#modifiche-configurazione-server&quot; aria-label=&quot;Anchor link for: modifiche-configurazione-server&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Modifiche configurazione server&lt;&#x2F;h3&gt;
&lt;p&gt;Affinchè il server sia in grado di ruotare i pacchetti ricevuti dalla VPN è necessaria qualche configurazione in più, dei comandi &lt;em&gt;&quot;standard&quot;&lt;&#x2F;em&gt; #iptables per gli addetti ai lavori.
(su iptables trovate  ampia documentazione on line)
Ma veniamo al dunque&lt;&#x2F;p&gt;
&lt;p&gt;Esempio di righe in aggiunta alla parte server:&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;...
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -A FORWARD -i %i -j ACCEPT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -A FORWARD -o %i -j ACCEPT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;# DNS - sostituire 192.168.1.x con ip del proprio pihole
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -I FORWARD -i %i -p udp -m udp -d 192.168.1.x&#x2F;32 --dport 53 -j ACCEPT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -I FORWARD -i %i -p tcp -m tcp -d 192.168.1.x&#x2F;32 --dport 53 -j ACCEPT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;# Blocco rete locale per tutti (nell&amp;#39;esempio è con subnet 192.168.1.0)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -I FORWARD -i %i -d 192.168.1.0&#x2F;24 -j REJECT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;# Apertura rete locale ad un singolo ip
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -I FORWARD -i %i -s 172.16.2.2&#x2F;32 -d 192.168.1.0&#x2F;24 -j ACCEPT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostDown = iptables -D FORWARD -i %i -j ACCEPT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostDown = iptables -D FORWARD -o %i -j ACCEPT
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;...
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
      </item>
      <item>
          <title>Spazzolini elettrici e domotica indipendente</title>
          <pubDate>Fri, 09 Feb 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/spazzolini-elettrici-e-domotica-indipendente/</link>
          <guid>https://www.agostinelli.eu/blog/spazzolini-elettrici-e-domotica-indipendente/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/spazzolini-elettrici-e-domotica-indipendente/">&lt;p&gt;Pare che la vicenda degli spazzolini elettrici WiFi usati per un &lt;strong&gt;attacco informatico&lt;&#x2F;strong&gt; non sia reale, ma piuttosto si tratta di uno scenario ipotetico.
(https:&#x2F;&#x2F;www.hwupgrade.it&#x2F;news&#x2F;sicurezza-software&#x2F;tre-milioni-di-spazzolini-elettrici-smart-utilizzati-come-rete-botnet-per-un-attacco-ddos_124149.html)&lt;&#x2F;p&gt;
&lt;p&gt;Certo non molto distante dalla realtà, visto che ormai tutti gli elettrodomestici hanno &lt;strong&gt;connettività WiFi&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;A mio avviso il problema è il &lt;strong&gt;come&lt;&#x2F;strong&gt; è stata implementata la connettività degli apparecchi. Infatti molti di questi richiedono obbligatoriamente una connessione internet funzionante.&lt;&#x2F;p&gt;
&lt;p&gt;A parte eventuali problematiche legate alla &lt;strong&gt;sicurezza&lt;&#x2F;strong&gt;, questo comporta anche una &lt;strong&gt;dipendenza&lt;&#x2F;strong&gt; dal sito del &lt;strong&gt;produttore&lt;&#x2F;strong&gt;.
Cioè se per qualsiasi motivo (economico e non) quest&#x27;ultimo decide di chiudere il servizio, il nostro apparecchio perderà queste funzionalità.&lt;&#x2F;p&gt;
&lt;p&gt;Facciamo un esempio concreto: in casa ho un impianto di #domotica personale con #homeassistant, ho anche l&#x27;impianto di condizionamento collegato in WiFi.
Dato che gli apparecchi hanno qualche anno, ho dovuto acquistare una scheda aggiuntiva (WiFi) da inserire al loro interno.
Dopo un po&#x27; di ricerche e approfondimenti, ho scoperto che ne esistevano due versioni, una più vecchia, ma che esponeva direttamente in rete locale delle #api, e una più moderna che funzionava solo se è attivo un collegamento internet (e il server del produttore è funzionante).
Ho faticato un po&#x27;, ma alla fine sono riuscito a trovare la prima versione della scheda presso un venditore on line, ne aveva ancora disponibili anche se ormai fuori produzione (per mia fortuna).
In questo modo riesco a comandarli (e interrogare lo stato) anche se la connessione internet di casa dovesse non funzionare o se il produttore decidesse di interrompere il servizio.&lt;&#x2F;p&gt;
&lt;p&gt;Concludendo, quando acquistate un apparecchio, nella scelta fate attenzione anche a questo aspetto!&lt;&#x2F;p&gt;
&lt;p&gt;#domotica #sicurezza #wifi #informatica #spazzolini&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Wireguard - VPN per tutti</title>
          <pubDate>Sun, 28 Jan 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/wireguard-vpn-per-tutti/</link>
          <guid>https://www.agostinelli.eu/blog/wireguard-vpn-per-tutti/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/wireguard-vpn-per-tutti/">&lt;h2 id=&quot;definizione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#definizione&quot; aria-label=&quot;Anchor link for: definizione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Definizione&lt;&#x2F;h2&gt;
&lt;p&gt;WireGuard è un programma &lt;strong&gt;open source&lt;&#x2F;strong&gt; che implementa una connessione &lt;strong&gt;VPN&lt;&#x2F;strong&gt; per creare connessioni sicure punto-punto&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;Logo_of_WireGuard.svg&quot; alt=&quot;Wireguard Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-cosa-serve&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#a-cosa-serve&quot; aria-label=&quot;Anchor link for: a-cosa-serve&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
A cosa serve?&lt;&#x2F;h2&gt;
&lt;p&gt;Sicuramente avrete già sentito parlare di vpn, qualora ne siate a digiuno provo a scriverlo brevemente. Attivando questa connessione tra due dispositivi, collegati entrambi alla rete internet, permette loro, in modo &lt;strong&gt;sixuro&lt;&#x2F;strong&gt;,  di comunicare tra di loro.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vantaggi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#vantaggi&quot; aria-label=&quot;Anchor link for: vantaggi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Vantaggi&lt;&#x2F;h2&gt;
&lt;p&gt;Wireguard si distingue da altri programmi simili per la sua leggerezza, occupa pochissime risorse, e per le prestazioni.
Se lo provate, con una buona connessione da ambo i lati, vi sembrerà davvero di essere in rete locale.
La connessione tra i due punti è cifrata e quindi sicura.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;perche-usarlo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche-usarlo&quot; aria-label=&quot;Anchor link for: perche-usarlo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché usarlo&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Collegarsi alla propria rete domestica da fuori casa (senza esporre pubblicamente i servizi, ma solo la porta della vpn)&lt;&#x2F;li&gt;
&lt;li&gt;Amministrare &#x2F; gestire dispositivi di: amici &#x2F; parenti &#x2F; clienti&lt;&#x2F;li&gt;
&lt;li&gt;Condividere risorse locali solo con chi si vuole&lt;&#x2F;li&gt;
&lt;li&gt;Anonimato (navigare sul web come se fisicamente si ci trovasse nella rete del server vpn)&lt;&#x2F;li&gt;
&lt;li&gt;Sicurezza: se si è connessi ad una rete pubblica il nostro traffico sarà comunque cifrato&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;blocco pubblicità su smartphone&lt;&#x2F;strong&gt; se usato in accoppiata a #pihole (seguirà articolo dedicato)&lt;&#x2F;li&gt;
&lt;li&gt;Supporto dello &lt;strong&gt;split tunnel&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;caratteristiche&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#caratteristiche&quot; aria-label=&quot;Anchor link for: caratteristiche&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Caratteristiche&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Si basa su protocollo udp, e non tcp per avere prestazioni migliori&lt;&#x2F;li&gt;
&lt;li&gt;Disponibile per svariati sistemi operativi&lt;&#x2F;li&gt;
&lt;li&gt;Funziona su tutti i dispositivi mobili&lt;&#x2F;li&gt;
&lt;li&gt;Risorse richieste quasi nulle, funziona benissimo su vecchi pc o su #raspberrypi&lt;&#x2F;li&gt;
&lt;li&gt;Configurazione facile con un &lt;strong&gt;file unico&lt;&#x2F;strong&gt; (portatile)&lt;&#x2F;li&gt;
&lt;li&gt;Configurazione tramite &lt;strong&gt;qr code&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Possibilità di avere più &lt;strong&gt;vpn attive contemporaneamente&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;wireguard-roadwarrior-splittunnel.png&quot; alt=&quot;Wireguard Connections&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;creare-una-nuova-connessione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#creare-una-nuova-connessione&quot; aria-label=&quot;Anchor link for: creare-una-nuova-connessione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Creare una nuova connessione&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Installare il software&lt;&#x2F;li&gt;
&lt;li&gt;Scgliere una porta udp dedicata&lt;&#x2F;li&gt;
&lt;li&gt;Abllitare il forwarding della porta sul nostro router&lt;&#x2F;li&gt;
&lt;li&gt;Scelta di una subnet (dedicata)&lt;&#x2F;li&gt;
&lt;li&gt;Abilitare il forwarding dei pacchetti ip&lt;&#x2F;li&gt;
&lt;li&gt;Creare la configurazione&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;configurazione-manuale-da-riga-di-comando&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazione-manuale-da-riga-di-comando&quot; aria-label=&quot;Anchor link for: configurazione-manuale-da-riga-di-comando&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazione manuale (da riga di comando)&lt;&#x2F;h3&gt;
&lt;p&gt;Di seguito vari comandi, divisi per argomento, che permettono di attivare la nostra prima vpn.
La preshared key &lt;strong&gt;non è obbligatoria&lt;&#x2F;strong&gt; ma se la si usa si renderà la connessione ancora piuù sicura.
Negli esempi sottostanti abbiamo scelto 92.168.20.0&#x2F;24 come subnet per la nostra vpn.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;installazione-debian&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#installazione-debian&quot; aria-label=&quot;Anchor link for: installazione-debian&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Installazione (debian)&lt;&#x2F;h4&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo apt update
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo apt install wireguard
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo vi &#x2F;etc&#x2F;sysctl.conf
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;	net.ipv4.ip_forward=1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo sysctl -p
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;generazione-chiavi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#generazione-chiavi&quot; aria-label=&quot;Anchor link for: generazione-chiavi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Generazione chiavi&lt;&#x2F;h3&gt;
&lt;p&gt;Le chiavi generate vanno sia per una configurazione come server che come client&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;umask 077
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;wg genkey &amp;gt; privatekey
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;wg pubkey &amp;lt; privatekey &amp;gt; publickey
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;wg genpsk &amp;gt; preshared.keys
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;esempio-di-file-conf-del-server&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#esempio-di-file-conf-del-server&quot; aria-label=&quot;Anchor link for: esempio-di-file-conf-del-server&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Esempio di file conf del server&lt;&#x2F;h4&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;&#x2F;etc&#x2F;wireguard&#x2F;wg0.conf
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Interface]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PrivateKey = chiave_privata_server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Address = 192.168.20.1&#x2F;24
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;ListenPort = 52001
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;SaveConfig = true
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Peer]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PublicKey = chiave_pub_client_1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PresharedKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;AllowedIPs = 192.168.20.2&#x2F;32
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;esempio-di-file-conf-del-client&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#esempio-di-file-conf-del-client&quot; aria-label=&quot;Anchor link for: esempio-di-file-conf-del-client&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Esempio di file conf del client&lt;&#x2F;h4&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Interface]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PrivateKey = chiave_priv_client1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Address = 192.168.20.2&#x2F;24
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;[Peer]
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PublicKey = chiave_pub_server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PresharedKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;AllowedIPs = 0.0.0.0&#x2F;0, ::&#x2F;0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Endpoint = hostname_pubblico_server:52001
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;comandi-per-la-connessione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#comandi-per-la-connessione&quot; aria-label=&quot;Anchor link for: comandi-per-la-connessione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Comandi per la connessione&lt;&#x2F;h4&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo wg-quick up wg1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo wg-quick down wg1
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo wh show
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;avvio-automatico-con-systemd&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#avvio-automatico-con-systemd&quot; aria-label=&quot;Anchor link for: avvio-automatico-con-systemd&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Avvio automatico con systemd&lt;&#x2F;h4&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo systemctl enable wg-quick@wg0.service
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo systemctl start wg-quick@wg0.service
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;sudo systemctl status wg-quick@wg0.service
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h4 id=&quot;generare-qr-code&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#generare-qr-code&quot; aria-label=&quot;Anchor link for: generare-qr-code&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Generare Qr code&lt;&#x2F;h4&gt;
&lt;p&gt;Installare il software qrencode&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;qrencode -t ansiutf8 &amp;lt; &#x2F;etc&#x2F;wireguard&#x2F;clients&#x2F;client1.conf
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;wireguard_show.jpg&quot; alt=&quot;Wireguard Command Line&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aggiunta-nuovi-client&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#aggiunta-nuovi-client&quot; aria-label=&quot;Anchor link for: aggiunta-nuovi-client&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Aggiunta nuovi client&lt;&#x2F;h2&gt;
&lt;p&gt;Per aggiungere un nuovo client, conviene spengere la vpn del server (wg down), aggiungere le nuove righe al file di configurazione, e riattivare la connessione (wg up)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;configurazione-guidata&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#configurazione-guidata&quot; aria-label=&quot;Anchor link for: configurazione-guidata&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Configurazione guidata&lt;&#x2F;h3&gt;
&lt;p&gt;Vedi i due frontend web  suggeriti sotto per la parte server.
Per la configurazione come client è sufficiente importare il file conf generato o in alternativa il qr code.
Per la connessione è sufficiente utilizzare un client;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Su linux è possibile usare li strumenti integrati nel desktop in uso attraverso NetworkManager (kde, gnome, ecc)&lt;&#x2F;li&gt;
&lt;li&gt;Su windows è sufficiente scaricare il client dal sito ufficiale (https:&#x2F;&#x2F;www.wireguard.com)&lt;&#x2F;li&gt;
&lt;li&gt;Android Play store: https:&#x2F;&#x2F;play.google.com&#x2F;store&#x2F;apps&#x2F;details?id=com.wireguard.android&lt;&#x2F;li&gt;
&lt;li&gt;Apple store: https:&#x2F;&#x2F;apps.apple.com&#x2F;it&#x2F;app&#x2F;wireguard&#x2F;id1441195209&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;programmi-accessori-frontend&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#programmi-accessori-frontend&quot; aria-label=&quot;Anchor link for: programmi-accessori-frontend&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Programmi accessori (frontend)&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;ngoduykhanh&#x2F;wireguard-ui&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;wg-easy&#x2F;wg-easy&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;subspacecloud&#x2F;subspace&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;www.wireguardconfig.com&#x2F;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;funzioni-avanzate&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#funzioni-avanzate&quot; aria-label=&quot;Anchor link for: funzioni-avanzate&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Funzioni avanzate&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;dns&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#dns&quot; aria-label=&quot;Anchor link for: dns&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Dns&lt;&#x2F;h3&gt;
&lt;p&gt;Nella configurazione del client è anche possibile indicare quale server dns utilizzare&lt;&#x2F;p&gt;
&lt;h3 id=&quot;firewall-per-i-client&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#firewall-per-i-client&quot; aria-label=&quot;Anchor link for: firewall-per-i-client&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Firewall per i client&lt;&#x2F;h3&gt;
&lt;p&gt;Nalle configurazione server è possibile aggiungere più righe di PostUp con &lt;strong&gt;iptables&lt;&#x2F;strong&gt;, e quindi configurare il firewall con assoluta personalizzazione: è possibile, quindi, limitare la risorse da accedere a specifici indirizzi&lt;&#x2F;p&gt;
&lt;h3 id=&quot;limitare-la-banda&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#limitare-la-banda&quot; aria-label=&quot;Anchor link for: limitare-la-banda&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Limitare la banda&lt;&#x2F;h3&gt;
&lt;p&gt;Sempre grazie ai comandi postup è possibile anche limitare, qualora si voglia, la banda passante per i client (sia in upload che ion download), ad esempio:&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = tc qdisc add dev wg0 ingress; tc filter add dev wg1 protocol ip ingress prio 2 u32 match ip dst 0.0.0.0&#x2F;0 action police
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;rate 10mbit burst 10mbit; tc filter add dev wg0 protocol ip ingress prio 2 u32 match ip src 0.0.0.0&#x2F;0 action police rate 10mbit burst 10mbit
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;PostUp = tc qdisc add dev wg0 parent root handle 1: hfsc default 1; tc class add dev wg0 parent 1: classid 1:1 hfsc sc rate 10mbit ul rate 10mbit
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;wireguard_network.png&quot; alt=&quot;Wireguard Network&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>moodeaudio: post su mastodon</title>
          <pubDate>Thu, 18 Jan 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/moodeaudio-post-su-mastodon/</link>
          <guid>https://www.agostinelli.eu/blog/moodeaudio-post-su-mastodon/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/moodeaudio-post-su-mastodon/">&lt;p&gt;In questo brevvisimo articolo  vedremo uno #script che preleva il &lt;strong&gt;brano&lt;&#x2F;strong&gt; attualmente in &lt;strong&gt;riproduzione&lt;&#x2F;strong&gt; su moOde e lo pubblica (come &lt;strong&gt;toot&lt;&#x2F;strong&gt;) su #mastodon.
(se non sapete cos&#x27;è #moodeaudio trovate articolo dedicato cliccando sul tag)&lt;&#x2F;p&gt;
&lt;p&gt;Io lancio lo script di seguito manualmente per non pubblicare troppi toot (ad ogni cambio brano), ma potete integrarlo facilmente in vari automatismi (ad esempio usando #homeassistant).&lt;&#x2F;p&gt;
&lt;p&gt;Dato che lei formazioni vengono recuperate via rete, potete eseguirlo da un qualsiasi pc della vostra rete casalinga.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;prerequisiti&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#prerequisiti&quot; aria-label=&quot;Anchor link for: prerequisiti&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Prerequisiti&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Curl: di solito è già installato, qualora non lo fosse potete farlo semplicemente usando l&#x27;utility di gestione del software della vostra distribuzione (apt, dnf, pacman)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ihabunek&#x2F;toot&quot;&gt;Toot&lt;&#x2F;a&gt;: client da riga di comando per mastodon (trovate tutti i dettagli e le istruzioni per installarlo sul sito qui indicato, anche se come sopra probabilmente sarà già incluso nella distribuzione che usate)&lt;&#x2F;li&gt;
&lt;li&gt;Jq: utility, da riga di comando, in grado di processare (e visualizzare) file json&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;script&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#script&quot; aria-label=&quot;Anchor link for: script&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Script&lt;&#x2F;h2&gt;
&lt;p&gt;Di seguito lo script che ho realizzato in linguaggio bash:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-begin z-shell&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;!&#x2F;bin&#x2F;bash&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-assignment z-shell&quot;&gt;testo&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-shell&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;Sto ascoltando: &lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-assignment z-shell&quot;&gt;testo&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-shell&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-shell&quot;&gt;&lt;span class=&quot;z-meta z-group z-expansion z-command z-parens z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-shell&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;curl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;s&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;http:&#x2F;&#x2F;moode.local&#x2F;command&#x2F;?cmd=get_currentsong&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-pipe z-shell&quot;&gt;|&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;jq&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-option z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-parameter z-shell&quot;&gt; -&lt;&#x2F;span&gt;r&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;.artist + &amp;quot; - &amp;quot; + .title&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-shell&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-assignment z-shell&quot;&gt;testo&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-shell&quot;&gt;+=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-shell&quot;&gt;&lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt; #musica #moodeaudio #hifi #raspberrypi&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;toot&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; post &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-shell&quot;&gt;testo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
      </item>
      <item>
          <title>Matrix</title>
          <pubDate>Mon, 08 Jan 2024 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/matrix/</link>
          <guid>https://www.agostinelli.eu/blog/matrix/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/matrix/">&lt;h2 id=&quot;cos-e&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cos-e&quot; aria-label=&quot;Anchor link for: cos-e&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cos&#x27;è?&lt;&#x2F;h2&gt;
&lt;p&gt;Protocollo &lt;strong&gt;aperto&lt;&#x2F;strong&gt; e &lt;strong&gt;decentralizzato&lt;&#x2F;strong&gt; per la &lt;strong&gt;messaggistica&lt;&#x2F;strong&gt;.
I suoi punti di forza sono, a mio avviso, la &lt;strong&gt;crittografia&lt;&#x2F;strong&gt; (e2ee), il fatto che essendo decenrrallizato ci sono più server che comunicano tra loro e quindi si può, non solo, scegliere il server che si vuole, ma anche installarne uno proprio con cui comunicare con gli altri.&lt;&#x2F;p&gt;
&lt;p&gt;Su matrix troverete molte stanze tematiche, questo è un altro dei suoi punti di forza, molti progetti opensource hanno la propria stanza tramite la quale parlare direttamente con gli sviluppatori.
Cercando di semplificare, potremmo definirlo come il sostituto di #irc.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;matrix_logo.png&quot; alt=&quot;Matrix Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;server-pubblici&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#server-pubblici&quot; aria-label=&quot;Anchor link for: server-pubblici&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Server pubblici&lt;&#x2F;h2&gt;
&lt;p&gt;Trovate qui la lista:
https:&#x2F;&#x2F;servers.joinmatrix.org&#x2F;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sellf-hosting&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#sellf-hosting&quot; aria-label=&quot;Anchor link for: sellf-hosting&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Sellf hosting&lt;&#x2F;h2&gt;
&lt;p&gt;È possibile installare e configurare un proprio server, così sarete voi stessi a deciderne le &lt;strong&gt;regole&lt;&#x2F;strong&gt;, ma soprattutto potete affiancarci vari bridge e bot (vedremo in seguito cosa sono).
In un prossimo articolo vedremo nel dettaglio un esempio concreto di installazione e configurazione.
Personalmente, in uno dei setup che ho seguito ho utilizzato &lt;strong&gt;docker&lt;&#x2F;strong&gt;, sia per il il server matrix, ma anche per tutti gli altri componenti aggiuntivi (che vedrete di seguito).
Per il momento vi lascio una semplice lista di software che potete utilizzare.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;server-software&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#server-software&quot; aria-label=&quot;Anchor link for: server-software&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Server software&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;synapse (stabile, supporta tutte le funzioni, ma è un po&#x27; pesante)&lt;&#x2F;li&gt;
&lt;li&gt;dendrite (scritto in go, rappresenta la nuova generazione di server, molto più leggero come risorse, supporta il 99% delle funzioni matrix, ma non è ancora stabile)&lt;&#x2F;li&gt;
&lt;li&gt;conduit (leggerissimo, ottimo per uso personale, non supporta a pieno tutte le funzioni di matrix)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;bridge&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#bridge&quot; aria-label=&quot;Anchor link for: bridge&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Bridge&lt;&#x2F;h2&gt;
&lt;p&gt;Grazie ai bridge potete usare Matrix per dialogare con le altre app di messaggistica, come dice il nome stesso questi faranno da &lt;em&gt;ponte&lt;&#x2F;em&gt; tra le varie App.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Facebook messenger&lt;&#x2F;li&gt;
&lt;li&gt;Telegram&lt;&#x2F;li&gt;
&lt;li&gt;WhatsApp&lt;&#x2F;li&gt;
&lt;li&gt;Irc&lt;&#x2F;li&gt;
&lt;li&gt;signal&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Trovate &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;ecosystem&#x2F;bridge&quot;&gt;qui&lt;&#x2F;a&gt; un elenco molto più esaustivo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bot&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#bot&quot; aria-label=&quot;Anchor link for: bot&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Bot&lt;&#x2F;h2&gt;
&lt;p&gt;Esistono anche molti bot già pronti all&#x27;uso, ma anche delle basi da cui partire per poter scrivere il proprio.
Qui ne trovate alcuni:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.org&#x2F;ecosystem&#x2F;integrations&#x2F;&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;topics&#x2F;matrix-bot&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;client&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#client&quot; aria-label=&quot;Anchor link for: client&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Client&lt;&#x2F;h2&gt;
&lt;p&gt;Essendo matrix un protocollo aperto, esistono vari client che possono essere utilizzati.
Sono disponibili per tutti i sistemi operativi, ma anche per Android e iPhone.
Molti dei client che seguono sono disponibili anche in modalità web, compatibile con tutti i browser:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Element (il client più usato, pesante, ma ricco di funzionalità)&lt;&#x2F;li&gt;
&lt;li&gt;Cinny (client web molto pratico e leggero)&lt;&#x2F;li&gt;
&lt;li&gt;Fluffy (client mobile molto leggero)&lt;&#x2F;li&gt;
&lt;li&gt;Elementx (client di nuova generazione, ancora in beta, ma che promette di essere leggerissimo)&lt;&#x2F;li&gt;
&lt;li&gt;SchildiChat (un fork di element, con in più alcune ottimizzazioni, specialmente in ambito mobile)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;element_screen.png&quot; alt=&quot;Element&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;cinny_screen.png&quot; alt=&quot;Cinny&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;fluffy_screen.png&quot; alt=&quot;Fluffy&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2024&#x2F;schildi_screen.png&quot; alt=&quot;Schildichat&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;stanze-consigliate&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#stanze-consigliate&quot; aria-label=&quot;Anchor link for: stanze-consigliate&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Stanze consigliate&lt;&#x2F;h2&gt;
&lt;p&gt;L&#x27; elenco sarebbe lunghissimo, e ciascuno segue quelle relative ai propri interessi, ne indico alcune, giusto per farci un giro se chi legge questo articolo deciderà di iscriversi.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#lealternativegruppo:matrix.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#mozilla-italia:mozilla.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#mastodon:mozilla.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#pixelfed:matrix.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#Debian-Italia:matrix.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#vaultwarden:matrix.org&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#Raspberryita:matrix.org&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Poi ci sono ovviamente tutte le stanze dedicate ai software sopra menzionati (sia client che server), in cui, ad esempio, potete aiuto in caso di problemi.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Il mio impianto hifi</title>
          <pubDate>Tue, 26 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/il-mio-impianto-hifi/</link>
          <guid>https://www.agostinelli.eu/blog/il-mio-impianto-hifi/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/il-mio-impianto-hifi/">&lt;p&gt;Su questo blog voglio parlare anche di &lt;strong&gt;musica&lt;&#x2F;strong&gt;, quale miglior modo per iniziare se non l&#x27; approccio Nerd che descrive ciò che ho in casa nel momento in cui scrivo?
In realtà in casa ne ho ben due: andiamo in ordine cronologico: quello secondario (che tengo in camerina), è quello storico che acquistai con il mio primo lavoro e che con pochissime modifiche è arrivato ai giorni d&#x27;oggi. Poi c&#x27;è quello primario, posizionato nel soggiorno, e che quindi considero come primario, essendo usato maggiormente.
L&#x27;impianto primario è quello più studiato, su cui mi sono concentrato negli ultimi anni. In entrambi i casi si tratta di impianti mediocri, niente dai costi proibitivi, ma io ne sono pienamente soddisfatto!
Ma scendiamo nel dettaglio e vediamo cosa ho nel momento in cui sto scrivendo. (Dicembre 2023)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;impianto-primario&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#impianto-primario&quot; aria-label=&quot;Anchor link for: impianto-primario&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Impianto Primario&lt;&#x2F;h2&gt;
&lt;p&gt;E&#x27; composto da:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;amplificatore &lt;strong&gt;classe D assemblato da me&lt;&#x2F;strong&gt; usando la scheda &lt;strong&gt;Hypex NC252MP&lt;&#x2F;strong&gt; e case in metallo Ghent Audio&lt;&#x2F;li&gt;
&lt;li&gt;Raspberrypi 4 con &lt;strong&gt;Moode Audio&lt;&#x2F;strong&gt; installato, disco usb ssd, cablaggio ethernet, con alimentatore lineare&lt;&#x2F;li&gt;
&lt;li&gt;DAC S.M.S.L SU-9&lt;&#x2F;li&gt;
&lt;li&gt;Diffusori da scaffale &lt;strong&gt;B&amp;amp;W 706 S3&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Subwoofer &lt;strong&gt;Elac DEBUT S10.2&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;case_ghent1.png&quot; alt=&quot;Case amplificatore 1&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;case_ghent2.png&quot; alt=&quot;Case amplificatore 2&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;s-l1600.jpg&quot; alt=&quot;Hypex NC252MP&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ciascuno dei componenti ha una propria storia, e l&#x27;impianto cosi come descritto è arrivato per gradi, cioè nel tempo ho aggiornato un componente per volta.
Essendo posizionato in una stanza polifunzionale (soggiorno&#x2F;cucina), sono dovuto scendere a compromessi: quello che ritengo sia il più importante nel mio caso, è che ho dovuto, per motivi di spazio, optare per dei diffusori da scrivania con posizionamento, purtroppo, a pochi centimetri dalla parete posteriore.&lt;&#x2F;p&gt;
&lt;p&gt;Avendo dei diffusori abbastanza compatti, ho voluto aggiungere anche un subwoofer: trovo il suono decisamente più completo, per tutti i generi di musica che ascolto.
Abitando in condominio non ascolto a volumi elevati, soprattutto il subwoofer tendo ad usarlo ad un volume molto basso.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;bw-706s3-bl_1.jpg&quot; alt=&quot;B&amp;amp;W speaker&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;IMG-1811.jpg&quot; alt=&quot;B&amp;amp;W speaker2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;L&#x27; amplificatore Hypex è davvero molto pulito, non potevo fare scelta migliore. Ad esso è collegato, con cavi bilanciati XLR, il DAC che nel mio caso funge anche da pre: &lt;strong&gt;S.M.S.L SU-9&lt;&#x2F;strong&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;smsl-su-9-front.jpg&quot; alt=&quot;dac front&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;smsl-su-9-back.jpg&quot; alt=&quot;dac retro&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Uso il telecomando del DAC per regolare il volume, dato che il mio amplificatore, essendo un puro finale di potenza, non ha il potenziometro per il volume.&lt;&#x2F;p&gt;
&lt;p&gt;A sua volta il DAC è collegato al raspberry pi con cavo USB.&lt;&#x2F;p&gt;
&lt;p&gt;Dato che per la riproduzione audio non si consumano molte risorse, il raspberry è senza ventola, ma ha un case-dissipatore che è più che sufficiente.
Infine l&#x27;alimentatore è di tipo lineare, in modo da ridurre al massimo i rumori di fondo.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;case_pi4.jpg&quot; alt=&quot;Pi4 case&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;power_linear_50w_1.jpg&quot; alt=&quot;Linear power 1&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;power_linear_50w_2.jpg&quot; alt=&quot;Linear power 1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Su questo impianto, ma anche sull&#x27; altro, ascolto solo musica liquida, dalle segenti sorgenti:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Archivio locale&lt;&#x2F;strong&gt; su disco in formato &lt;strong&gt;flac&lt;&#x2F;strong&gt; o &lt;strong&gt;DSD&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Abbonamento &lt;strong&gt;Qobuz&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Riguardo la prima opzione, per la musica che mi piace tendo ad averla in archivio in formato #flac. Questo formato è senza perdita di qualità, e nel mia collezione la qualità da quella usata per il cd in su, cioé molti dei miei file hanno un formato superiore, come bit e frequenza, a quello del normale cd.
In questo modo sono sempre sicuro di poter &lt;strong&gt;godere e usufruire della musica che ho acquistato&lt;&#x2F;strong&gt;.
Il mio archivio musicale è circa 500Gb, ed è salvato in più copie (almeno 4) a giro per casa, in modo da essere al sicuro in caso di problemi&lt;&#x2F;p&gt;
&lt;p&gt;Negli ultimo tempi, ho affiancato il mio archivio con un servizio di musica in streaming, in modo da scoprire qualcosa di nuovo (nuovi gruppi) e anche per curiosare in altri generi musicali.
In particolare, uso il servizio Qobuz, perché è uno dei pochi che ha una qualità senza compromessi (formato flac, vedi spiegazione di sopra).
Il software moode installato sul raspberry è compatibile con lo streaming da Qobuz, per cui funziona molto bene, utilizzo il software Bubbleupnp sul telefono per gestire la riproduzione in streaming, aggiungere brani alla coda, scoprire le nuove uscite, ecc ecc.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;impianto-secondario&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#impianto-secondario&quot; aria-label=&quot;Anchor link for: impianto-secondario&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Impianto Secondario&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Amplificatore Yamaha ax-396&lt;&#x2F;li&gt;
&lt;li&gt;Diffusori Celestion F2&lt;&#x2F;li&gt;
&lt;li&gt;Raspberrypi 4 con &lt;strong&gt;Moode Audio&lt;&#x2F;strong&gt; installato, disco usb ssd, cablaggio ethernet, con alimentatore lineare (Allo Nirvana)&lt;&#x2F;li&gt;
&lt;li&gt;DAC HAT Allo Boss e case&lt;&#x2F;li&gt;
&lt;li&gt;subwoofer Yamaha YST-SW40&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;Yamaha_AX-396.jpg&quot; alt=&quot;Amplificatore Yamaha&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;celestion_f2.jpg&quot; alt=&quot;Diffusori celestion&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;Yamaha-YST-SW40-43117.JPG&quot; alt=&quot;Yamaha subwoofer&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Anche il secondo impianto viene usato con la musica liquida, quindi vale tutto quello che ho scritto sopra.
L&#x27;unica cosa su cui mi soffermo è il dac, in questo caso è di tipo HAT, cioé come dice la parola stessa (=cappello), è una schedina che va a posizionarsi sul connettore &lt;strong&gt;gpio&lt;&#x2F;strong&gt; del raspberry, a cui, quindi, aggiunge un&#x27;uscita rc audio analogica (la classica con i connettori bianco e rosso).
In questo modo abbiamo una soluzione super compatta, ma funzionale, da poter attaccare direttamente ad un amplificatore.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;boss-dac.jpg&quot; alt=&quot;Allo Boss&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;acrylic-case-for-rpi-boss.jpg&quot; alt=&quot;Allo Case&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;nirvana-smps1__81339.jpg&quot; alt=&quot;Allo Nirvana&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;impianto-cuffie-casalingo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#impianto-cuffie-casalingo&quot; aria-label=&quot;Anchor link for: impianto-cuffie-casalingo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Impianto cuffie casalingo&lt;&#x2F;h2&gt;
&lt;p&gt;Anche questo è posizionato in camerina, per cui possiamo anche dire che si fonde con l&#x27;impianto secondario, dato che sono collegate insieme.
Veniamo alle componenti:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Dac e amplificatore FiiO K5 Pro&lt;&#x2F;li&gt;
&lt;li&gt;Cuffie HiFiMAN Sundara Magneto-planari&lt;&#x2F;li&gt;
&lt;li&gt;Computer fisso con:
&lt;ul&gt;
&lt;li&gt;collegamento al NAS con la mia libreria di file .flac in hires&lt;&#x2F;li&gt;
&lt;li&gt;software Qobuz con abbonamento per streaming hires&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;hifiman-sundara-black.jpg&quot; alt=&quot;Hifiman Sundara&quot; &#x2F;&gt;
Il dac per le cuffie è anche collegato all&#x27;amplificatore, in questo caso lavora solo come DAC inviando il segnale all&#x27;amplificatore.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;fiio_k5pro.jpg&quot; alt=&quot;Fiio K50Pro&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;audio-in-mobilita&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#audio-in-mobilita&quot; aria-label=&quot;Anchor link for: audio-in-mobilita&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Audio in mobilità&lt;&#x2F;h2&gt;
&lt;p&gt;Per non farsi mancare niente, nel tempo ho anche acquistato dei dispositivi per ascoltare musica in mobilità, con una qualità maggiore della media diciamo. Ecco la lista:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Riproduttore portatile Hidizs AP80 PRO con scheda sd da 512MB&lt;&#x2F;li&gt;
&lt;li&gt;Cuffie sennheiser MOMENTUM 3 Wireless&lt;&#x2F;li&gt;
&lt;li&gt;FiiO BTR5 Amplificatore Portatile Bluetooth Bilanciato&lt;&#x2F;li&gt;
&lt;li&gt;Auricolari TRN BA8 16BA con cavo bilanciato TRN T3 intrecciato in argento&lt;&#x2F;li&gt;
&lt;li&gt;Auricolari TINHIFI T2&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;ap80pro.png&quot; alt=&quot;Ap80 pro&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;momentum_wireless_3.jpg&quot; alt=&quot;Momentum Wireless&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;FiiO_BTR-5.jpg&quot; alt=&quot;Fiio BTR5&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;In questo articolo non ho volutamente parlato di cavi, ma anche quelli rientrerebbero nel listone, penso di aver già scritto molto così, chissà magari ne parlerò in un prossimo articolo&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Home Assistant rsync backup</title>
          <pubDate>Mon, 18 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/home-assistant-rsync-backup/</link>
          <guid>https://www.agostinelli.eu/blog/home-assistant-rsync-backup/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/home-assistant-rsync-backup/">&lt;p&gt;Ho scritto un plugin per home assistant!
Ma ce n&#x27;era davvero bisogno? Purtroppo si, perchè avevo una particolare necessità che sotto vi spiego.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contesto&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#contesto&quot; aria-label=&quot;Anchor link for: contesto&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Contesto&lt;&#x2F;h2&gt;
&lt;p&gt;A casa ho un NAS che tengo quasi sempre spento, e che accendono alla bisogna. Quando lo accendo, ci sono delle procedure&#x2F;software installati che partono e aggiornarnano i dati.
Avevo, quindi, la necessità di trovare una soluzione simile anche con #homeassistant. Ho provato vari plugin esistenti, ma nessuno faceva al caso mio.
Dato che implementare questo tipo di plugin sulla carta sembrava molto semplice, ho deciso, quasi per gioco, di scriverne uno.&lt;&#x2F;p&gt;
&lt;p&gt;Lo trovate qui: https:&#x2F;&#x2F;github.com&#x2F;magostinelli&#x2F;hassio-addons-rsync-key&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cosa-fa&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cosa-fa&quot; aria-label=&quot;Anchor link for: cosa-fa&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cosa fa?&lt;&#x2F;h3&gt;
&lt;p&gt;Sincronizza i backup locali con quelli remoti via ssh con scambio chiave (senza password).
Al primo avvio del componente aggiuntivo viene mostrata la chiave (pubblica) creata, tale chiave dovrà essere abilitata per l&#x27;accesso sul nas al percorso in cui vogliamo depositare la copia dei nostri backup.&lt;&#x2F;p&gt;
&lt;p&gt;Il plugin ha alcune opzioni di configurazione:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;home_rsync_conf.jpg&quot; alt=&quot;schermata di configurazione&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;E nella schermata dei log è possibile monitorare la sua ultima esecuzione.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;home_rsync_log.jpg&quot; alt=&quot;schermata di configurazione&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;come-lo-uso&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-lo-uso&quot; aria-label=&quot;Anchor link for: come-lo-uso&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come lo uso?&lt;&#x2F;h3&gt;
&lt;p&gt;Ho creato un automazione che fa partire questo componente aggiuntivo 1 minuto dopo aver rilevato che il mio nas è stato acceso.
Una volta che il componente avrà eseguito il suo lavoro si &lt;strong&gt;spengerà automaticamente&lt;&#x2F;strong&gt;, così il &lt;strong&gt;consumo&lt;&#x2F;strong&gt; di risorse è davvero &lt;strong&gt;inesistente&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;#homeassistant #hass #rsync #linux #backup #nas&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>moOde audio</title>
          <pubDate>Sat, 16 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/moode-audio/</link>
          <guid>https://www.agostinelli.eu/blog/moode-audio/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/moode-audio/">&lt;h2 id=&quot;cos-e&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cos-e&quot; aria-label=&quot;Anchor link for: cos-e&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cos&#x27;è?&lt;&#x2F;h2&gt;
&lt;p&gt;Uno streamer audio da installare su #raspberrypi (o su altri SBC).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-cosa-serve&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#a-cosa-serve&quot; aria-label=&quot;Anchor link for: a-cosa-serve&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
A cosa serve?&lt;&#x2F;h2&gt;
&lt;p&gt;Riproduzione audio di alta qualità dalla propria libreria personale (nas, disco usb). o dai servizi streaming più disparati.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cosa-puo-fare&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cosa-puo-fare&quot; aria-label=&quot;Anchor link for: cosa-puo-fare&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cosa può fare&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Può riprodurre tutti i più diffusi (e non) formati audio come ad esempio: flac, mp3, ape, wav, ogg, ecc.&lt;&#x2F;li&gt;
&lt;li&gt;Organizzare la propria libreria musicale (riprodurre per generi, artisti, tag, anno, ecc.)&lt;&#x2F;li&gt;
&lt;li&gt;Riprodurre da servizi streaming quali Quobuz, Tidal o Spotify&lt;&#x2F;li&gt;
&lt;li&gt;Supporto alle Web radio&lt;&#x2F;li&gt;
&lt;li&gt;Supporto Upnp&lt;&#x2F;li&gt;
&lt;li&gt;Supporto di dac esterni usb o tramite HAT&lt;&#x2F;li&gt;
&lt;li&gt;Airplay&lt;&#x2F;li&gt;
&lt;li&gt;Riproduzione via bluetooth
-Aggiornamento con un click&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;supporto-dac&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#supporto-dac&quot; aria-label=&quot;Anchor link for: supporto-dac&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Supporto dac&lt;&#x2F;h2&gt;
&lt;p&gt;Il supporto per i dac è davvero molto esteso, potete consultare il &lt;a href=&quot;https:&#x2F;&#x2F;moodeaudio.org&#x2F;forum&#x2F;&quot;&gt;forum ufficiale&lt;&#x2F;a&gt; se volete leggere l&#x27;esperienza di altri utenti, ma sono sicuro che difficilmente avrete problemi di compatibilità.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installazione-di-moode&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#installazione-di-moode&quot; aria-label=&quot;Anchor link for: installazione-di-moode&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Installazione di moode&lt;&#x2F;h2&gt;
&lt;p&gt;Non credo sia necessaria una guida, la procedura è sempre la stessa di quando si installa qualcosa sul raspberry, sarà sufficiente procurarsi una scheda sd, l&#x27;immagine di moOde e scrivere quest&#x27;ultima sulla scheda.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;uso-con-qobuz&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#uso-con-qobuz&quot; aria-label=&quot;Anchor link for: uso-con-qobuz&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Uso con Qobuz&lt;&#x2F;h2&gt;
&lt;p&gt;In quanto possessore di abbonamento #Qobuz, uso moOde anche con questo servizio, di seguito alcuni brevi istruzioni per usarlo nella maniera, a mio avviso, migliore.
Il dispositivo mobile servirà solo come &lt;em&gt;telecomando&lt;&#x2F;em&gt;, una volta aggiunti alla coda i brani, la riproduzione proseguirà &lt;strong&gt;anche se il dispositivo si disconnette&lt;&#x2F;strong&gt; e quindi non avremo alcun impatto sulla batteria per fare transcodifiche.&lt;&#x2F;p&gt;
&lt;p&gt;Sarà necessario avere sul proprio smartphone (o tablet) l&#x27;applicazione
&lt;strong&gt;BubbleUPnP&lt;&#x2F;strong&gt; (costa pochi euro).
Impostare la configurazione come da schermate che seguono:
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;BubbleUPnP_1.jpg&quot; alt=&quot;Bubble settings1&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;BubbleUPnP_2.jpg&quot; alt=&quot;Bubble settings2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Nelle impostazioni di moOde sarà necessario attivare Open Home, come da schermata seguente.
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;moode_1.jpg&quot; alt=&quot;moOde settings1&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;moode_2.jpg&quot; alt=&quot;moOde settings2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Infine adesso aprendo BubbleUPnP, potete scegliere il vostro dispositivo moOde (icona select renderer), e nel menu troverete qobuz, a cui vi loggherete con le credenziali in vostro possesso.&lt;&#x2F;p&gt;
&lt;p&gt;Che altro aggiungere? Io lo uso con soddisfazione da anni ormai, se avete delle domande sono a vostra disposizione!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Pi-hole</title>
          <pubDate>Sun, 10 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/pi-hole/</link>
          <guid>https://www.agostinelli.eu/blog/pi-hole/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/pi-hole/">&lt;p&gt;Fa parte dei software indispensabili: vi consiglio di installarlo sul vostro #raspberrypi, sul vostro #NAS o su &lt;strong&gt;qualsiasi dispositivo&lt;&#x2F;strong&gt; (su base #linux) che terrete sempre acceso.
Il mio consiglio va in direzione del raspberry, viste i consumi e dimensioni ridotte, ma ciascuno rimane libero di fare le proprie scelte.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;Pi-hole_vector_logo.svg&quot; alt=&quot;Pi-hole Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cos-e&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cos-e&quot; aria-label=&quot;Anchor link for: cos-e&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cos&#x27;è&lt;&#x2F;h2&gt;
&lt;p&gt;Pi-hole è un&#x27;applicazione **Linux ** pensata per bloccare la pubblicità e il tracciamento degli utenti su Internet a livello di rete locale.  Pi-hole agisce come un DNS sinkhole[ e, opzionalmente, come un server DHCP.
Fonte: https:&#x2F;&#x2F;it.wikipedia.org&#x2F;wiki&#x2F;Pi-hole&lt;&#x2F;p&gt;
&lt;h2 id=&quot;come-funziona&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-funziona&quot; aria-label=&quot;Anchor link for: come-funziona&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come funziona&lt;&#x2F;h2&gt;
&lt;p&gt;Si affianca al vostro router per la connettività Internet ed è in grado di bloccare  le pubblicità e i traccianti per  tutti i dispositivi di casa. Può funzionare come server #DHCP (in questo caso dovrete disattivare quello presente sul vostro router), oppure può affiancarlo (nelle impostaziooni dhcp del router dovrete indicare là indirizzo ip di pi-hole come server dns per i client).
Una volta fatta questa configurazione non dovrete fare niente sui vostri dispositivi, che siano computer, telefoni o smarttv, facile no?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;M0AWS-PiHole-Management-interface-768x612&quot; alt=&quot;Pi-hole Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;installazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#installazione&quot; aria-label=&quot;Anchor link for: installazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Installazione&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;standalone&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#standalone&quot; aria-label=&quot;Anchor link for: standalone&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Standalone&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;curl -sSL https:&#x2F;&#x2F;install.pi-hole.net | bash&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h4 id=&quot;prerequisiti-e-sistemi-supportati&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#prerequisiti-e-sistemi-supportati&quot; aria-label=&quot;Anchor link for: prerequisiti-e-sistemi-supportati&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Prerequisiti e sistemi supportati&lt;&#x2F;h4&gt;
&lt;p&gt;Consultate la pagina ufficiale qui: https:&#x2F;&#x2F;docs.pi-hole.net&#x2F;main&#x2F;prerequisites&#x2F;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;docker&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#docker&quot; aria-label=&quot;Anchor link for: docker&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Docker&lt;&#x2F;h3&gt;
&lt;p&gt;Consiglio di usare docker-compose, di seguito una configurazione di base che potete personalizzare a voswtro piacimento
version: &quot;3&quot;&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;version: &amp;quot;3&amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;services:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  pihole:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    container_name: pihole
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    image: pihole&#x2F;pihole:latest
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    # For DHCP it is recommended to remove these ports and instead add: network_mode: &amp;quot;host&amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    ports:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;quot;53:53&#x2F;tcp&amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;quot;53:53&#x2F;udp&amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;quot;67:67&#x2F;udp&amp;quot; # Only required if you are using Pi-hole as your DHCP server
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;quot;80:80&#x2F;tcp&amp;quot;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    environment:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      TZ: &amp;#39;Europe&#x2F;Rome&amp;#39;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      # WEBPASSWORD: &amp;#39;set a secure password here or it will be random&amp;#39;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    # Volumes store your data between container upgrades
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    volumes:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;#39;.&#x2F;etc-pihole:&#x2F;etc&#x2F;pihole&amp;#39;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - &amp;#39;.&#x2F;etc-dnsmasq.d:&#x2F;etc&#x2F;dnsmasq.d&amp;#39;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    #   https:&#x2F;&#x2F;github.com&#x2F;pi-hole&#x2F;docker-pi-hole#note-on-capabilities
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    cap_add:
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      - NET_ADMIN # Required if you are using Pi-hole as your DHCP server, else not needed
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    restart: unless-stopped 
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;personalizzazione&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#personalizzazione&quot; aria-label=&quot;Anchor link for: personalizzazione&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Personalizzazione&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;aggiunta-di-liste-di-blocco&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#aggiunta-di-liste-di-blocco&quot; aria-label=&quot;Anchor link for: aggiunta-di-liste-di-blocco&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Aggiunta di liste di blocco&lt;&#x2F;h3&gt;
&lt;p&gt;Le liste si configurano dall&#x27;interfaccia web alla voce AdList, eccone alcune che potete aggiungere:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;www.github.developerdan.com&#x2F;hosts&#x2F;lists&#x2F;ads-and-tracking-extended.txt&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;s3.amazonaws.com&#x2F;lists.disconnect.me&#x2F;simple_tracking.txt&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;s3.amazonaws.com&#x2F;lists.disconnect.me&#x2F;simple_ad.txt&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;raw.githubusercontent.com&#x2F;StevenBlack&#x2F;hosts&#x2F;master&#x2F;hosts&lt;&#x2F;li&gt;
&lt;li&gt;http:&#x2F;&#x2F;sysctl.org&#x2F;cameleon&#x2F;hosts&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;L&#x27; elenco non è certo esaustivo, esistono sicuramente altre liste, le potrete trovare con una semplice ricerca sul web.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;pihole-dashboard-1024x640.webp&quot; alt=&quot;Pi-hole Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;utilizzo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#utilizzo&quot; aria-label=&quot;Anchor link for: utilizzo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Utilizzo&lt;&#x2F;h2&gt;
&lt;p&gt;Una volta che avete configurato la porta dell&#x27;&lt;strong&gt;interfaccia web&lt;&#x2F;strong&gt;, collegatevi a quest&#x27;ultima, e gestirete tutto da li.
Dal menu, in Tools -&amp;gt; Update Gravity potete &lt;strong&gt;aggiornare le liste&lt;&#x2F;strong&gt; d ei blocchi (come quelle indicate sopra).
Attraverso la voce disable blocking potete intemrrompere temporaneamente (o meno) il blocco.
Da query log vedrete tutte le varie &lt;strong&gt;richieste&lt;&#x2F;strong&gt; e se i siti richiesti sono bloccati o meno, da qui potete anche aggiungerli manualmente alla &lt;strong&gt;whitelist&lt;&#x2F;strong&gt;, come nel caso venga bloccato un sito che a voi serve.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;consiglio-importante&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#consiglio-importante&quot; aria-label=&quot;Anchor link for: consiglio-importante&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Consiglio importante&lt;&#x2F;h3&gt;
&lt;p&gt;Una volta installato funzionerà tutto in automatico e senza che ci sia bisogno di particolari interventi, proprio per questo vi consiglio di avere solo questa &lt;strong&gt;unica e semplice accortezza&lt;&#x2F;strong&gt;: Ricordatevi che lo avete installato, e nel caso abbiate qualche sito mal funzionante, tenete presente che potrebbe essere per questo che qualcosa non vi funziona!&lt;&#x2F;p&gt;
&lt;p&gt;A me personalmente è successo qualche volta, ma sono prontamente intervenuto (whitelist o disabilitazione temporanea) e ho risolto velocemente e facilmente.
I &lt;strong&gt;malfunzionamenti dipendono&lt;&#x2F;strong&gt; sempre &lt;strong&gt;dal tipo&lt;&#x2F;strong&gt; e numero di &lt;strong&gt;liste&lt;&#x2F;strong&gt; che inserite.
Alcuni esempi di malfunzionamenti che mi sono capitati:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;app amazon&lt;&#x2F;li&gt;
&lt;li&gt;rai play sulla tv&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;dns-consigliati&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#dns-consigliati&quot; aria-label=&quot;Anchor link for: dns-consigliati&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
DNS Consigliati&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;www.dns0.eu&#x2F;it&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;www.opendns.com&#x2F;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;companion-app&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#companion-app&quot; aria-label=&quot;Anchor link for: companion-app&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Companion app&lt;&#x2F;h2&gt;
&lt;p&gt;Per la sua gestione da pc non avrete problemi, basterà usare la sua comodissima interfaccia web (la porta dipende dal tipo di installazione&#x2F;configurazione che avete effettuato).
Per Il vostro tablet&#x2F;smartphone vi consiglio queste applicazioni:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;play.google.com&#x2F;store&#x2F;apps&#x2F;details?id=com.tien.piholeconnect&quot;&gt;Pi-hole Connect&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;f-droid.org&#x2F;it&#x2F;packages&#x2F;friimaind.piholedroid&#x2F;&quot;&gt;Pi-hole Droid&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;play.google.com&#x2F;store&#x2F;apps&#x2F;details?id=com.jgeek00.droid_hole&quot;&gt;DroidHole&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Se volete curiosare, questo è il sito ufficiale: https:&#x2F;&#x2F;pi-hole.net&#x2F;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Commenti su writefreely </title>
          <pubDate>Sat, 09 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/commenti-su-writefreely/</link>
          <guid>https://www.agostinelli.eu/blog/commenti-su-writefreely/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/commenti-su-writefreely/">&lt;h2 id=&quot;come-interagire-con-il-blog&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-interagire-con-il-blog&quot; aria-label=&quot;Anchor link for: come-interagire-con-il-blog&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come interagire con il blog&lt;&#x2F;h2&gt;
&lt;p&gt;Puoi &lt;strong&gt;interagire&lt;&#x2F;strong&gt; con questo (ma anche altri) blog tramite il fediverso, dove il software più diffuso è sicuramente #mastodon (almeno nel momento in cui sto scrivendo).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;Mastodon_Logo.png&quot; alt=&quot;Mastodon Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;come-avviene&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#come-avviene&quot; aria-label=&quot;Anchor link for: come-avviene&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Come avviene?&lt;&#x2F;h2&gt;
&lt;p&gt;Cosa permette a livello tecnico questa &lt;strong&gt;integrazione&lt;&#x2F;strong&gt;?
In tutti gli articoli del blog è presente una firma, dove c&#x27;è il &lt;strong&gt;riferimento&lt;&#x2F;strong&gt; al mio &lt;strong&gt;account mastodon&lt;&#x2F;strong&gt; (&lt;em&gt;vedi sotto&lt;&#x2F;em&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Rispondendo a questo post, riceverò una notifica, da lì potremo confrontarci su questo, o altri, articoli.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;Social-media-comments-final-2.png&quot; alt=&quot;Commenti social&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;evoluzioni-future&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#evoluzioni-future&quot; aria-label=&quot;Anchor link for: evoluzioni-future&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Evoluzioni future&lt;&#x2F;h2&gt;
&lt;p&gt;Al momento l&#x27;unica cosa che è rimasta fuori è la &lt;strong&gt;visualizzazione&lt;&#x2F;strong&gt; dei &lt;strong&gt;commenti&lt;&#x2F;strong&gt; sotto gli articoli, chissà che non venga implementata nelle &lt;strong&gt;future versioni&lt;&#x2F;strong&gt;, io ci spero!
In alternativa continuo a studiare, magari riesco a trovare un modo per farli visualizzare io sotto ad ogni articolo.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;Fediverse_logo_proposal.png&quot; alt=&quot;Fediverso Logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Home Assistant</title>
          <pubDate>Fri, 08 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/home-assistant/</link>
          <guid>https://www.agostinelli.eu/blog/home-assistant/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/home-assistant/">&lt;p&gt;Quello che segue sarà il primo di una serie di articoli che troverete sul blog. Questo è quello introduttivo diciamo. Iniziamo!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cos-e-a-che-serve&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#cos-e-a-che-serve&quot; aria-label=&quot;Anchor link for: cos-e-a-che-serve&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Cos&#x27;è? A che serve?&lt;&#x2F;h2&gt;
&lt;p&gt;È un software per la &lt;strong&gt;domotica&lt;&#x2F;strong&gt; (personale). &lt;strong&gt;Ma c&#x27;è ne&#x27;era bisogno?&lt;&#x2F;strong&gt; Decisamente si!
Vedremo, nelle puntate successive, quante cose è in grado di fare!
Come descrizione generale possiamo dire che è un Hub tramite il quale comandare tutti i nostri dispostivi domotici, non solo da un unico punto di controllo, ma è possibile creare delle automazioni usando tutti gli altri nostri dispositivi.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;homeassistant.png&quot; alt=&quot;homeassistant logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;perche&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#perche&quot; aria-label=&quot;Anchor link for: perche&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
Perché&lt;&#x2F;h2&gt;
&lt;p&gt;Se dovessi scegliere alcuni dei suoi punti di forza per convincerli a provarlo direi:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Indipendenza&lt;&#x2F;strong&gt; (il vostro impianto domotico funzionerà anche senza internet, e anche se i vari provider chiudessero i loro servizi)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Leggero&lt;&#x2F;strong&gt;: funziona (alla grande) su un piccolo SBC come #raspberrypi&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Espandibile&lt;&#x2F;strong&gt;: impossibile elencare tutte le integrazioni e plugin supportati&lt;&#x2F;li&gt;
&lt;li&gt;In &lt;strong&gt;continuo sviluppo&lt;&#x2F;strong&gt;: ogni mese escono nuove funzionalità, e i bug fixing escono con una frequenza anche maggiore.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Supporto&lt;&#x2F;strong&gt;: c&#x27;è una vastissima comunità di utilizzatori&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Facilità d&#x27;uso&lt;&#x2F;strong&gt;: la configurazione avviene tramite una semplice interfaccia web&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;App mobile&lt;&#x2F;strong&gt;: esiste sia per Android che per iPhone ed è fatta benissimo&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Backup&lt;&#x2F;strong&gt;: ha una procedura di salvataggio configurazioni automatizzata, se la salviamo altrove (lo vedremo) saremo in grado di ripristinare la configurazione con un click.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Multiutente&lt;&#x2F;strong&gt;: potete creare un account per tutta la famiglia&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Open source&lt;&#x2F;strong&gt;: distribuito con licenza apache 2.0&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;e-ora&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#e-ora&quot; aria-label=&quot;Anchor link for: e-ora&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
E ora?&lt;&#x2F;h2&gt;
&lt;p&gt;Continua a seguire gli articoli di questa serie, ne vedremo delle belle!&lt;&#x2F;p&gt;
&lt;p&gt;Clicca qui per vedere gli altri approfondimenti: #nextcloud #domotica&lt;&#x2F;p&gt;
&lt;p&gt;Vi lascio qualche immagine di esempio prese dal web.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;536249767.png&quot; alt=&quot;homeassistant1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;556378040.jpg&quot; alt=&quot;homeassistant2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;home-assistant-energy-management-dashboard.png&quot; alt=&quot;homeassistant3&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Linguaggio Sql e Join</title>
          <pubDate>Thu, 07 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/linguaggio-sql-e-join/</link>
          <guid>https://www.agostinelli.eu/blog/linguaggio-sql-e-join/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/linguaggio-sql-e-join/">&lt;p&gt;Mi è capitata sottomano l&#x27;immagine che segue, ho deciso di condividerla con voi perché la trovo molto immediata e semplice.&lt;&#x2F;p&gt;
&lt;p&gt;Tutti colo che hanno avuto a che fare con le &lt;em&gt;join&lt;&#x2F;em&gt; del &lt;strong&gt;linguaggio sql&lt;&#x2F;strong&gt; spesso hanno delle perplessità sui vari tipi di join esistenti, questa immagine, sfruttando il concetto degli insiemi, spiega in maniera visuale il tutto, rendendo semplice una cosa complessa, la trovo geniale!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;sql_join.jpg&quot; alt=&quot;Sql Join&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;#sql #database #informatica&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Writefreely e uso delle immagini </title>
          <pubDate>Thu, 07 Dec 2023 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://www.agostinelli.eu/blog/writefreely-e-uso-delle-immagini/</link>
          <guid>https://www.agostinelli.eu/blog/writefreely-e-uso-delle-immagini/</guid>
          <description xml:base="https://www.agostinelli.eu/blog/writefreely-e-uso-delle-immagini/">&lt;p&gt;Quando ho deciso di riaprire un blog, ho optato per il software #writefreely, per due buone ragioni: la prima per la sua &lt;strong&gt;semplicità&lt;&#x2F;strong&gt;, la seconda perché si integra con il #fediverso (#actvitypub).&lt;&#x2F;p&gt;
&lt;p&gt;Una delle cont indicazioni della sua semplicità è il suo limite con le immagini, infatti &lt;strong&gt;non supporta&lt;&#x2F;strong&gt;, nativamente, il &lt;strong&gt;caricamento delle immagini&lt;&#x2F;strong&gt;, cosa che trovo un po&#x27; scomoda per un blog.&lt;&#x2F;p&gt;
&lt;p&gt;Quindi mi sono messo a pensare cercando di fare necessità virtù.
Dato che ho un mio #server personale (dove è ospitato anche questo blog), mi è venuto naturale creare un nuovo #virtualhost su #apache (il webserver che uso).
In questo modo posso caricare tutte le &lt;strong&gt;immagini&lt;&#x2F;strong&gt; che voglio &lt;strong&gt;senza limiti&lt;&#x2F;strong&gt;.
Alla soluzione mancava un ultima cosa, ovvero come gestire il caricamento delle immagini. Esistono vari software opensource da poter installare (es: &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ldidry&#x2F;lutim&quot;&gt;lutim&lt;&#x2F;a&gt;), ma ho scartato questa ipotesi perché si sarebbe trattato dell&#x27;ennesimo software da gestire, solo per poter caricare una manciata di immagini.
Dato su questo stesso server uso &lt;strong&gt;#nextcloud&lt;&#x2F;strong&gt;, mi è venuta un&#x27;idea geniale: montare la directory usata per il virtual host come &lt;strong&gt;archivio esterno!&lt;&#x2F;strong&gt;
In questo modo il caricamento dei file è comunque protetto all&#x27;accesso nextcloud, il quale mi fornisce anche una &lt;strong&gt;semplice interfaccia&lt;&#x2F;strong&gt; per il caricamento delle #immagini!&lt;&#x2F;p&gt;
&lt;p&gt;Prima la salutarvi, proviamola questa soluzione per le immagini!
Ecco qua due immagini, scaricate dal web a aggiunte a nextcloud direttamente da dispositivo mobile!
(addirottura la seconda è in formato #svg)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;nextcloud.png&quot; alt=&quot;nextcloud logo&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;img.agostinelli.eu&#x2F;2023&#x2F;writefreely.svg&quot; alt=&quot;writefreely logo&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;A presto.&lt;&#x2F;p&gt;
&lt;p&gt;P. S. Questo articolo è allo stesso tempo un test, ho provato ad inserire un po&#x27; di hashtag in giro, vediamo come funziona.&lt;&#x2F;p&gt;
</description>
      </item>
    </channel>
</rss>
