<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>b0sh.net</title>
	<atom:link href="https://www.b0sh.net/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.b0sh.net</link>
	<description>Proudly debugging the system since 1981</description>
	<lastBuildDate>Mon, 01 Jun 2026 09:09:07 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
<site xmlns="com-wordpress:feed-additions:1">7617468</site>	<item>
		<title>PhotoPrism AI Curator: aggiornamenti, raffinamenti e una web UI</title>
		<link>https://www.b0sh.net/2026/06/photoprism-ai-curator-aggiornamenti-raffinamenti-e-una-web-ui/</link>
					<comments>https://www.b0sh.net/2026/06/photoprism-ai-curator-aggiornamenti-raffinamenti-e-una-web-ui/#respond</comments>
		
		<dc:creator><![CDATA[bosh]]></dc:creator>
		<pubDate>Mon, 01 Jun 2026 09:08:26 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[automazione foto]]></category>
		<category><![CDATA[batch processing]]></category>
		<category><![CDATA[cache AI]]></category>
		<category><![CDATA[clustering descrizioni]]></category>
		<category><![CDATA[clustering semantico]]></category>
		<category><![CDATA[deduplicazione foto]]></category>
		<category><![CDATA[foto viaggio]]></category>
		<category><![CDATA[gallery AI]]></category>
		<category><![CDATA[LM Studio]]></category>
		<category><![CDATA[ollama]]></category>
		<category><![CDATA[organizzazione foto]]></category>
		<category><![CDATA[photo management]]></category>
		<category><![CDATA[photoprims curator]]></category>
		<category><![CDATA[ranking estetico]]></category>
		<category><![CDATA[self-hosted]]></category>
		<guid isPermaLink="false">https://www.b0sh.net/?p=4180</guid>

					<description><![CDATA[Qualche tempo fa ho scritto di aver costruito un selezionatore AI per PhotoPrism, un piccolo strumento che usa modelli locali per scegliere le foto migliori e creare album automatici. Il post originale raccontava il primo prototipo: ranking estetico puro, clustering semantico, e una CLI minimale. Da allora ho lavorato molto sul progetto, aggiungendo funzionalità, migliorando [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Qualche tempo fa ho scritto di aver costruito un <strong>selezionatore AI</strong> per PhotoPrism, un piccolo strumento che usa modelli locali per scegliere le foto migliori e creare album automatici. Il post originale raccontava il primo prototipo: ranking estetico puro, clustering semantico, e una CLI minimale.</p>



<p class="wp-block-paragraph">Da allora ho lavorato molto sul progetto, aggiungendo funzionalità, migliorando la stabilità e rendendo tutto più facile da usare. </p>



<h2 class="wp-block-heading">Da Ollama a Ollama <strong>e</strong> LM Studio</h2>



<p class="wp-block-paragraph">Una delle richiesta più comuni che ho visto in giro per progetti simili è la possibilità di usare backend diversi. Nel primo post parlavo solo di <strong>Ollama</strong> come backend AI. Ora lo strumento supporta anche <strong>LM Studio</strong>, con API OpenAI-compatibili.</p>



<p class="wp-block-paragraph">Che significa, in pratica? Se desideri avere più controllo e scelta di modelli, puoi usare LM Studio senza cambiare nulla nel flusso di lavoro. Nell&#8217;interfaccia web e nella CLI il passaggio è trasparente: basta cambiare il backend nei parametri e puntare all&#8217;URL del server corretto.</p>



<h2 class="wp-block-heading">Deduplicazione tempo e spazio, non solo semantica</h2>



<p class="wp-block-paragraph">Nel post originale parlavo di clustering semantico: le foto venivano raggruppate per similarità di descrizione e poi selezionate a rotazione per evitare ripetizioni. Funzionava, ma a volte finivo comunque con foto troppo simili, scattate nello stesso istante e nella stessa posizione.</p>



<p class="wp-block-paragraph">Ho aggiunto un secondo livello di <strong>deduplicazione temporale e geografica</strong>. Dopo la selezione iniziale, lo strumento rimuove automaticamente le foto che sono entro <strong>30 secondi</strong> e <strong>100 metri</strong> l&#8217;una dall&#8217;altra, tenendo sempre quella con il ranking estetico migliore.</p>



<p class="wp-block-paragraph">Il risultato è un album più vario, con meno &#8220;serie di foto quasi identiche&#8221; e più momenti distinti.</p>



<h2 class="wp-block-heading">Logging professionale con Logback</h2>



<p class="wp-block-paragraph">Il primo prototipo scriveva log in modo un po&#8217; artigianale, spesso su stdout o in file senza gestione. Per un tool che può girare automaticamente su grandi archivi, serve qualcosa di più robusto.</p>



<p class="wp-block-paragraph">Ora il progetto usa <strong>Logback</strong> con:</p>



<ul class="wp-block-list">
<li>logging su file (<code>logs/photoprism-ai.log</code>)</li>



<li>rotazione giornaliera</li>



<li>retention di 7 giorni</li>



<li>nessun output su stdout, tranne barre di progresso essenziali</li>
</ul>



<p class="wp-block-paragraph">Nel log trovi:</p>



<ul class="wp-block-list">
<li>prompt di clustering (DEBUG)</li>



<li>rimozioni per dedup temporale/spaziale (INFO)</li>



<li>nomi dei cluster finali (INFO)</li>
</ul>



<h2 class="wp-block-heading">Prompt emozionale e descrizioni più ricche</h2>



<p class="wp-block-paragraph">Uno dei problemi iniziali era che il modello multimodale produceva descrizioni troppo brevi o generiche, il che rendeva il clustering meno efficace.</p>



<p class="wp-block-paragraph">Ho:</p>



<ul class="wp-block-list">
<li>aumentato la descrizione a <strong>30 parole</strong> per ogni foto</li>



<li>introdotto un <strong>prompt emozionale</strong> più ricco, per spingere il modello a valutare anche composizione, originalità e &#8220;atmosfera&#8221;, non solo要素 tecnici</li>
</ul>



<p class="wp-block-paragraph">Il clustering ne beneficia molto: le categorie sono più pulite e coerenti.</p>



<h2 class="wp-block-heading">Batch, thread e performance</h2>



<p class="wp-block-paragraph">Nel primo post parlavo di timeout e latenza come principali colli di bottiglia. Ho fatto diversi affini:</p>



<ul class="wp-block-list">
<li>batch da <strong>30</strong> richieste per il clustering</li>



<li><strong>3 thread</strong> per il processing parallelo</li>



<li>caching più intelligente di <code>takenAt</code>, titolo, coordinate e luogo</li>



<li>retry automatico <strong>3×</strong> per le chiamate AI in caso di errore</li>
</ul>



<p class="wp-block-paragraph">Questi cambiamenti hanno reso il tool più stabile e veloce, soprattutto su archivi grandi.</p>



<h2 class="wp-block-heading">Barra di progresso e Web UI</h2>



<p class="wp-block-paragraph">La CLI funziona bene, ma per molti utenti un&#8217;interfaccia visuale è più comoda. Ho quindi sviluppato una <strong>Web UI leggera</strong> con:</p>



<ul class="wp-block-list">
<li>Javalin come server embedded</li>



<li>HTMX per dinamicità senza scrivere JavaScript complesso</li>



<li>una <strong>barra di progresso</strong> per il clustering, con conteggio batch in tempo reale</li>
</ul>



<p class="wp-block-paragraph">La Web UI permette di:</p>



<ul class="wp-block-list">
<li>scegliere mese singolo o anno intero</li>



<li>specificare quante foto selezionare</li>



<li>personalizzare il prompt di valutazione</li>



<li>scegliere il nome dell&#8217;album</li>
</ul>



<p class="wp-block-paragraph">Il form è semplice, ma copre tutti i casi d&#8217;uso principali.</p>



<h2 class="wp-block-heading">Modalità anno intero</h2>



<p class="wp-block-paragraph">Nel post originale parlavo solo di selezione per mese. Ora c&#8217;è anche una <strong>modalità anno intero</strong>: lo strumento processa tutti i 12 mesi in sequenza, accumulando le foto migliori di ogni mese in un unico album annuale.</p>



<p class="wp-block-paragraph">È utile per creare album tipo &#8220;Best of 2025&#8221; o &#8220;Viaggi 2025&#8221; senza dover lanciare manualmente 12 selezioni separate.</p>



<h2 class="wp-block-heading">Cache arricchita e pool temporaneo</h2>



<p class="wp-block-paragraph">La cache (<code>ai-cache.json</code>) ora conserva per ogni foto:</p>



<ul class="wp-block-list">
<li>score estetico</li>



<li>descrizione generata dall&#8217;AI</li>



<li>cluster assegnato</li>



<li>titolo, coordinate, <code>takenAt</code>, <code>placeLabel</code>, <code>placeCity</code>, <code>placeState</code>, <code>placeCountry</code></li>
</ul>



<p class="wp-block-paragraph">Il pool temporaneo pre-dedup viene salvato in <code>{albumName}.json</code>, utile per debug e analisi.</p>



<h2 class="wp-block-heading">CLI più flessibile</h2>



<p class="wp-block-paragraph">Oltre alla Web UI, la CLI è più potente:</p>



<pre class="wp-block-preformatted">bash<code><em># Mese singolo</em>
java -jar target/photoprism-ai-curator-1.0.1.jar \
  --no-web --mode month --month 1 --year 2026 \
  --count 20 --album "Mia Selezione"

<em># Anno intero</em>
java -jar target/photoprism-ai-curator-1.0.1.jar \
  --no-web --mode year --year 2026 \
  --count 20 --album "Best of 2026"

<em># Prompt personalizzato</em>
java -jar target/photoprism-ai-curator-1.0.1.jar \
  --no-web --mode month --month 1 --year 2026 \
  --count 20 \
  --prompt "Rate composition and originality"</code></pre>



<p class="wp-block-paragraph">Sono disponibili flag per:</p>



<ul class="wp-block-list">
<li>percorso del config file</li>



<li>forzatura modalità CLI</li>



<li>modalità mese/anno</li>



<li>mese, anno, conteggio foto</li>



<li>nome album</li>



<li>prompt di valutazione</li>
</ul>



<h2 class="wp-block-heading">Struttura del progetto</h2>



<p class="wp-block-paragraph">Il progetto è ora più maturo e meglio organizzato:</p>



<ul class="wp-block-list">
<li><code>AiBackend</code> come interfaccia comune per rating e clustering</li>



<li><code>OllamaClient</code> e <code>LmStudioClient</code> come implementazioni separate</li>



<li><code>PhotoFetcher</code>, <code>AISelector</code>, <code>AlbumManager</code>, <code>ImageHasher</code> come servizi puliti</li>



<li><code>WebServer</code> con Javalin + HTMX</li>



<li><code>JobContext</code> per lo stato thread-safe dei job</li>
</ul>



<p class="wp-block-paragraph">Tutto il codice è in Java 17+, con Maven, JUnit 5 e Mockito per i test.</p>



<h2 class="wp-block-heading">Perché questi aggiornamenti contano</h2>



<p class="wp-block-paragraph">Per me, il punto non è solo automatizzare una classifica di bellezza. Il vero valore sta nel:</p>



<ul class="wp-block-list">
<li>combinare <strong>giudizio estetico</strong>, <strong>varietà narrativa</strong> e <strong>vincoli pratici</strong></li>



<li>gestire cache, timeout e costi computazionali in modo intelligente</li>



<li>offrire un&#8217;alternativa locale e controllabile ai servizi cloud per la selezione foto</li>
</ul>



<p class="wp-block-paragraph">Con LM Studio, dedup tempo/spazio, Logback, Web UI e modalità anno intero, ritengo che il progetto sia oggi molto più pronto per l&#8217;uso quotidiano.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">Tutti i dettagli tecnici, commit e modifiche sono disponibili su <a rel="noreferrer noopener" target="_blank" href="https://github.com/b0sh-net/photoprism-ai-curator">GitHub</a>.<br>La commit history è qui: <a rel="noreferrer noopener" target="_blank" href="https://github.com/b0sh-net/photoprism-ai-curator/commits/master/">https://github.com/b0sh-net/photoprism-ai-curator/commits/master/</a>.</p>
<p><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F06%2Fphotoprism-ai-curator-aggiornamenti-raffinamenti-e-una-web-ui%2F&amp;linkname=PhotoPrism%20AI%20Curator%3A%20aggiornamenti%2C%20raffinamenti%20e%20una%20web%20UI" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F06%2Fphotoprism-ai-curator-aggiornamenti-raffinamenti-e-una-web-ui%2F&amp;linkname=PhotoPrism%20AI%20Curator%3A%20aggiornamenti%2C%20raffinamenti%20e%20una%20web%20UI" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_copy_link" href="https://www.addtoany.com/add_to/copy_link?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F06%2Fphotoprism-ai-curator-aggiornamenti-raffinamenti-e-una-web-ui%2F&amp;linkname=PhotoPrism%20AI%20Curator%3A%20aggiornamenti%2C%20raffinamenti%20e%20una%20web%20UI" title="Copy Link" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_flipboard" href="https://www.addtoany.com/add_to/flipboard?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F06%2Fphotoprism-ai-curator-aggiornamenti-raffinamenti-e-una-web-ui%2F&amp;linkname=PhotoPrism%20AI%20Curator%3A%20aggiornamenti%2C%20raffinamenti%20e%20una%20web%20UI" title="Flipboard" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.b0sh.net%2F2026%2F06%2Fphotoprism-ai-curator-aggiornamenti-raffinamenti-e-una-web-ui%2F&#038;title=PhotoPrism%20AI%20Curator%3A%20aggiornamenti%2C%20raffinamenti%20e%20una%20web%20UI" data-a2a-url="https://www.b0sh.net/2026/06/photoprism-ai-curator-aggiornamenti-raffinamenti-e-una-web-ui/" data-a2a-title="PhotoPrism AI Curator: aggiornamenti, raffinamenti e una web UI"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://www.b0sh.net/2026/06/photoprism-ai-curator-aggiornamenti-raffinamenti-e-una-web-ui/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4180</post-id>	</item>
		<item>
		<title>Ho costruito un selezionatore AI per scegliere le foto migliori da PhotoPrism</title>
		<link>https://www.b0sh.net/2026/05/ho-costruito-un-selezionatore-ai-per-scegliere-le-foto-migliori-da-photoprism/</link>
					<comments>https://www.b0sh.net/2026/05/ho-costruito-un-selezionatore-ai-per-scegliere-le-foto-migliori-da-photoprism/#respond</comments>
		
		<dc:creator><![CDATA[bosh]]></dc:creator>
		<pubDate>Sun, 24 May 2026 20:04:11 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[album fotografici]]></category>
		<category><![CDATA[clustering semantico]]></category>
		<category><![CDATA[computer vision]]></category>
		<category><![CDATA[fotografia]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[multimodal AI]]></category>
		<category><![CDATA[ollama]]></category>
		<category><![CDATA[organizzazione foto]]></category>
		<category><![CDATA[photoprims curator]]></category>
		<category><![CDATA[photoprism]]></category>
		<category><![CDATA[PhotoPrism API]]></category>
		<category><![CDATA[selezione foto]]></category>
		<category><![CDATA[self-hosted]]></category>
		<guid isPermaLink="false">https://www.b0sh.net/?p=4167</guid>

					<description><![CDATA[Tornare da un viaggio significa quasi sempre ritrovarsi con una quantità ingestibile di foto. Nel caso di Lisbona, il problema non era tanto archiviare gli scatti, quanto riuscire a estrarne una ventina davvero condivisibile: belle, sì, ma anche varie e capaci di raccontare l’esperienza nel suo insieme. PhotoPrism offriva già un’ottima base grazie a geolocalizzazione, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Tornare da un viaggio significa quasi sempre ritrovarsi con una quantità ingestibile di foto. Nel caso di Lisbona, il problema non era tanto archiviare gli scatti, quanto riuscire a estrarne una ventina davvero condivisibile: belle, sì, ma anche varie e capaci di raccontare l’esperienza nel suo insieme. PhotoPrism offriva già un’ottima base grazie a geolocalizzazione, riconoscimento facciale, label e strumenti di organizzazione, ma non aveva ancora un modo per comporre automaticamente un album con “le foto più belle” e soprattutto con sufficiente varietà.</p>



<p class="wp-block-paragraph">Da qui è nata l’idea di un selezionatore AI: una piccola applicazione Java che usa PhotoPrism per recuperare le miniature delle immagini e Ollama per far lavorare due modelli AI, uno multimodale per assegnare un punteggio estetico e produrre una descrizione oggettiva, e un secondo modello testuale per raggruppare semanticamente le foto e selezionarle con più equilibrio.</p>



<h2 class="wp-block-heading">Il problema vero non era la qualità</h2>



<p class="wp-block-paragraph">Il primo prototipo faceva una cosa molto semplice: prendere le foto da PhotoPrism, inviarle a un modello multimodale su Ollama e chiedere un voto estetico da 1 a 100 insieme a una breve descrizione. Sulla carta sembrava sufficiente, ma in pratica produceva una selezione monotona: immagini molto belle singolarmente, ma spesso troppo simili tra loro.</p>



<p class="wp-block-paragraph">Era il classico caso in cui un ranking puro ottimizza la qualità locale ma non la copertura narrativa. Se cinque foto dello stesso scorcio o dello stesso momento ricevono voti alti, un algoritmo ingenuo tende a sceglierle tutte. Per costruire un album da condividere, invece, non basta premiare le immagini migliori: bisogna anche evitare la ripetizione.</p>



<span id="more-4167"></span>



<h2 class="wp-block-heading">Dalla classifica ai cluster</h2>



<p class="wp-block-paragraph">La seconda iterazione ha quindi cambiato approccio. Invece di trattare il problema come una semplice classifica, il tool ha iniziato a ragionare per gruppi: ogni foto riceve una descrizione oggettiva dal modello visivo, e queste descrizioni vengono poi analizzate da un secondo modello text-only per creare cluster di immagini semanticamente simili.</p>



<p class="wp-block-paragraph">In questo modo la selezione finale non è più dominata da un unico soggetto o da una sola scena. Il sistema sceglie a rotazione le migliori foto da cluster diversi, così da conservare un livello qualitativo alto senza sacrificare la varietà. È un cambiamento piccolo da spiegare, ma sostanziale nel risultato: da “le più belle” a “le più belle che, insieme, raccontano meglio il viaggio”.</p>



<h2 class="wp-block-heading">Il collo di bottiglia era la latenza</h2>



<p class="wp-block-paragraph">La parte più difficile non è stata immaginare la pipeline, ma farla funzionare in tempi accettabili. Creare i cluster su un numero elevato di immagini si è rivelato più costoso del previsto, soprattutto per il tempo necessario a far processare le descrizioni dal modello. Per questo la pipeline è stata spezzata in blocchi parziali, poi riunificati in una fase finale di merge, così da ridurre il costo operativo del clustering su un set grande.</p>



<p class="wp-block-paragraph">Anche così, però, i timeout continuavano a essere un problema reale. La svolta è arrivata intervenendo direttamente sulle chiamate verso Ollama: per il modello dedicato al clustering è stata disabilitata la fase di thinking, usando richieste batch con <code>think:false</code>, così da evitare lunghi passaggi riflessivi non necessari per questo tipo di compito. È stata la scelta risolutiva, soprattutto con i modelli Qwen, che tendono ad avere una fase riflessiva di default piuttosto lunga.<a rel="noreferrer noopener" target="_blank" href="https://opencode.ai/docs/"></a></p>



<h2 class="wp-block-heading">Cosa fa la prima beta</h2>



<p class="wp-block-paragraph">La prima beta, pubblicata come <strong>PhotoPrism AI Curator</strong>, automatizza l’intero flusso: scarica le miniature delle foto da PhotoPrism, invia ciascuna miniatura a Ollama con un modello multimodale per ottenere un punteggio estetico e una descrizione, raggruppa le immagini per similarità semantica tramite un secondo modello text-only, seleziona a rotazione le migliori da ciascun gruppo e crea infine un album direttamente in PhotoPrism. Questa architettura è coerente con le capacità offerte da PhotoPrism per organizzazione, persone e label, e con il ruolo di Ollama come runtime locale per modelli diversi nello stesso workflow.</p>



<p class="wp-block-paragraph">Il progetto include anche una modalità “anno intero”, che processa tutti i dodici mesi in sequenza e accumula le migliori foto mensili in un unico album annuale. È una funzione semplice da descrivere ma molto pratica per chi usa PhotoPrism come archivio personale continuo e non vuole lavorare manualmente mese per mese.</p>



<h2 class="wp-block-heading">Stack e funzionamento</h2>



<p class="wp-block-paragraph">Dal punto di vista tecnico, il progetto richiede Java 17+, Maven, un’istanza PhotoPrism con API attiva e Ollama con almeno due modelli: uno multimodale per l’analisi visiva, come <code>minicpm-v</code>, <code>llava</code> o <code>moondream</code>, e uno text-only per il clustering delle descrizioni, come <code>qwen3.5:4b</code> o <code>llama3.2:3b</code>. In alternativa è possibile usare un solo modello capace di gestire sia input visivi sia generazione testuale pura, ma l’architettura pensata per la beta separa chiaramente valutazione estetica e clustering semantico.</p>



<p class="wp-block-paragraph">L’applicazione si compila con Maven, legge la configurazione da <code>config.properties</code> e consente di impostare URL e token di PhotoPrism, endpoint Ollama, modelli da usare, prompt di valutazione, file di cache e timeout per connessione, rating e clustering. Il fatto di mantenere una cache locale delle valutazioni in <code>ai-cache.json</code> è importante, perché evita di ripetere inferenze costose su immagini già processate e rende molto più sopportabile l’uso iterativo durante i test.</p>



<h2 class="wp-block-heading">Web UI invece di solo CLI</h2>



<p class="wp-block-paragraph">Un aspetto interessante della beta è che non si ferma alla linea di comando. Il progetto espone anche una piccola interfaccia web embedded, avviabile direttamente dal JAR, costruita con Javalin lato server e HTMX nel frontend, una scelta leggera ma molto sensata per questo tipo di utility locale. L’interfaccia permette di scegliere se elaborare un mese singolo o l’intero anno, indicare quante foto selezionare, personalizzare il prompt di valutazione e decidere il nome dell’album finale.</p>



<p class="wp-block-paragraph">Questa parte è importante anche narrativamente, perché mostra che il progetto non è solo una prova tecnica. C’è già il tentativo di trasformare uno script nato per uso personale in uno strumento riutilizzabile, con uno stato di job thread-safe e una UX minima ma concreta.</p>



<h2 class="wp-block-heading">Struttura del progetto</h2>



<p class="wp-block-paragraph">La struttura del repository rende abbastanza chiara l’evoluzione del tool. I client separano le API di PhotoPrism e Ollama, i service isolano fetch delle foto, logica di selezione, hashing e gestione degli album, mentre il pacchetto web contiene il server e il contesto di esecuzione dei job. È una divisione ordinata che aiuta a leggere il progetto come una pipeline composta da fasi distinte: raccolta, valutazione, raggruppamento, selezione, pubblicazione.</p>



<p class="wp-block-paragraph">In breve, l’albero principale comprende <code>App.java</code> come entry point, una configurazione dedicata, model per foto e album, client per PhotoPrism e Ollama, service per selezione e gestione operativa, e una web UI HTMX servita da Javalin. Anche la scelta di usare JUnit 5 e Mockito per i test indica che la beta non è soltanto un esperimento estemporaneo, ma un progetto già pensato per crescere.</p>



<h2 class="wp-block-heading">Perché mi interessava davvero</h2>



<p class="wp-block-paragraph">La cosa più interessante di questo progetto non è tanto aver fatto scegliere delle foto a un’AI. Il punto è aver trasformato un problema quotidiano e noioso — rientrare da un viaggio e dover setacciare centinaia di immagini quasi uguali — in una pipeline locale, controllabile e compatibile con strumenti self-hosted già esistenti.</p>



<p class="wp-block-paragraph">PhotoPrism sa già dove sono state scattate le foto, chi compare nelle immagini e quali label possono descriverle, ma il salto verso una vera selezione richiede qualcosa in più: un giudizio estetico, una nozione minima di varietà e una serie di compromessi pratici su latenza, timeout e costo computazionale. È proprio in quel punto, tra metadata e gusto, che questo selezionatore AI prova a inserirsi.</p>



<h2 class="wp-block-heading">Come provarlo</h2>



<p class="wp-block-paragraph">Per compilare la beta basta clonare il repository, copiare <code>config.properties.example</code> in <code>config.properties</code>, inserire i dati della propria istanza PhotoPrism e di Ollama e lanciare <code>mvn clean package</code>. A quel punto si può avviare il JAR in modalità web oppure usare la CLI con il file di configurazione passato esplicitamente.</p>



<pre class="wp-block-preformatted">bash<code>git clone &lt;url-repo&gt;
cd photoprism-ai-curator
cp config.properties.example config.properties
<em># modifica config.properties con i tuoi dati</em>
mvn clean package
java -jar target/photoprism-ai-curator-1.0.0.jar</code></pre>



<p class="wp-block-paragraph">Una volta aperta l’interfaccia web su <code>http://localhost:8080</code>, il flusso è lineare: scegliere il periodo, indicare il numero di foto desiderate, adattare eventualmente il prompt di valutazione e lasciare che il sistema costruisca l’album finale dentro PhotoPrism.</p>



<h2 class="wp-block-heading">Cosa può diventare</h2>



<p class="wp-block-paragraph">Questa prima beta risolve già il problema più concreto: ridurre una massa di foto a una selezione più pulita, più varia e più condivisibile. Ma lascia intravedere sviluppi interessanti, come criteri di selezione personalizzabili per tipo di viaggio, un bilanciamento più esplicito tra soggetti, luoghi e momenti, oppure un uso più intelligente dei metadata di PhotoPrism per influenzare il clustering e la rotazione finale.</p>



<p class="wp-block-paragraph">Il progetto è già disponibile in una prima beta su GitHub, qui: <a href="https://github.com/b0sh-net/photoprism-ai-curator" target="_blank" rel="noreferrer noopener">b0sh-net/photoprism-ai-curator</a>. Dentro al repository ci sono codice, istruzioni di compilazione, configurazione di PhotoPrism e Ollama, oltre alla piccola interfaccia web che ho costruito per rendere il flusso più comodo da usare.</p>
<p><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F05%2Fho-costruito-un-selezionatore-ai-per-scegliere-le-foto-migliori-da-photoprism%2F&amp;linkname=Ho%20costruito%20un%20selezionatore%20AI%20per%20scegliere%20le%20foto%20migliori%20da%20PhotoPrism" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F05%2Fho-costruito-un-selezionatore-ai-per-scegliere-le-foto-migliori-da-photoprism%2F&amp;linkname=Ho%20costruito%20un%20selezionatore%20AI%20per%20scegliere%20le%20foto%20migliori%20da%20PhotoPrism" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_copy_link" href="https://www.addtoany.com/add_to/copy_link?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F05%2Fho-costruito-un-selezionatore-ai-per-scegliere-le-foto-migliori-da-photoprism%2F&amp;linkname=Ho%20costruito%20un%20selezionatore%20AI%20per%20scegliere%20le%20foto%20migliori%20da%20PhotoPrism" title="Copy Link" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_flipboard" href="https://www.addtoany.com/add_to/flipboard?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F05%2Fho-costruito-un-selezionatore-ai-per-scegliere-le-foto-migliori-da-photoprism%2F&amp;linkname=Ho%20costruito%20un%20selezionatore%20AI%20per%20scegliere%20le%20foto%20migliori%20da%20PhotoPrism" title="Flipboard" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.b0sh.net%2F2026%2F05%2Fho-costruito-un-selezionatore-ai-per-scegliere-le-foto-migliori-da-photoprism%2F&#038;title=Ho%20costruito%20un%20selezionatore%20AI%20per%20scegliere%20le%20foto%20migliori%20da%20PhotoPrism" data-a2a-url="https://www.b0sh.net/2026/05/ho-costruito-un-selezionatore-ai-per-scegliere-le-foto-migliori-da-photoprism/" data-a2a-title="Ho costruito un selezionatore AI per scegliere le foto migliori da PhotoPrism"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://www.b0sh.net/2026/05/ho-costruito-un-selezionatore-ai-per-scegliere-le-foto-migliori-da-photoprism/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4167</post-id>	</item>
		<item>
		<title>OpenHuman: promesse grandi, prova sul campo deludente</title>
		<link>https://www.b0sh.net/2026/05/openhuman-promesse-grandi-prova-sul-campo-deludente/</link>
					<comments>https://www.b0sh.net/2026/05/openhuman-promesse-grandi-prova-sul-campo-deludente/#respond</comments>
		
		<dc:creator><![CDATA[bosh]]></dc:creator>
		<pubDate>Sun, 17 May 2026 13:43:03 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[agenti AI]]></category>
		<category><![CDATA[AI locale]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[llm]]></category>
		<category><![CDATA[ollama]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Open WebUI]]></category>
		<category><![CDATA[OpenHuman]]></category>
		<category><![CDATA[openrouter]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[review software]]></category>
		<category><![CDATA[windows]]></category>
		<guid isPermaLink="false">https://www.b0sh.net/?p=4159</guid>

					<description><![CDATA[Ho testato OpenHuman in più scenari, da Fedora in VM a Windows con GPU, passando per Ollama, Open WebUI e OpenRouter. Il risultato è stato deludente: installazioni instabili, configurazioni poco trasparenti, dipendenze cloud poco chiare e nessuna esperienza davvero affidabile nell’uso reale.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Ho provato OpenHuman con l’idea di testare un progetto che, sulla carta, sembra voler portare gli agenti AI locali un passo più in là. Il risultato, però, è stato molto meno entusiasmante del racconto che accompagna il repository: installazione rapida, avvio instabile, integrazioni confuse e, alla fine, nessuna esperienza davvero solida da portare a casa.</p>



<p class="wp-block-paragraph">La prova più interessante non è stata nemmeno il primo avvio fallito su Fedora in VM, ma il confronto tra ambienti diversi. Su una macchina fisica Windows con GPU, OpenHuman parte; appena si entra nel flusso di configurazione, però, emergono subito domande poco rassicuranti: login cloud richiesto, collegamento Gmail mediato da un servizio terzo, e una catena di dipendenze che rende il concetto di “locale” molto più sfumato di quanto il marketing lasci intendere.</p>



<h2 class="wp-block-heading" id="un-progetto-che-promette-molto">Un progetto che promette molto</h2>



<p class="wp-block-paragraph">OpenHuman si presenta come un assistente personale AI locale, capace di integrarsi con servizi esterni, gestire memoria e collegarsi a modelli LLM sia in locale sia in cloud. Il pitch è forte: un agente “human-centric”, pronto a conoscersi in pochi minuti e a diventare parte del flusso di lavoro quotidiano.</p>



<p class="wp-block-paragraph">Ed è proprio qui che nasce il problema. Più la promessa è ambiziosa, più ci si aspetta che il setup sia semplice, trasparente e affidabile. Invece la mia esperienza è stata l’opposto: ogni passo sembrava introdurre un nuovo livello di complessità, spesso non spiegato bene all’utente.</p>



<h2 class="wp-block-heading" id="fedora-in-vm-crash-errori-e-packaging-fragile">Fedora in VM: crash, errori e packaging fragile</h2>



<p class="wp-block-paragraph">Il primo test è stato su Fedora in macchina virtuale. Qui OpenHuman ha mostrato subito il suo lato più fragile. L’installazione è partita velocemente, ma all’avvio il programma non è riuscito a completare il bootstrap in modo stabile. I log hanno iniziato a restituire errori diversi a ogni tentativo, e questo è già di per sé un pessimo segnale.</p>



<p class="wp-block-paragraph">Tra i messaggi più significativi c’erano:</p>



<pre class="wp-block-preformatted">text<code>VMware: No 3D enabled</code></pre>



<p class="wp-block-paragraph">e soprattutto:</p>



<pre class="wp-block-preformatted">text<code>Error initializing NSS with a persistent database
version `NSSUTIL_3.108' not found
FATAL: nss_error=-5925</code></pre>



<p class="wp-block-paragraph">In pratica, il pacchetto distribuiva librerie incompatibili con quelle presenti sul sistema. Il risultato non era solo un crash, ma un crash dovuto a un conflitto abbastanza banale da sembrare quasi un errore di packaging elementare. Ho provato anche a forzare l’esecuzione con estrazione manuale dell’AppImage, variabili ambientali diverse e disabilitazione della GPU, ma senza successo.</p>



<p class="wp-block-paragraph">A quel punto il problema non era più il singolo workaround: era il fatto che il software, su una configurazione abbastanza comune come Fedora in VM, falliva in modo ripetuto e poco affidabile.</p>



<h2 class="wp-block-heading" id="windows-con-gpu-parte-ma-non-convince">Windows con GPU: parte, ma non convince</h2>



<p class="wp-block-paragraph">Su una macchina fisica Windows con GPU, OpenHuman si installa e si avvia. Questo però non ha risolto il mio giudizio, anzi lo ha reso più netto. La prima sorpresa è stata la richiesta di un login cloud già al primo avvio, cosa che stride parecchio con l’immagine di applicazione locale e privacy-oriented.</p>



<p class="wp-block-paragraph">Poi è arrivata la richiesta di collegare Gmail attraverso un target chiamato <strong>Composio</strong>. Il problema non è solo tecnico, ma concettuale: non viene spiegato chiaramente perché un software che si presenta come locale debba passare da una terza parte esterna per accedere alle mail. Per me questa è una soglia di fiducia importante, e senza una spiegazione trasparente il risultato è un semplice “no”.</p>



<h2 class="wp-block-heading" id="skip-s-utilit-poca">Skip sì, utilità poca</h2>



<p class="wp-block-paragraph">C’è un pulsante tipo “skip for now”, quindi in teoria si può andare avanti anche senza concedere tutto subito. In pratica bisogna insistere un po’, ma alla fine si entra davvero nell’app.</p>



<p class="wp-block-paragraph">Il punto è un altro: <strong>se rifiuti di dare accesso a terze parti, OpenHuman resta davvero utile?</strong> Questa è la domanda centrale. Perché le funzioni più interessanti sembrano vivere proprio nel punto di incontro tra app locale, account cloud e servizi esterni. Se togli quella parte, resta un guscio molto meno significativo rispetto a quanto il progetto promette.</p>



<h2 class="wp-block-heading" id="ollama-open-webui-e-openrouter-altre-prove-fallite">Ollama, Open WebUI e OpenRouter: altre prove fallite</h2>



<p class="wp-block-paragraph">A questo punto ho provato a portare il tutto sul terreno più favorevole possibile: accesso LLM locale via Ollama, poi Open WebUI come eventuale router/proxy, e infine OpenRouter per testare anche una strada cloud.</p>



<p class="wp-block-paragraph">Il risultato è stato sempre negativo. Con Ollama non arrivava nessuna risposta in chat e <code>ollama ps</code> non mostrava modelli caricati. Con Open WebUI, usando impostazioni che con altre applicazioni funzionano correttamente, il backend restava silenzioso. Con OpenRouter non è cambiato nulla: le richieste non apparivano neppure nei log.</p>



<p class="wp-block-paragraph">Questo è stato probabilmente il segnale più chiaro di tutti. Non si tratta di un singolo provider da sistemare o di una configurazione da rifinire. Il problema sembra stare nel modo in cui OpenHuman orchestra il tutto: integrazione, routing, backend, richieste. Se la pipeline non produce neppure tracce nei log, la sensazione è che la superficie sia più avanzata della sostanza.</p>



<h2 class="wp-block-heading" id="perch-tante-stelline">Perché tante stelline?</h2>



<p class="wp-block-paragraph">La domanda, a questo punto, viene naturale: come fa un software così approssimativo a ottenere tante stelline su GitHub?</p>



<p class="wp-block-paragraph">La risposta probabilmente non è misteriosa: oggi molti progetti AI vendono prima l’idea e solo dopo il prodotto. Bastano un README convincente, una roadmap ambiziosa, qualche schermata accattivante e un paio di video ben fatti per generare entusiasmo. In molti casi il pubblico non prova davvero il software in scenari normali, oppure lo fa per pochi minuti in condizioni ideali.</p>



<p class="wp-block-paragraph">OpenHuman mi sembra rientrare proprio in questa categoria: molto forte sul piano narrativo, molto più debole nella prova concreta. E quando il marketing corre parecchio avanti rispetto alla maturità reale del codice, le stelline diventano un indicatore meno affidabile di quanto sembri.</p>



<h2 class="wp-block-heading" id="verdetto-attuale">Verdetto attuale</h2>



<p class="wp-block-paragraph">Per ora la valutazione è negativa. Non perché il progetto sia “senza idea”, ma perché l’idea è venduta come se fosse già matura, mentre nella pratica l’esperienza è fragile, poco trasparente e inadatta a un uso sereno.</p>



<p class="wp-block-paragraph">Il test su Fedora in VM è fallito. Il test su Windows è partito ma ha introdotto dubbi sostanziali sulla privacy e sulle dipendenze cloud. I tentativi con Ollama, Open WebUI e OpenRouter non hanno migliorato il quadro. Il risultato complessivo è un software che promette molto, ma che al momento convince poco.</p>



<p class="wp-block-paragraph">Disinstallerò OpenHuman e disconnetterò l’account. Per ora, almeno nel mio uso, resta un progetto interessante da osservare, ma non ancora uno strumento davvero affidabile.</p>
<p><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F05%2Fopenhuman-promesse-grandi-prova-sul-campo-deludente%2F&amp;linkname=OpenHuman%3A%20promesse%20grandi%2C%20prova%20sul%20campo%20deludente" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F05%2Fopenhuman-promesse-grandi-prova-sul-campo-deludente%2F&amp;linkname=OpenHuman%3A%20promesse%20grandi%2C%20prova%20sul%20campo%20deludente" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_copy_link" href="https://www.addtoany.com/add_to/copy_link?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F05%2Fopenhuman-promesse-grandi-prova-sul-campo-deludente%2F&amp;linkname=OpenHuman%3A%20promesse%20grandi%2C%20prova%20sul%20campo%20deludente" title="Copy Link" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_flipboard" href="https://www.addtoany.com/add_to/flipboard?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F05%2Fopenhuman-promesse-grandi-prova-sul-campo-deludente%2F&amp;linkname=OpenHuman%3A%20promesse%20grandi%2C%20prova%20sul%20campo%20deludente" title="Flipboard" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.b0sh.net%2F2026%2F05%2Fopenhuman-promesse-grandi-prova-sul-campo-deludente%2F&#038;title=OpenHuman%3A%20promesse%20grandi%2C%20prova%20sul%20campo%20deludente" data-a2a-url="https://www.b0sh.net/2026/05/openhuman-promesse-grandi-prova-sul-campo-deludente/" data-a2a-title="OpenHuman: promesse grandi, prova sul campo deludente"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://www.b0sh.net/2026/05/openhuman-promesse-grandi-prova-sul-campo-deludente/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4159</post-id>	</item>
		<item>
		<title>Ha ancora senso usare N8N? Un esperimento con Gemini CLI mi ha fatto cambiare idea</title>
		<link>https://www.b0sh.net/2026/04/ha-ancora-senso-usare-n8n-un-esperimento-con-gemini-cli-mi-ha-fatto-cambiare-idea/</link>
					<comments>https://www.b0sh.net/2026/04/ha-ancora-senso-usare-n8n-un-esperimento-con-gemini-cli-mi-ha-fatto-cambiare-idea/#respond</comments>
		
		<dc:creator><![CDATA[bosh]]></dc:creator>
		<pubDate>Sat, 25 Apr 2026 14:47:07 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[gemini]]></category>
		<category><![CDATA[geminiCli]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[n8n]]></category>
		<category><![CDATA[whisper]]></category>
		<guid isPermaLink="false">https://www.b0sh.net/?p=4142</guid>

					<description><![CDATA[Per chi mi segue da un po&#8217;, sa che ho usato N8N come strumento di riferimento ogni volta che volevo integrare l&#8217;AI in un processo senza scrivere codice da zero. Workflow visivi, nodi preconfigurati, integrazioni pronte: per prototipare rapidamente è stato spesso la scelta giusta. Ma ultimamente mi sono fatto una domanda: ha ancora senso [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Per chi mi segue da un po&#8217;, sa che ho usato <a rel="noreferrer noopener" target="_blank" href="https://www.b0sh.net/tag/n8n/">N8N</a> come strumento di riferimento ogni volta che volevo integrare l&#8217;AI in un processo senza scrivere codice da zero. Workflow visivi, nodi preconfigurati, integrazioni pronte: per prototipare rapidamente è stato spesso la scelta giusta.</p>



<p class="wp-block-paragraph">Ma ultimamente mi sono fatto una domanda: <strong>ha ancora senso usare N8N nel 2026, ora che gli strumenti di codifica AI sono diventati così potenti?</strong></p>



<h2 class="wp-block-heading" id="lesperimento">L&#8217;esperimento</h2>



<p class="wp-block-paragraph">Avevo un workflow N8N che usavo per trascrivere e sintetizzare registrazioni video — niente di esoterico, ma un processo abbastanza articolato: estrazione audio, chiamata a un modello di trascrizione, sintesi con un LLM, output strutturato. Funzionava, ma con i suoi limiti: dimensione massima dei file in ingresso, dipendenza dall&#8217;infrastruttura N8N, e quella sensazione di lavorare &#8220;dentro una scatola&#8221;.</p>



<p class="wp-block-paragraph">Ho deciso di provare a riscrivere l&#8217;intero flusso come programma standalone. Gli strumenti? <strong>Gemini CLI</strong> come agente di codifica, il JSON del workflow N8N come specifica di partenza, e un prompt abbastanza dettagliato su cosa volessi ottenere.</p>



<h2 class="wp-block-heading" id="il-risultato-che-mi-ha-sorpreso">Il risultato (che mi ha sorpreso)</h2>



<p class="wp-block-paragraph">In <strong>poche decine di minuti</strong> avevo un programma funzionante da riga di comando. Non un prototipo traballante: un tool che funziona <em>meglio</em> del workflow N8N originale, senza i limiti sulla dimensione dei file e con un controllo molto più diretto su ogni fase del processo.</p>



<p class="wp-block-paragraph">Ho scelto deliberatamente la CLI perché l&#8217;uso che immagino è locale e sporadico — nessun senso di tirar su un&#8217;infrastruttura per qualcosa che uso una volta alla settimana. Ma sarebbe stato altrettanto semplice chiedere a Gemini CLI di generare un&#8217;app che espone un webservice: il delta di complessità sarebbe stato minimo.</p>



<p class="wp-block-paragraph">La cosa che mi ha colpito di più non è tanto la velocità, ma <strong>quanto sia stato naturale usare il JSON di N8N come prompt implicito</strong>. Il workflow descriveva già la logica del processo in modo strutturato; Gemini ha semplicemente tradotto quella struttura in codice Java coerente e funzionante.</p>



<h2 class="wp-block-heading" id="cosa-cambia-e-cosa-no">Cosa cambia (e cosa no)</h2>



<p class="wp-block-paragraph">N8N rimane uno strumento valido per certi scenari: team non tecnici, integrazioni con decine di servizi SaaS, processi che devono girare su scheduler senza infrastruttura dedicata. Non sto dicendo che sia morto.</p>



<p class="wp-block-paragraph">Ma per chi sa usare il terminale e ha accesso a un buon agente di codifica AI, <strong>il vantaggio principale di N8N — abbassare la barriera tecnica — si è assottigliato enormemente</strong>. Il codice generato è leggibile, manutenibile, e non ha i vincoli architetturali di una piattaforma generalista.</p>



<h2 class="wp-block-heading" id="il-codice--pubblico">Il codice è pubblico</h2>



<p class="wp-block-paragraph">Ho pubblicato tutto su GitHub: codice sorgente, workflow N8N originale e il prompt iniziale che ho passato a Gemini CLI.</p>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a rel="noreferrer noopener" target="_blank" href="https://github.com/b0sh-net/VideoToMemo">github.com/b0sh-net/VideoToMemo</a></p>



<p class="wp-block-paragraph">Se vuoi replicare l&#8217;esperimento o adattarlo a un tuo caso d&#8217;uso, tutto quello che ti serve è lì. Sono curioso di sapere se anche voi avete fatto ragionamenti simili su N8N o su altri strumenti di automazione visuale — scrivetemi nei commenti.</p>
<p><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Fha-ancora-senso-usare-n8n-un-esperimento-con-gemini-cli-mi-ha-fatto-cambiare-idea%2F&amp;linkname=Ha%20ancora%20senso%20usare%20N8N%3F%20Un%20esperimento%20con%20Gemini%20CLI%20mi%20ha%20fatto%20cambiare%20idea" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Fha-ancora-senso-usare-n8n-un-esperimento-con-gemini-cli-mi-ha-fatto-cambiare-idea%2F&amp;linkname=Ha%20ancora%20senso%20usare%20N8N%3F%20Un%20esperimento%20con%20Gemini%20CLI%20mi%20ha%20fatto%20cambiare%20idea" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_copy_link" href="https://www.addtoany.com/add_to/copy_link?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Fha-ancora-senso-usare-n8n-un-esperimento-con-gemini-cli-mi-ha-fatto-cambiare-idea%2F&amp;linkname=Ha%20ancora%20senso%20usare%20N8N%3F%20Un%20esperimento%20con%20Gemini%20CLI%20mi%20ha%20fatto%20cambiare%20idea" title="Copy Link" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_flipboard" href="https://www.addtoany.com/add_to/flipboard?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Fha-ancora-senso-usare-n8n-un-esperimento-con-gemini-cli-mi-ha-fatto-cambiare-idea%2F&amp;linkname=Ha%20ancora%20senso%20usare%20N8N%3F%20Un%20esperimento%20con%20Gemini%20CLI%20mi%20ha%20fatto%20cambiare%20idea" title="Flipboard" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Fha-ancora-senso-usare-n8n-un-esperimento-con-gemini-cli-mi-ha-fatto-cambiare-idea%2F&#038;title=Ha%20ancora%20senso%20usare%20N8N%3F%20Un%20esperimento%20con%20Gemini%20CLI%20mi%20ha%20fatto%20cambiare%20idea" data-a2a-url="https://www.b0sh.net/2026/04/ha-ancora-senso-usare-n8n-un-esperimento-con-gemini-cli-mi-ha-fatto-cambiare-idea/" data-a2a-title="Ha ancora senso usare N8N? Un esperimento con Gemini CLI mi ha fatto cambiare idea"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://www.b0sh.net/2026/04/ha-ancora-senso-usare-n8n-un-esperimento-con-gemini-cli-mi-ha-fatto-cambiare-idea/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4142</post-id>	</item>
		<item>
		<title>Phone-whisper: trascrizione audio offline su Android con sherpa-onnx</title>
		<link>https://www.b0sh.net/2026/04/phone-whisper-trascrizione-audio-offline-su-android-con-sherpa-onnx/</link>
					<comments>https://www.b0sh.net/2026/04/phone-whisper-trascrizione-audio-offline-su-android-con-sherpa-onnx/#respond</comments>
		
		<dc:creator><![CDATA[bosh]]></dc:creator>
		<pubDate>Sun, 19 Apr 2026 14:07:24 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[gemini-cli]]></category>
		<category><![CDATA[parakeet]]></category>
		<category><![CDATA[phone-whisper]]></category>
		<category><![CDATA[qwen]]></category>
		<category><![CDATA[sherpa-onnx]]></category>
		<category><![CDATA[STT]]></category>
		<guid isPermaLink="false">https://www.b0sh.net/?p=4127</guid>

					<description><![CDATA[Se hai mai avuto bisogno di trascrivere una nota vocale, un&#8217;intervista o un audio WhatsApp direttamente sul tuo smartphone — senza mandare nulla in cloud, senza abbonamenti, senza privacy violata — allora questo progetto fa per te. phone-whisper è un&#8217;app Android open source che ho sviluppato a partire da un fork di un progetto esistente, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Se hai mai avuto bisogno di trascrivere una nota vocale, un&#8217;intervista o un audio WhatsApp direttamente sul tuo smartphone — senza mandare nulla in cloud, senza abbonamenti, senza privacy violata — allora questo progetto fa per te.</p>



<p class="wp-block-paragraph"><strong>phone-whisper</strong> è un&#8217;app Android open source che ho sviluppato a partire da un fork di un progetto esistente, riprogettandola per fare una cosa sola ma fatta bene: <strong>trascrivere file audio condivisi direttamente sul dispositivo</strong>, in modo completamente locale.</p>



<h2 class="wp-block-heading" id="da-dove-nasce-il-progetto">Da dove nasce il progetto</h2>



<p class="wp-block-paragraph">Il punto di partenza è stato un progetto open source che sfruttava il riconoscimento vocale via microfono. L&#8217;idea di base mi piaceva, ma quello che mi serviva era diverso: volevo poter condividere un file audio da qualsiasi app — WhatsApp, Files, un registratore vocale — e ottenere la trascrizione in pochi secondi, tutto offline.</p>



<p class="wp-block-paragraph">Ho quindi forkato il progetto e ho iniziato ad adattarlo, usando strumenti di intelligenza artificiale come <strong>Gemini CLI</strong> e <strong>Qwen Code</strong> per accelerare il refactoring e la riscrittura delle funzionalità principali. L&#8217;AI è stata preziosa per navigare una codebase che non conoscevo a fondo e per generare rapidamente le modifiche necessarie all&#8217;integrazione con il sistema di condivisione di Android.</p>



<h2 class="wp-block-heading" id="il-debugging-quando-la-trascrizione-locale-non-fun">Il debugging: quando la trascrizione locale non funzionava</h2>



<p class="wp-block-paragraph">Qui le cose si sono fatte interessanti. Il sistema di trascrizione locale del progetto originale non funzionava in modo affidabile — o meglio, non funzionava affatto nel mio caso. Dopo varie sessioni di debug, ho capito che la soluzione più stabile era integrare direttamente <strong><a rel="noreferrer noopener" target="_blank" href="https://github.com/k2-fsa/sherpa-onnx/">sherpa-onnx</a></strong>, una libreria di inferenza vocale offline estremamente performante, sviluppata dal team k2-fsa.</p>



<p class="wp-block-paragraph">Il problema? Non potevo semplicemente aggiungere la dipendenza tramite Gradle come si farebbe normalmente. Ho dovuto includere la libreria <strong>direttamente come file <code>.aar</code></strong> all&#8217;interno del progetto, per garantire compatibilità e controllo sulla versione esatta utilizzata.</p>



<p class="wp-block-paragraph">E proprio le versioni sono state un altro grattacapo: l&#8217;ultima release di sherpa-onnx al momento dello sviluppo (la <strong>v1.12.39</strong>) aveva un&#8217;interfaccia pubblica diversa rispetto a quella pensata per il progetto originale. Questo ha richiesto ulteriori modifiche ai metodi di comunicazione tra i componenti, ma alla fine tutto ha trovato il suo posto.</p>



<h2 class="wp-block-heading" id="come-funziona-oggi">Come funziona oggi</h2>



<p class="wp-block-paragraph">La release <strong><a rel="noreferrer noopener" target="_blank" href="https://github.com/b0sh-net/phone-whisper/releases/tag/0.4.4">0.4.4</a></strong> è stabile e funzionante. Il flusso d&#8217;uso è semplice:</p>



<ol class="wp-block-list">
<li>Condividi un file audio da qualsiasi app verso phone-whisper</li>



<li>L&#8217;app avvia la trascrizione in locale, senza connessione internet</li>



<li>Ottieni il testo trascritto direttamente sul dispositivo</li>
</ol>



<p class="wp-block-paragraph">Per ottenere i migliori risultati con <strong>audio in italiano</strong>, consiglio di utilizzare il modello <strong>Parakeet 0.6B</strong>: offre un ottimo equilibrio tra qualità della trascrizione e dimensioni del modello.</p>



<h2 class="wp-block-heading" id="una-cosa-importante-sullinstallazione-del-modello">Una cosa importante sull&#8217;installazione del modello</h2>



<p class="wp-block-paragraph">Il primo avvio richiede il download e l&#8217;installazione del modello linguistico, che può richiedere qualche minuto. <strong>Non interrompere il processo</strong>: farlo potrebbe corrompere l&#8217;installazione e rendere l&#8217;app non funzionante. Se dovesse succedere, è necessario cancellare i dati dell&#8217;applicazione dalle impostazioni di Android per poter ripetere l&#8217;installazione da capo.</p>



<h2 class="wp-block-heading" id="conclusioni-e-link-utili">Conclusioni e link utili</h2>



<p class="wp-block-paragraph">phone-whisper nasce da un&#8217;esigenza reale, da un po&#8217; di debugging ostinato e dall&#8217;aiuto — sempre più indispensabile — degli strumenti AI per muoversi velocemente in territorio inesplorato. È un progetto piccolo, ma funziona, è privato by design e gira interamente sul tuo telefono.</p>



<ul class="wp-block-list">
<li><strong>Repository GitHub:</strong> <a href="https://github.com/b0sh-net/phone-whisper" target="_blank" rel="noreferrer noopener">github.com/b0sh-net/phone-whisper</a></li>



<li><strong>Release 0.4.4:</strong> <a href="https://github.com/b0sh-net/phone-whisper/releases/tag/0.4.4" target="_blank" rel="noreferrer noopener">github.com/b0sh-net/phone-whisper/releases/tag/0.4.4</a></li>



<li><strong>sherpa-onnx:</strong> <a href="https://github.com/k2-fsa/sherpa-onnx/" target="_blank" rel="noreferrer noopener">github.com/k2-fsa/sherpa-onnx</a></li>
</ul>
<p><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Fphone-whisper-trascrizione-audio-offline-su-android-con-sherpa-onnx%2F&amp;linkname=Phone-whisper%3A%20trascrizione%20audio%20offline%20su%20Android%20con%20sherpa-onnx" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Fphone-whisper-trascrizione-audio-offline-su-android-con-sherpa-onnx%2F&amp;linkname=Phone-whisper%3A%20trascrizione%20audio%20offline%20su%20Android%20con%20sherpa-onnx" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_copy_link" href="https://www.addtoany.com/add_to/copy_link?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Fphone-whisper-trascrizione-audio-offline-su-android-con-sherpa-onnx%2F&amp;linkname=Phone-whisper%3A%20trascrizione%20audio%20offline%20su%20Android%20con%20sherpa-onnx" title="Copy Link" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_flipboard" href="https://www.addtoany.com/add_to/flipboard?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Fphone-whisper-trascrizione-audio-offline-su-android-con-sherpa-onnx%2F&amp;linkname=Phone-whisper%3A%20trascrizione%20audio%20offline%20su%20Android%20con%20sherpa-onnx" title="Flipboard" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Fphone-whisper-trascrizione-audio-offline-su-android-con-sherpa-onnx%2F&#038;title=Phone-whisper%3A%20trascrizione%20audio%20offline%20su%20Android%20con%20sherpa-onnx" data-a2a-url="https://www.b0sh.net/2026/04/phone-whisper-trascrizione-audio-offline-su-android-con-sherpa-onnx/" data-a2a-title="Phone-whisper: trascrizione audio offline su Android con sherpa-onnx"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://www.b0sh.net/2026/04/phone-whisper-trascrizione-audio-offline-su-android-con-sherpa-onnx/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4127</post-id>	</item>
		<item>
		<title>Aggiornamenti sulla app per l&#8217;esame VDS</title>
		<link>https://www.b0sh.net/2026/04/aggiornamenti-sulla-app-per-lesame-vds/</link>
					<comments>https://www.b0sh.net/2026/04/aggiornamenti-sulla-app-per-lesame-vds/#respond</comments>
		
		<dc:creator><![CDATA[bosh]]></dc:creator>
		<pubDate>Sat, 11 Apr 2026 13:32:19 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[volo]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[aviation]]></category>
		<category><![CDATA[ulm]]></category>
		<category><![CDATA[vds]]></category>
		<guid isPermaLink="false">https://www.b0sh.net/?p=4116</guid>

					<description><![CDATA[Sono andato ulteriormente avanti con lo sviluppo della app creata settimana scorsa, e oltre a qualche fix posso annunciare che è possibile scaricare e utilizzare l&#8217;apk pronto. Basta guardare tra le release su repo github. Ho qualche dubbio sull&#8217;opportunità di pubblicare sullo store ufficiale &#8230; dovrei informarmi su burocrazia e costi.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Sono andato ulteriormente avanti con lo sviluppo della app <a href="https://www.b0sh.net/2026/04/ho-costruito-unapp-per-lesame-vds-in-una-giornata-usando-qwen-3-6-plus-gratis-su-openrouter/" data-type="post" data-id="4104">creata settimana scorsa</a>, e oltre a qualche fix posso annunciare che è possibile scaricare e utilizzare l&#8217;apk pronto. Basta guardare tra le <a href="https://github.com/b0sh-net/vdsexamapp/releases" data-type="link" data-id="https://github.com/b0sh-net/vdsexamapp/releases">release</a> su repo github.</p>



<p class="wp-block-paragraph">Ho qualche dubbio sull&#8217;opportunità di pubblicare sullo store ufficiale &#8230; dovrei informarmi su burocrazia e costi. </p>



<p class="wp-block-paragraph"></p>
<p><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Faggiornamenti-sulla-app-per-lesame-vds%2F&amp;linkname=Aggiornamenti%20sulla%20app%20per%20l%E2%80%99esame%20VDS" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Faggiornamenti-sulla-app-per-lesame-vds%2F&amp;linkname=Aggiornamenti%20sulla%20app%20per%20l%E2%80%99esame%20VDS" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_copy_link" href="https://www.addtoany.com/add_to/copy_link?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Faggiornamenti-sulla-app-per-lesame-vds%2F&amp;linkname=Aggiornamenti%20sulla%20app%20per%20l%E2%80%99esame%20VDS" title="Copy Link" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_flipboard" href="https://www.addtoany.com/add_to/flipboard?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Faggiornamenti-sulla-app-per-lesame-vds%2F&amp;linkname=Aggiornamenti%20sulla%20app%20per%20l%E2%80%99esame%20VDS" title="Flipboard" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Faggiornamenti-sulla-app-per-lesame-vds%2F&#038;title=Aggiornamenti%20sulla%20app%20per%20l%E2%80%99esame%20VDS" data-a2a-url="https://www.b0sh.net/2026/04/aggiornamenti-sulla-app-per-lesame-vds/" data-a2a-title="Aggiornamenti sulla app per l’esame VDS"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://www.b0sh.net/2026/04/aggiornamenti-sulla-app-per-lesame-vds/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4116</post-id>	</item>
		<item>
		<title>Ho costruito un&#8217;app per l&#8217;esame VDS in una giornata &#8211; usando Qwen 3.6 Plus gratis su OpenRouter</title>
		<link>https://www.b0sh.net/2026/04/ho-costruito-unapp-per-lesame-vds-in-una-giornata-usando-qwen-3-6-plus-gratis-su-openrouter/</link>
					<comments>https://www.b0sh.net/2026/04/ho-costruito-unapp-per-lesame-vds-in-una-giornata-usando-qwen-3-6-plus-gratis-su-openrouter/#respond</comments>
		
		<dc:creator><![CDATA[bosh]]></dc:creator>
		<pubDate>Fri, 03 Apr 2026 14:09:11 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[claude code]]></category>
		<category><![CDATA[nemotron]]></category>
		<category><![CDATA[qwen]]></category>
		<category><![CDATA[vds]]></category>
		<category><![CDATA[vibecoding]]></category>
		<guid isPermaLink="false">https://www.b0sh.net/?p=4104</guid>

					<description><![CDATA[Continua la serie &#8220;Usiamo Claude Code a costo zero&#8221;, e questa volta ho unito la programmazione a un&#8217;altra mia passione: il volo. L&#8217;Aero Club d&#8217;Italia (AECI) mette a disposizione un&#8217;applicazione desktop per simulare l&#8217;esame di conseguimento dell&#8217;attestato VDS (Volo da Diporto o Sportivo). Utile, certo &#8211; ma decisamente più comodo avere qualcosa in tasca, da [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Continua la serie <strong>&#8220;Usiamo Claude Code a costo zero&#8221;</strong>, e questa volta ho unito la programmazione a un&#8217;altra mia passione: il volo.</p>



<p class="wp-block-paragraph">L&#8217;<strong>Aero Club d&#8217;Italia (AECI)</strong> mette a disposizione un&#8217;applicazione desktop per simulare l&#8217;esame di conseguimento dell&#8217;<strong>attestato VDS (Volo da Diporto o Sportivo)</strong>. Utile, certo &#8211; ma decisamente più comodo avere qualcosa in tasca, da usare anche lontano dalla scrivania. Non a caso esistono già alcune app per smartphone, tutte però a pagamento.</p>


<div class="wp-block-image is-style-default">
<figure class="alignleft"><img alt="" fetchpriority="high" decoding="async" width="174" height="300" src="https://www.b0sh.net/wp-content/uploads/2026/04/test-vds-174x300.jpg" alt="" class="wp-image-4108" srcset="https://www.b0sh.net/wp-content/uploads/2026/04/test-vds-174x300.jpg 174w, https://www.b0sh.net/wp-content/uploads/2026/04/test-vds-595x1024.jpg 595w, https://www.b0sh.net/wp-content/uploads/2026/04/test-vds-768x1323.jpg 768w, https://www.b0sh.net/wp-content/uploads/2026/04/test-vds-892x1536.jpg 892w, https://www.b0sh.net/wp-content/uploads/2026/04/test-vds-676x1164.jpg 676w, https://www.b0sh.net/wp-content/uploads/2026/04/test-vds.jpg 921w" sizes="(max-width: 174px) 100vw, 174px" /></figure>
</div>


<p class="wp-block-paragraph">Ho voluto quindi fare un esperimento: quanto tempo ci vuole per replicare le funzionalità dell&#8217;app di AECI in formato mobile, usando un modello AI gratuito come strumento di sviluppo?</p>



<p class="wp-block-paragraph"><strong>Il risultato</strong></p>



<p class="wp-block-paragraph">In circa <strong>una giornata di lavoro</strong> ho ottenuto un prototipo sostanzialmente funzionante. Lo strumento usato? <strong>Qwen 3 Plus</strong>, recentemente disponibile gratuitamente su <a rel="noreferrer noopener" target="_blank" href="https://openrouter.ai">OpenRouter</a>, abbinato a Claude Code.</p>



<p class="wp-block-paragraph">La qualità del modello è evidente: rispetto a Nemotron 3 Super rappresenta un netto passo avanti in termini di comprensione del contesto e qualità del codice generato. Poterlo usare gratuitamente sembra quasi troppo bello per essere vero &#8211; e probabilmente questa finestra non durerà a lungo. <strong>Consiglio di sfruttarla finché c&#8217;è.</strong></p>



<p class="wp-block-paragraph"><strong>Prova l&#8217;app (è open source)</strong></p>



<p class="wp-block-paragraph">Il codice è disponibile su GitHub:  <a href="https://github.com/b0sh-net/vdsexamapp" target="_blank" rel="noreferrer noopener">github.com/b0sh-net/vdsexamapp</a></p>



<p class="wp-block-paragraph">Chiunque voglia provarla, migliorarla o creare opere derivate è il benvenuto. Il progetto è aperto a contributi e modifiche di ogni tipo.</p>



<p class="wp-block-paragraph"></p>
<p><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Fho-costruito-unapp-per-lesame-vds-in-una-giornata-usando-qwen-3-6-plus-gratis-su-openrouter%2F&amp;linkname=Ho%20costruito%20un%E2%80%99app%20per%20l%E2%80%99esame%20VDS%20in%20una%20giornata%20%E2%80%93%20usando%20Qwen%203.6%20Plus%20gratis%20su%20OpenRouter" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Fho-costruito-unapp-per-lesame-vds-in-una-giornata-usando-qwen-3-6-plus-gratis-su-openrouter%2F&amp;linkname=Ho%20costruito%20un%E2%80%99app%20per%20l%E2%80%99esame%20VDS%20in%20una%20giornata%20%E2%80%93%20usando%20Qwen%203.6%20Plus%20gratis%20su%20OpenRouter" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_copy_link" href="https://www.addtoany.com/add_to/copy_link?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Fho-costruito-unapp-per-lesame-vds-in-una-giornata-usando-qwen-3-6-plus-gratis-su-openrouter%2F&amp;linkname=Ho%20costruito%20un%E2%80%99app%20per%20l%E2%80%99esame%20VDS%20in%20una%20giornata%20%E2%80%93%20usando%20Qwen%203.6%20Plus%20gratis%20su%20OpenRouter" title="Copy Link" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_flipboard" href="https://www.addtoany.com/add_to/flipboard?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Fho-costruito-unapp-per-lesame-vds-in-una-giornata-usando-qwen-3-6-plus-gratis-su-openrouter%2F&amp;linkname=Ho%20costruito%20un%E2%80%99app%20per%20l%E2%80%99esame%20VDS%20in%20una%20giornata%20%E2%80%93%20usando%20Qwen%203.6%20Plus%20gratis%20su%20OpenRouter" title="Flipboard" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.b0sh.net%2F2026%2F04%2Fho-costruito-unapp-per-lesame-vds-in-una-giornata-usando-qwen-3-6-plus-gratis-su-openrouter%2F&#038;title=Ho%20costruito%20un%E2%80%99app%20per%20l%E2%80%99esame%20VDS%20in%20una%20giornata%20%E2%80%93%20usando%20Qwen%203.6%20Plus%20gratis%20su%20OpenRouter" data-a2a-url="https://www.b0sh.net/2026/04/ho-costruito-unapp-per-lesame-vds-in-una-giornata-usando-qwen-3-6-plus-gratis-su-openrouter/" data-a2a-title="Ho costruito un’app per l’esame VDS in una giornata – usando Qwen 3.6 Plus gratis su OpenRouter"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://www.b0sh.net/2026/04/ho-costruito-unapp-per-lesame-vds-in-una-giornata-usando-qwen-3-6-plus-gratis-su-openrouter/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4104</post-id>	</item>
		<item>
		<title>Nemotron 3 Super vs Qwen3.5: costruire un&#8217;app con l&#8217;AI senza scrivere codice</title>
		<link>https://www.b0sh.net/2026/03/nemotron-3-super-vs-qwen3-5-costruire-unapp-con-lai-senza-scrivere-codice/</link>
					<comments>https://www.b0sh.net/2026/03/nemotron-3-super-vs-qwen3-5-costruire-unapp-con-lai-senza-scrivere-codice/#respond</comments>
		
		<dc:creator><![CDATA[bosh]]></dc:creator>
		<pubDate>Mon, 30 Mar 2026 06:30:50 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[agentic ai]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[claude code]]></category>
		<category><![CDATA[nemotron]]></category>
		<category><![CDATA[openrouter]]></category>
		<category><![CDATA[qwen3.5]]></category>
		<guid isPermaLink="false">https://www.b0sh.net/?p=4093</guid>

					<description><![CDATA[La precedente esperienza con Qwen3.5 non aveva dato i risultati sperati. Nonostante ore di lavoro e feedback continui, il modello non è mai riuscito a produrre un&#8217;applicazione funzionante: regressioni cicliche ed errori difficilmente superabili con le capacità dello strumento hanno bloccato ogni progresso. Ho voluto quindi riprovare con Nemotron-Cascade-2, ma le sue richieste hardware si [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">La <a href="https://www.b0sh.net/2026/03/claude-code-ollama-qwen3-5/" target="_blank" rel="noreferrer noopener">precedente esperienza</a> con Qwen3.5 non aveva dato i risultati sperati. Nonostante ore di lavoro e feedback continui, il modello non è mai riuscito a produrre un&#8217;applicazione funzionante: regressioni cicliche ed errori difficilmente superabili con le capacità dello strumento hanno bloccato ogni progresso.</p>



<p class="wp-block-paragraph">Ho voluto quindi riprovare con <a href="https://ollama.com/library/nemotron-cascade-2" target="_blank" rel="noreferrer noopener">Nemotron-Cascade-2</a>, ma le sue richieste hardware si sono rivelate eccessive per la mia macchina. Incuriosito comunque dall&#8217;ecosistema di modelli NVIDIA, ho scoperto che <strong>Nemotron 3 Super è disponibile gratuitamente su OpenRouter</strong> — e ho deciso di metterlo alla prova con lo stesso compito.</p>



<p class="wp-block-paragraph">Quasi <strong>21 milioni di token dopo</strong>, e con una spesa effettiva di <strong>0$</strong>, l&#8217;applicazione non è ancora priva di bug. Eppure, in qualche modo, sembra più vicina a qualcosa di concreto rispetto a quanto ottenuto con Qwen3.5. Il dettaglio più incoraggiante? Non si è ancora bloccato su un errore irrisolvibile. Con qualche altra sessione di test e qualche milione di token in più, potrebbe davvero riuscire a chiudere il lavoro.</p>



<figure class="wp-block-image size-large"><img alt="" decoding="async" width="1024" height="267" src="https://www.b0sh.net/wp-content/uploads/2026/03/nemotron-1024x267.png" alt="" class="wp-image-4098" srcset="https://www.b0sh.net/wp-content/uploads/2026/03/nemotron-1024x267.png 1024w, https://www.b0sh.net/wp-content/uploads/2026/03/nemotron-300x78.png 300w, https://www.b0sh.net/wp-content/uploads/2026/03/nemotron-768x200.png 768w, https://www.b0sh.net/wp-content/uploads/2026/03/nemotron-676x176.png 676w, https://www.b0sh.net/wp-content/uploads/2026/03/nemotron.png 1277w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Resta però evidente una cosa: siamo ancora molto lontani dall&#8217;idea romantica di <em>&#8220;mi faccio un&#8217;app semplice, senza scrivere una riga di codice, in pochi minuti&#8221;</em>. Forse ci proverò anche con <strong>Claude Sonnet</strong>, se mi avanza qualche credito a fine mese.</p>



<p class="wp-block-paragraph">Il progetto è pubblico: puoi scaricarlo e testarlo sul <a href="https://github.com/b0sh-net/GPS-Track-Recorder" target="_blank" rel="noreferrer noopener">repository GitHub</a>.</p>



<p class="wp-block-paragraph"></p>
<p><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F03%2Fnemotron-3-super-vs-qwen3-5-costruire-unapp-con-lai-senza-scrivere-codice%2F&amp;linkname=Nemotron%203%20Super%20vs%20Qwen3.5%3A%20costruire%20un%E2%80%99app%20con%20l%E2%80%99AI%20senza%20scrivere%20codice" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F03%2Fnemotron-3-super-vs-qwen3-5-costruire-unapp-con-lai-senza-scrivere-codice%2F&amp;linkname=Nemotron%203%20Super%20vs%20Qwen3.5%3A%20costruire%20un%E2%80%99app%20con%20l%E2%80%99AI%20senza%20scrivere%20codice" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_copy_link" href="https://www.addtoany.com/add_to/copy_link?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F03%2Fnemotron-3-super-vs-qwen3-5-costruire-unapp-con-lai-senza-scrivere-codice%2F&amp;linkname=Nemotron%203%20Super%20vs%20Qwen3.5%3A%20costruire%20un%E2%80%99app%20con%20l%E2%80%99AI%20senza%20scrivere%20codice" title="Copy Link" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_flipboard" href="https://www.addtoany.com/add_to/flipboard?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F03%2Fnemotron-3-super-vs-qwen3-5-costruire-unapp-con-lai-senza-scrivere-codice%2F&amp;linkname=Nemotron%203%20Super%20vs%20Qwen3.5%3A%20costruire%20un%E2%80%99app%20con%20l%E2%80%99AI%20senza%20scrivere%20codice" title="Flipboard" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.b0sh.net%2F2026%2F03%2Fnemotron-3-super-vs-qwen3-5-costruire-unapp-con-lai-senza-scrivere-codice%2F&#038;title=Nemotron%203%20Super%20vs%20Qwen3.5%3A%20costruire%20un%E2%80%99app%20con%20l%E2%80%99AI%20senza%20scrivere%20codice" data-a2a-url="https://www.b0sh.net/2026/03/nemotron-3-super-vs-qwen3-5-costruire-unapp-con-lai-senza-scrivere-codice/" data-a2a-title="Nemotron 3 Super vs Qwen3.5: costruire un’app con l’AI senza scrivere codice"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://www.b0sh.net/2026/03/nemotron-3-super-vs-qwen3-5-costruire-unapp-con-lai-senza-scrivere-codice/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4093</post-id>	</item>
		<item>
		<title>Claude Code + Ollama/Qwen3.5</title>
		<link>https://www.b0sh.net/2026/03/claude-code-ollama-qwen3-5/</link>
					<comments>https://www.b0sh.net/2026/03/claude-code-ollama-qwen3-5/#respond</comments>
		
		<dc:creator><![CDATA[bosh]]></dc:creator>
		<pubDate>Sun, 08 Mar 2026 18:22:58 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[claude code]]></category>
		<category><![CDATA[context7]]></category>
		<category><![CDATA[ollama]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[qwen]]></category>
		<guid isPermaLink="false">https://www.b0sh.net/?p=4080</guid>

					<description><![CDATA[È possibile usare Claude Code con un modello locale — decisamente migliorato rispetto alle versioni precedenti — come Qwen3.5 per realizzare una piccola app Android senza scrivere una riga di codice? L&#8217;impressione è che sì, si possa fare. Il modello configura tutto, scarica i framework, e dietro mio suggerimento si costruisce una lista di task [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">È possibile usare Claude Code con un modello locale — decisamente migliorato rispetto alle versioni precedenti — come Qwen3.5 per realizzare una piccola app Android senza scrivere una riga di codice?</p>



<figure class="wp-block-image size-large"><img alt="" decoding="async" width="1024" height="685" src="https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-172936-1024x685.png" alt="" class="wp-image-4083" srcset="https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-172936-1024x685.png 1024w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-172936-300x201.png 300w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-172936-768x514.png 768w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-172936-676x452.png 676w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-172936.png 1088w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">L&#8217;impressione è che sì, si possa fare. Il modello configura tutto, scarica i framework, e dietro mio suggerimento si costruisce una lista di task da completare uno alla volta. Gli chiedo poi di riverificare il lavoro svolto, e in circa un quarto d&#8217;ora l&#8217;applicazione è pronta. In teoria.</p>



<figure class="wp-block-image size-large"><img alt="" loading="lazy" decoding="async" width="1024" height="597" src="https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-173659-1024x597.png" alt="" class="wp-image-4084" srcset="https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-173659-1024x597.png 1024w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-173659-300x175.png 300w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-173659-768x448.png 768w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-173659-676x394.png 676w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-173659.png 1087w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img alt="" loading="lazy" decoding="async" width="1024" height="623" src="https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-173953-1024x623.png" alt="" class="wp-image-4085" srcset="https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-173953-1024x623.png 1024w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-173953-300x182.png 300w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-173953-768x467.png 768w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-173953-676x411.png 676w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-173953.png 1090w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Gli chiedo di riverificare tutto…</p>



<figure class="wp-block-image size-large"><img alt="" loading="lazy" decoding="async" width="1024" height="700" src="https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-174647-1024x700.png" alt="" class="wp-image-4086" srcset="https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-174647-1024x700.png 1024w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-174647-300x205.png 300w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-174647-768x525.png 768w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-174647-676x462.png 676w, https://www.b0sh.net/wp-content/uploads/2026/03/Immagine-2026-03-08-174647.png 1096w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Il problema? Ha usato una versione del framework non ancora compatibile con Expo Go per i test diretti sul telefono. Da lì è partita una serie infinita di prompt di debug per abbassare la versione e aggiornare tutte le API interne, apparentemente diverse tra una release e l&#8217;altra.</p>



<p class="wp-block-paragraph">Il risultato rimane comunque notevole, soprattutto considerando che tutto è generato da un modello da soli 9 miliardi di parametri, che gira su una scheda video nata per i videogiochi e tutt&#8217;altro che all&#8217;ultimo grido. Forse se non lo avessi forzato a passare dalla versione 55 alla 54 di React Native me la sarei cavata con meno litigi. Ma il limite vero sembra essere sempre lo stesso: la rifinitura del codice generato. O funziona subito, oppure ci vuole dieci volte il tempo che si impiegherebbe a scriverlo a mano.</p>



<p class="wp-block-paragraph">Come piccolo aiuto ho agganciato Context7 come MCP server, per evitargli di allucinare le API dei framework — ma con successo solo parziale.</p>
<p><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F03%2Fclaude-code-ollama-qwen3-5%2F&amp;linkname=Claude%20Code%20%2B%20Ollama%2FQwen3.5" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F03%2Fclaude-code-ollama-qwen3-5%2F&amp;linkname=Claude%20Code%20%2B%20Ollama%2FQwen3.5" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_copy_link" href="https://www.addtoany.com/add_to/copy_link?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F03%2Fclaude-code-ollama-qwen3-5%2F&amp;linkname=Claude%20Code%20%2B%20Ollama%2FQwen3.5" title="Copy Link" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_flipboard" href="https://www.addtoany.com/add_to/flipboard?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F03%2Fclaude-code-ollama-qwen3-5%2F&amp;linkname=Claude%20Code%20%2B%20Ollama%2FQwen3.5" title="Flipboard" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.b0sh.net%2F2026%2F03%2Fclaude-code-ollama-qwen3-5%2F&#038;title=Claude%20Code%20%2B%20Ollama%2FQwen3.5" data-a2a-url="https://www.b0sh.net/2026/03/claude-code-ollama-qwen3-5/" data-a2a-title="Claude Code + Ollama/Qwen3.5"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://www.b0sh.net/2026/03/claude-code-ollama-qwen3-5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4080</post-id>	</item>
		<item>
		<title>Gmail abbandona il POP3 fetch: come configurare l&#8217;inoltro email con SPF, DKIM e SRS su Postfix</title>
		<link>https://www.b0sh.net/2026/02/gmail-abbandona-il-pop3-fetch-come-configurare-linoltro-email-con-spf-dkim-e-srs-su-postfix/</link>
					<comments>https://www.b0sh.net/2026/02/gmail-abbandona-il-pop3-fetch-come-configurare-linoltro-email-con-spf-dkim-e-srs-su-postfix/#respond</comments>
		
		<dc:creator><![CDATA[bosh]]></dc:creator>
		<pubDate>Sun, 22 Feb 2026 09:04:41 +0000</pubDate>
				<category><![CDATA[sistemisti]]></category>
		<category><![CDATA[DKIM]]></category>
		<category><![CDATA[DMAR]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[email-authentication]]></category>
		<category><![CDATA[email-forwarding]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[postsrsd]]></category>
		<category><![CDATA[self-hosting]]></category>
		<category><![CDATA[SPF]]></category>
		<category><![CDATA[SRS]]></category>
		<category><![CDATA[webmin]]></category>
		<guid isPermaLink="false">https://www.b0sh.net/?p=4058</guid>

					<description><![CDATA[Con una recente comunicazione ufficiale, Google ha annunciato la dismissione del fetch POP3 da account esterni in Gmail. Chi utilizzava questa funzione per consolidare più caselle email in Gmail si trova ora a dover migrare verso una soluzione alternativa: l&#8217;inoltro automatico (email forwarding) direttamente dal server di posta sorgente. Questa guida documenta il processo completo [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Con una <a rel="noreferrer noopener" target="_blank" href="https://support.google.com/mail/answer/16604719?hl=en">recente comunicazione ufficiale</a>, Google ha annunciato la dismissione del fetch POP3 da account esterni in Gmail. Chi utilizzava questa funzione per consolidare più caselle email in Gmail si trova ora a dover migrare verso una soluzione alternativa: l&#8217;<strong>inoltro automatico (email forwarding)</strong> direttamente dal server di posta sorgente.</p>



<p class="wp-block-paragraph">Questa guida documenta il processo completo per configurare correttamente l&#8217;inoltro da un dominio custom gestito con <strong>Postfix e Webmin</strong> verso Gmail, risolvendo i problemi di autenticazione SPF/DKIM che causano il blocco con errore <code>550 5.7.26</code>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="il-problema-gmail-rifiuta-le-email-inoltrate">Il problema: Gmail rifiuta le email inoltrate</h2>



<p class="wp-block-paragraph">Attivando l&#8217;inoltro automatico dal proprio server di posta verso Gmail, si riceve quasi immediatamente un bounce con questo errore:</p>



<pre class="wp-block-preformatted">text<code>550-5.7.26 Your email has been blocked because the sender is unauthenticated.
Gmail requires all senders to authenticate with either SPF or DKIM.
DKIM = did not pass
SPF [dominio-originale.com] with ip: [IP-del-tuo-server] = did not pass
</code></pre>



<p class="wp-block-paragraph">La causa è strutturale: quando il server di posta <strong>inoltra</strong> un messaggio, il mittente nell&#8217;envelope (Return-Path) rimane quello originale (es. <code>mittente@dominio-esterno.com</code>), ma l&#8217;IP che effettua la consegna è quello del tuo server. Gmail verifica l&#8217;SPF del dominio originale contro l&#8217;IP del tuo server — e ovviamente fallisce, perché il tuo server non è autorizzato a inviare per conto di domini terzi.</p>



<span id="more-4058"></span>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="la-soluzione-srs--spf-sul-dominio-di-inoltro">La soluzione: SRS + SPF sul dominio di inoltro</h2>



<p class="wp-block-paragraph">La soluzione completa richiede tre interventi:</p>



<ol class="wp-block-list">
<li><strong>SRS (Sender Rewriting Scheme)</strong> — riscrive il mittente envelope usando il tuo dominio</li>



<li><strong>Record SPF</strong> sul tuo dominio che autorizzi il tuo IP</li>



<li><strong>Record DMARC</strong> per migliorare la reputazione del dominio</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="step-1-installare-e-configurare-postsrsd">Step 1: installare e configurare postsrsd</h2>



<p class="wp-block-paragraph"><strong>SRS</strong> è un meccanismo che riscrive l&#8217;indirizzo mittente nell&#8217;envelope da <code>mittente@dominio-esterno.com</code> a <code>SRS0=HASH=TT=dominio-esterno.com=mittente@tuo-dominio.com</code>. In questo modo Gmail verifica l&#8217;SPF contro il <strong>tuo</strong> dominio, che puoi controllare.</p>



<p class="wp-block-paragraph">Installa il demone <code>postsrsd</code>:</p>



<pre class="wp-block-preformatted">bash<code>apt install postsrsd
</code></pre>



<p class="wp-block-paragraph">Durante l&#8217;installazione specifica il tuo dominio (es. <code>tuodominio.com</code>). Il file di configurazione si trova in <code>/etc/default/postsrsd</code>. Verifica che i parametri principali siano corretti:</p>



<pre class="wp-block-preformatted">text<code>SRS_DOMAIN=tuodominio.com
SRS_EXCLUDE_DOMAINS=tuodominio.com
SRS_SECRET=/etc/postsrsd.secret
</code></pre>



<p class="wp-block-paragraph">Verifica che postsrsd sia in ascolto sulle porte corrette:</p>



<pre class="wp-block-preformatted">bash<code>ss -tlnp | grep postsrsd
<em># Output atteso:</em>
<em># LISTEN 0 10 127.0.0.1:10001 ...</em>
<em># LISTEN 0 10 127.0.0.1:10002 ...</em>
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="step-2-configurare-postfix-per-usare-srs">Step 2: configurare Postfix per usare SRS</h2>



<p class="wp-block-paragraph">Aggiungi queste direttive a <code>/etc/postfix/main.cf</code> (in Webmin: <strong>Servers → Postfix Mail Server → Edit Config Files</strong>):</p>



<pre class="wp-block-preformatted">text<code>sender_canonical_maps = tcp:127.0.0.1:10001
sender_canonical_classes = envelope_sender
recipient_canonical_maps = tcp:127.0.0.1:10002
recipient_canonical_classes = envelope_recipient,header_recipient
</code></pre>



<p class="wp-block-paragraph">Riavvia i servizi:</p>



<pre class="wp-block-preformatted">bash<code>systemctl restart postsrsd &amp;&amp; postfix reload
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="step-3-configurare-il-forwarding-in-virtualaliasma">Step 3: configurare il forwarding in virtual_alias_maps</h2>



<p class="wp-block-paragraph">Il forwarding <strong>non deve</strong> essere gestito tramite <code>~/.forward</code> dell&#8217;utente locale, perché quel meccanismo bypassa la <code>sender_canonical_map</code> e quindi SRS non viene applicato. La configurazione corretta va in <code>/etc/postfix/virtual</code>.</p>



<p class="wp-block-paragraph">Per mantenere la consegna locale <strong>e</strong> inoltrare a Gmail simultaneamente, usa la sintassi multi-destinatario:</p>



<pre class="wp-block-preformatted">text<code>utente@tuodominio.com    utente-locale, destinatario@gmail.com
</code></pre>



<p class="wp-block-paragraph">Aggiorna la mappa e ricarica:</p>



<pre class="wp-block-preformatted">bash<code>postmap /etc/postfix/virtual
postfix reload
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="step-4-aggiungere-il-record-spf">Step 4: aggiungere il record SPF</h2>



<p class="wp-block-paragraph">Se non è già presente, aggiungi un record TXT SPF sul dominio radice (<code>@</code>) nel DNS:</p>



<pre class="wp-block-preformatted">text<code>v=spf1 ip4:IP-DEL-TUO-SERVER mx ~all
</code></pre>



<p class="wp-block-paragraph">Verifica la propagazione con:</p>



<pre class="wp-block-preformatted">bash<code>dig TXT tuodominio.com +short
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="step-5-aggiungere-il-record-dmarc">Step 5: aggiungere il record DMARC</h2>



<p class="wp-block-paragraph">Aggiungi un record TXT per <code>_dmarc.tuodominio.com</code>:</p>



<pre class="wp-block-preformatted">text<code>v=DMARC1; p=none; rua=mailto:admin@tuodominio.com
</code></pre>



<p class="wp-block-paragraph">Il valore <code>p=none</code> abilita la modalità di solo monitoraggio: non blocca nulla, ma comunica a Gmail che il dominio ha una policy DMARC, migliorando la reputazione nel tempo.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="verifica-finale">Verifica finale</h2>



<p class="wp-block-paragraph">Invia una mail di test verso l&#8217;indirizzo che punta al tuo server e controlla i log:</p>



<pre class="wp-block-preformatted">bash<code>journalctl -u postfix --since "5 minutes ago" | grep -E "gmail|SRS|status"
</code></pre>



<p class="wp-block-paragraph">Nei log di postsrsd dovresti vedere la riscrittura SRS:</p>



<pre class="wp-block-preformatted">text<code>postsrsd: srs_forward: &lt;mittente@dominio-esterno.com&gt; rewritten as &lt;SRS0=HASH=TT=dominio-esterno.com=mittente@tuodominio.com&gt;
</code></pre>



<p class="wp-block-paragraph">Nei log di Postfix dovresti vedere la consegna andata a buon fine:</p>



<pre class="wp-block-preformatted">text<code>status=sent (250 2.0.0 OK ... gsmtp)
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="conclusione">Conclusione</h2>



<p class="wp-block-paragraph">La dismissione del POP3 fetch di Gmail costringe a un setup più corretto e moderno, che in realtà è anche più robusto: SRS + SPF + DKIM + DMARC è la configurazione raccomandata per qualsiasi server di posta che faccia forwarding verso provider che applicano strict authentication come Gmail. Una volta configurato, il sistema è completamente trasparente e non richiede manutenzione.</p>
<p><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F02%2Fgmail-abbandona-il-pop3-fetch-come-configurare-linoltro-email-con-spf-dkim-e-srs-su-postfix%2F&amp;linkname=Gmail%20abbandona%20il%20POP3%20fetch%3A%20come%20configurare%20l%E2%80%99inoltro%20email%20con%20SPF%2C%20DKIM%20e%20SRS%20su%20Postfix" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F02%2Fgmail-abbandona-il-pop3-fetch-come-configurare-linoltro-email-con-spf-dkim-e-srs-su-postfix%2F&amp;linkname=Gmail%20abbandona%20il%20POP3%20fetch%3A%20come%20configurare%20l%E2%80%99inoltro%20email%20con%20SPF%2C%20DKIM%20e%20SRS%20su%20Postfix" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_copy_link" href="https://www.addtoany.com/add_to/copy_link?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F02%2Fgmail-abbandona-il-pop3-fetch-come-configurare-linoltro-email-con-spf-dkim-e-srs-su-postfix%2F&amp;linkname=Gmail%20abbandona%20il%20POP3%20fetch%3A%20come%20configurare%20l%E2%80%99inoltro%20email%20con%20SPF%2C%20DKIM%20e%20SRS%20su%20Postfix" title="Copy Link" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_flipboard" href="https://www.addtoany.com/add_to/flipboard?linkurl=https%3A%2F%2Fwww.b0sh.net%2F2026%2F02%2Fgmail-abbandona-il-pop3-fetch-come-configurare-linoltro-email-con-spf-dkim-e-srs-su-postfix%2F&amp;linkname=Gmail%20abbandona%20il%20POP3%20fetch%3A%20come%20configurare%20l%E2%80%99inoltro%20email%20con%20SPF%2C%20DKIM%20e%20SRS%20su%20Postfix" title="Flipboard" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fwww.b0sh.net%2F2026%2F02%2Fgmail-abbandona-il-pop3-fetch-come-configurare-linoltro-email-con-spf-dkim-e-srs-su-postfix%2F&#038;title=Gmail%20abbandona%20il%20POP3%20fetch%3A%20come%20configurare%20l%E2%80%99inoltro%20email%20con%20SPF%2C%20DKIM%20e%20SRS%20su%20Postfix" data-a2a-url="https://www.b0sh.net/2026/02/gmail-abbandona-il-pop3-fetch-come-configurare-linoltro-email-con-spf-dkim-e-srs-su-postfix/" data-a2a-title="Gmail abbandona il POP3 fetch: come configurare l’inoltro email con SPF, DKIM e SRS su Postfix"></a></p>]]></content:encoded>
					
					<wfw:commentRss>https://www.b0sh.net/2026/02/gmail-abbandona-il-pop3-fetch-come-configurare-linoltro-email-con-spf-dkim-e-srs-su-postfix/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4058</post-id>	</item>
	</channel>
</rss>
