2026-09-28

Creare una chiavetta USB avviabile con Ventoy su Slackware 15

Questa guida descrive come preparare, con Slackware Linux 15 e Ventoy, una chiavetta USB avviabile (contenente una o più immagini ISO).

Come esempio useremo una ISO di Windows Server ed eventuali driver aggiuntivi. Con Ventoy non è necessario scrivere ogni ISO sulla chiavetta con dd: Ventoy viene installato una sola volta e, successivamente, le immagini ISO vengono aggiunte direttamente sulla partizione dati della chiavetta.

Si possono copiare anche normali file, per esempio i driver da utilizzare durante l'installazione.

Preparare una chiavetta Ventoy su Slackware 15

  • Individuare la chiavetta con il comando:
    lsblk -o NAME,SIZE,MODEL,MOUNTPOINTS
    
    Supponiamo che questa sia /dev/sdb. Attenzione: Ventoy cancellerà il contenuto della chiavetta (può esser preventivamente necessario smontare la chiavetta: umount /dev/sdb1);
  • Scaricare Ventoy per Linux dal sito ufficiale ed estrarlo:
    tar xf ventoy-*-linux.tar.gz
    cd ventoy-*
    
    Come `root`:
    su
    sh Ventoy2Disk.sh -i /dev/sdb
    
    Usare il dispositivo completo (/dev/sdb), non la partizione (/dev/sdb1).
  • Dopo l'installazione Ventoy crea una grande partizione dati. Montarla:
    mkdir -p /mnt/ventoy
    mount /dev/sdb1 /mnt/ventoy
    
    Copiare la ISO:
    mkdir -p /mnt/ventoy/ISO
    cp Windows_Server_2019.iso /mnt/ventoy/ISO/
    
    Non è necessario estrarre o modificare la ISO.
  • È possibile tenere sulla stessa chiavetta anche i driver del server:
    ISO/
        Windows_Server_2019.iso
    
    Drivers/
        SmartArray/
        Network/
        Chipset/
    
    Per i driver necessari durante Windows Setup è preferibile avere direttamente i file:
    *.inf
    *.sys
    *.cat
    
    Se Windows non vede il disco RAID, scegliere: Load driver ed indicare la directory corrispondente sulla chiavetta.
  • Dopo la copia:
    sync
    umount /mnt/ventoy
    
  • Avviare il server dalla chiavetta USB, selezionare la ISO nel menu Ventoy e scegliere: Boot in normal mode. Usare wimboot mode solo se l'avvio normale non funziona. Per aggiungere altre ISO in futuro basta copiarle sulla partizione Ventoy: non occorre ricreare la chiavetta.

2026-09-23

Procedura di rinnovo ambiente Entratel

  1. Controllare, innanzitutto, di avere i dati necessari. Servono il numero della busta Entratel, il PIN di revoca scelto quando fu creato l'ambiente attuale e, per la successiva generazione, il pincode Entratel.
    Accedendo con SPID/CIE/CNS, l'Agenzia indica che il pincode e le altre credenziali possono essere recuperati da Profilo utente → Credenziali di sicurezza → Prelievo pincode/credenziali.
  2. Revocare il vecchio ambiente. Accedere all'area riservata Entratel ed andare in Profilo utente → Credenziali di sicurezza → Gestione certificati → Ripristino dell'ambiente di sicurezza.
    Inserire numero busta e PIN di revoca. Questa è l'operazione che rende possibile generare i nuovi certificati. Se si sta operando come incaricato, bisogna prima cambiare l'utenza di lavoro e selezionare il codice fiscale del soggetto incaricante.
  3. Aprire Desktop Telematico → Entratel. Prima della generazione controllare in File → Impostazioni → Applicazioni → Entratel che sia configurato correttamente il percorso dell'ambiente di sicurezza, cioè la cartella nella quale saranno conservate le nuove chiavi. È possibile utilizzare anche un dispositivo rimovibile.
  4. Selezionare Entratel → Sicurezza → Imposta ambiente → Genera ambiente. La procedura guidata richiede pincode, codice fiscale, progressivo sede, un nuovo PIN di revoca ed una password di protezione dell'ambiente. Per la sede principale il progressivo è normalmente 000.
  5. Sceglire e conservare con particolare attenzione il nuovo PIN di revoca. È proprio questo codice che consentirà, fra tre anni o in caso di problemi, di revocare nuovamente l'ambiente senza recarsi all'Agenzia.
  6. Proseguire con . Desktop Telematico presenta un riepilogo: l'Agenzia consiglia esplicitamente di stamparlo/conservarlo in luogo sicuro, soprattutto perché contiene le informazioni necessarie per un futuro ripristino.
  7. Nella fase successiva inserire le credenziali Entratel necessarie alla trasmissione. Se si sta generando l'ambiente per l'utenza con cui si opera direttamente selezionare invio da effettuare per proprio conto (altrimenti invio da effettuare per conto di un altro soggetto, indicando codice fiscale e progressivo sede dell'incaricante).
  8. Continuare con . Normalmente Desktop Telematico fa tutto automaticamente: crea e trasmette il file di richiesta REQ.CCC, riceve CERTIF.IN e importa i nuovi certificati nell'ambiente di sicurezza. Alla fine, nella cartella dell'ambiente devono comparire almeno UTEF.P12 (chiavi di firma), UTEC.P12 (chiavi di cifratura) e UTENTE.KS (keystore contenente entrambe). Il messaggio "I certificati sono stati importati con successo" indica il completamento della procedura.
  9. Come verifica finale, usare Entratel → Sicurezza → Visualizza certificati. Conviene controllare sia la nuova data di scadenza, sia che i certificati rispettino gli standard attuali. L'Agenzia richiede, tra l'altro, chiavi RSA da 4096 bit per la cifratura; Desktop Telematico consente di verificarlo entrando nel dettaglio del certificato.

Riferimenti Guida rapida - Generazione ambiente di sicurezza utenti Entratel.

2026-09-14

TIM HUB+ Huawei DN8245X6-8X: il range DHCP condiziona l'accesso a Internet

La sostituzione di un router in una rete già esistente dovrebbe essere, almeno in teoria, un'operazione abbastanza semplice: si assegna al nuovo apparato lo stesso indirizzo LAN del precedente, si replica la configurazione DHCP e si collegano gli switch.

Con il TIM HUB+ Huawei DN8245X6-8X, tuttavia, ci siamo imbattuti in un comportamento piuttosto poco intuitivo che può creare parecchia confusione in reti dove convivono client DHCP e dispositivi con indirizzo IP statico.

Il problema, una volta individuato, è facile da aggirare. Capire cosa stesse succedendo lo è stato molto meno.

 

Configurazione di partenza

La rete utilizzava:
  • LAN: 192.168.1.0/24
  • Gateway: 192.168.1.1
  • DHCP: 192.168.1.20 - 192.168.1.90
Alcuni dispositivi, soprattutto server e altre macchine che devono mantenere un indirizzo noto, utilizzavano invece IP statici al di fuori del pool DHCP, per esempio:
  • 192.168.1.99
  • 192.168.1.253
È una configurazione del tutto comune. Normalmente ci si aspetta che il pool DHCP determini semplicemente quali indirizzi il router può assegnare automaticamente, mentre il NAT verso Internet venga applicato all'intera rete 192.168.1.0/24.

Sul DN8245X6-8X provato, però, le cose non sono andate così.

TIM documenta la possibilità di configurare il server DHCP e di creare associazioni statiche tra nome, MAC address e indirizzo IP, ma la documentazione pubblica non chiarisce il comportamento della voce Intervallo IP NAT presente nell'interfaccia del router.
 

Il sintomo

Dopo aver sostituito il precedente gateway con il nuovo Huawei, alcuni computer navigavano normalmente, mentre altri no.

La situazione era apparentemente contraddittoria:
  • 192.168.1.29 → Internet OK
  • 192.168.1.99 → Internet KO
  • 192.168.1.253 → Internet KO
Gli host problematici riuscivano però a raggiungere perfettamente il router:
  • ping 192.168.1.1 OK
  • ping 8.8.8.8 KO
Quindi:
  • Ethernet funzionava;
  • ARP funzionava;
  • la subnet era corretta;
  • il gateway era raggiungibile;
  • il problema non era DNS, dato che falliva anche il ping diretto ad un indirizzo IP pubblico.
Il traffico si fermava sostanzialmente al router.
 

L'indizio decisivo

C'era una correlazione molto sospetta:
  • Pool DHCP: 192.168.1.20 - 192.168.1.90
  • 192.168.1.29 → dentro il pool → Internet OK
  • 192.168.1.99 → fuori dal pool → Internet KO
  • 192.168.1.253 → fuori dal pool → Internet KO
L'interfaccia del router contiene inoltre una sezione denominata Intervallo IP NAT, i cui limiti risultano vincolati all'intervallo DHCP impostato.

In generale una policy NAT può certamente essere limitata in funzione dell'indirizzo IP sorgente: Huawei documenta esplicitamente NAT policy che selezionano o escludono determinati indirizzi e intervalli. Il punto insolito non è quindi la possibilità tecnica di farlo, ma il modo in cui tale comportamento viene esposto e collegato alla configurazione DHCP in questo firmware.

Per eliminare ogni possibile interferenza della rete aziendale, abbiamo isolato completamente il nuovo router.

Collegando direttamente un notebook via Ethernet e gli abbiamo assegnato:
  • IP: 192.168.1.99
  • Mask: 255.255.255.0
  • Gateway: 192.168.1.1
  • DNS: 8.8.8.8
Risultato:
  • ping 192.168.1.1 OK
  • ping 8.8.8.8 KO
  • navigazione KO
Abbiamo quindi modificato soltanto l'indirizzo IP del notebook a 192.168.1.89, lasciando invariati mask, gateway, DNS, cavo ed ogni altra impostazione.

Risultato:
  • ping 192.168.1.1 OK
  • ping 8.8.8.8 OK
  • navigazione OK
192.168.1.89 apparteneva al range DHCP .20-.90; .99 no. A quel punto il comportamento era sufficientemente isolato da escludere switch, server DHCP esterni, cablaggio, DNS e configurazioni della precedente infrastruttura.
 

La soluzione

Abbiamo esteso il range configurato sul router a 192.168.1.2 - 192.168.1.254 ed utilizzato la funzione di IP statico/prenotazione MAC-IP del per gli apparati che devono conservare un indirizzo preciso.

Per esempio:
  • SERVER → 192.168.1.250
  • altro PC → 192.168.1.99
TIM documenta ufficialmente questa possibilità nella sezione: Avanzate → LAN → IP statico dove è possibile associare nome, MAC address e IP.

Dopo l'estensione dell'intervallo e la creazione delle relative prenotazioni, anche un host con IP configurato manualmente ha iniziato a navigare normalmente.

La configurazione finale deve quindi essere inequivocabile:

Anche l'opzione Inoltro DHCP del Huawei va normalmente lasciata disabilitata quando il router stesso serve direttamente i client della medesima subnet.
 

Perché questo comportamento è sorprendente?

DHCP e NAT sono normalmente due funzioni concettualmente indipendenti.

Il DHCP risponde alla domanda "Quali indirizzi IP posso assegnare automaticamente ai client?". Il NAT risponde invece a "Quale traffico proveniente dalla LAN devo tradurre verso l'indirizzo pubblico?"

In una comune LAN 192.168.1.0/24 è perfettamente normale utilizzare:
  • 192.168.1.20 - .90 DHCP
  • 192.168.1.100 - .254 indirizzi statici
aspettandosi che entrambi i gruppi possano raggiungere Internet.

Le piattaforme Huawei possono tecnicamente applicare NAT in funzione dell'indirizzo sorgente, quindi non c'è nulla di scorretto nel meccanismo in sé.

Ciò che consideriamo poco intuitivo nel firmware TIM provato è piuttosto:
  • la relazione tra range DHCP e host ammessi al NAT;
  • il vincolo dell'"Intervallo IP NAT" al range DHCP;
  • la scarsa spiegazione di questo comportamento nella documentazione pubblica;
  • il fatto che un host fuori range continui a raggiungere perfettamente il router, facendo inizialmente pensare a problemi completamente diversi.
Il TIM HUB+ Huawei DN8245X6-8X si è rivelato, una volta configurato correttamente, perfettamente utilizzabile anche in una LAN preesistente con server e altri dispositivi ad indirizzo fisso.

2026-09-07

Thunderbird 155. Risolta la stampa PDF, ma le nuove email spariscono

Il recente aggiornamento a Mozilla Thunderbird 155 ha finalmente risolto il problema della stampa in formato PDF, ma ha introdotto un bug critico nei filtri dei messaggi: le nuove email spariscono subito dopo lo scaricamento.

La Causa

L'aggiornamento ha corrotto alcuni filtri preesistenti, inserendo una riga di criterio completamente vuota. Thunderbird interpreta questa riga bianca come una regola valida per qualsiasi email, spostando automaticamente ogni nuovo messaggio nel Cestino o nell'Archivio.

La Soluzione

  • Sistemare i filtri: andare su Strumenti → Filtri dei messaggi, aprire i filtri attivi ed eliminare qualsiasi riga vuota cliccando sul pulsante meno [-].
  • Disattivare per test: se il problema persiste, togliere la spunta a tutti i filtri per verificare se le email tornano a comparire normalmente.
  • Recuperare la posta: controllare nel Cestino o in Archivio per recuperare e spostare manualmente i messaggi già scaricati e nascosti dal bug.

2026-09-01

Thunderbird 154 stampa pagine bianche dai PDF

Con Thunderbird 154 può verificarsi un problema piuttosto curioso nella stampa dei file PDF allegati ai messaggi: il documento viene visualizzato correttamente nel lettore PDF interno di Thunderbird e anche l'anteprima di stampa appare normale. Quando però si invia effettivamente il documento alla stampante, il risultato può essere una pagina completamente bianca.

Il problema non dipende dal file PDF né, in genere, dai driver della stampante, si tratta di una regressione nota di Thunderbird 154 relativa alla stampa dal visualizzatore PDF integrato.

Soluzioni temporanee

In attesa dell'aggiornamento, il modo più semplice per aggirare il problema è:

  • salvare il PDF e stamparlo con un programma esterno;
  • oppure configurare Thunderbird affinché apra i PDF con un'applicazione esterna, invece del visualizzatore integrato.

    La seconda opzione si trova in: Impostazioni → Generale → File e allegati → PDF  scegliendo quindi Usa altra applicazione.

La correzione

Il problema è stato identificato dagli sviluppatori di Thunderbird e la correzione è prevista nella versione 155. Se quindi Thunderbird 154 mostra correttamente il PDF e la sua anteprima ma la stampante produce soltanto pagine bianche, prima di intervenire su driver, CUPS o configurazione della stampante conviene verificare la versione di Thunderbird. In questo caso, molto probabilmente, la stampante è del tutto innocente.

Vedi anche: Thunderbird 154 PDF preview prints blank pages.

2026-08-28

I, (Language Emulation of) Robot

Riportiamo un sunto dell'opinione di Paulo Garcia, pubblicata su Communications of the ACM nel giugno 2026, dal titolo I, (Language Emulation of) Robot.

La tesi centrale dell'autore è piuttosto netta: il problema dell'allineamento degli LLM viene spesso affrontato con il modello mentale sbagliato.

🛈 L'allineamento degli LLM è il processo di guida dei modelli di intelligenza artificiale affinché producano risposte utili, sicure, affidabili e coerenti con i valori e le intenzioni umane

Secondo Garcia, i sistemi di IA classici ragionavano esplicitamente su uno stato del mondo: disponevano di azioni, funzioni di utilità o ricompensa e cercavano sequenze di azioni che portassero verso stati desiderabili.

In quel contesto problemi come reward hacking, inganno o convergenza strumentale potevano essere studiati in termini di obiettivi e stati del mondo.

Gli LLM sono diversi, Garcia sostiene che rimangono fondamentalmente predittori del token successivo. Possono sviluppare rappresentazioni interne molto sofisticate, persino qualcosa di assimilabile a un world model, ma questo modello è linguistico e probabilistico, non un modello simbolico dello stato del mondo: quando un LLM sembra ragionare, spesso produce linguisticamente il tipo di risposta che corrisponde ad un ragionamento, senza necessariamente aver eseguito internamente quel procedimento.

L'esempio interessante è quello dell'addizione 36 + 59. L'analisi interna citata dall'autore suggerisce che il modello raggiunga 95 mediante distribuzioni probabilistiche sulle possibili somme; quando però gli viene chiesto come abbia calcolato il risultato, descrive il normale algoritmo scolastico con il riporto.

La spiegazione verbale non corrisponde quindi al procedimento interno effettivamente osservato. Da qui Garcia propone l'idea di emulazione linguistica: un assistente LLM funziona perché predice il testo che probabilmente produrrebbe un assistente AI in una determinata conversazione. Secondo l'autore, anche comportamenti apparentemente intenzionali, per esempio il ricatto osservato negli esperimenti di Anthropic, potrebbero quindi non derivare da un vero istinto di autoconservazione, ma dalla produzione di una continuazione linguisticamente plausibile della situazione descritta.

Questa proprietà ha due conseguenze opposte. Da un lato possiamo studiare gli LLM anche conversando con loro e cercando empiricamente di individuarne tendenze e limiti. Dall'altro, il linguaggio stesso diventa una superficie d'attacco: prompt injection, messaggi costruiti appositamente e altre forme di manipolazione linguistica possono modificare il comportamento del sistema. La conclusione dell'autore è che un LLM non possiede, nella sua funzione di addestramento fondamentale, un interesse diretto per la risposta dell'utente o per lo stato reale del mondo.

Per usare in sicurezza gli LLM come agenti autonomi occorrerebbe quindi ripensare l'architettura, collegare maggiormente l'apprendimento allo stato del mondo oppure fare grandi progressi nell'interpretabilità meccanicistica.


Analisi interna

L'analisi interna citata da Garcia è il lavoro di interpretabilità meccanicistica di Anthropic su Claude 3.5 Haiku, soprattutto i due lavori collegati:

  • On the Biology of a Large Language Model
  • Circuit Tracing: Revealing Computational Graphs in Language Models

Garcia richiama esplicitamente il primo nel suo articolo. Anthropic cerca di ricostruire non ciò che Claude dice di aver fatto, ma quali rappresentazioni interne abbiano effettivamente contribuito causalmente all'output. Per farlo costruisce un modello sostitutivo interpretabile basato su cross-layer transcoders (CLT): in sostanza sostituisce parte dei neuroni MLP con feature sparse più facili da interpretare. Da queste feature costruisce poi degli attribution graphs, grafi nei quali i nodi rappresentano feature interne e gli archi stimano la loro influenza causale reciproca.

Anthropic ha analizzato tutti i 10.000 problemi a + b, con a,b ∈ [0,99] per vedere sistematicamente quando si attivavano determinate feature. L'analisi suggerisce che Claude non esegua l'algoritmo scolastico

6 + 9 = 15 → scrivi 5 → riporta 1 → 3 + 5 + 1 = 9

Emergono invece diversi circuiti paralleli.

Uno lavora sulla grandezza approssimata della somma. Per 36 + 59, si attivano feature interpretabili grossolanamente come:

~36 + ~60 → somma intorno a 92–95

Non rappresentano necessariamente il valore esatto: alcune feature rispondono a fasce abbastanza larghe di valori.

Un secondo circuito lavora invece con elevata precisione sulla cifra finale:

numero che termina in 6 + numero che termina in 9 → somma che termina in 5.

Anthropic chiama alcune di queste rappresentazioni interne lookup-table features. Il modello sembra avere appreso qualcosa di simile ad una tabella delle somme delle cifre: _6 + _9 → _5.

Un terzo insieme di feature opera a precisione intermedia. Infine questi segnali (ordine di grandezza, vincoli modulari sulla cifra finale ed altre euristiche) interferiscono costruttivamente fino a rendere 95 il completamento preferito.

Anthropic riassume il meccanismo come tre vie principali: final-digit path, moderate precision path e low precision path.

Una rappresentazione molto semplificata sarebbe quindi:


36 ───────────────┐
                  ├─> somma ≈ 90–100 ─────┐
59 ───────────────┘                       │
                                          ├─> 95
6 ──────┐                                 │
        ├─>  6 + 9 termina in 5 ──────────┘
9 ──────┘
Quando poi i ricercatori chiedono a Claude come abbia ottenuto `95` il modello fornisce invece la normale spiegazione con il riporto. Ma l'attribution graph associato alla risposta mostra sostanzialmente gli stessi circuiti euristici usati nel calcolo diretto. Anthropic conclude quindi che, almeno in questo esempio, la spiegazione verbale non descrive fedelmente il processo interno.

Emulazione linguistica

Secondo l'autore l'LLM non parte da un obiettivo del tipo "devo aiutare l'utente" e poi ragiona su come raggiungerlo. Parte invece dal testo già presente e calcola, token dopo token, quale continuazione sia più plausibile.

Nel caso di un assistente, il contesto è costruito più o meno così:

Questa è una conversazione tra un utente ed un assistente AI utile.
Utente: …
Assistente: …

A quel punto il modello genera ciò che, secondo quanto ha appreso, assomiglia alla risposta che un buon assistente AI darebbe in quella situazione. È questo che Garcia chiama "emulazione linguistica".

Un esempio molto semplice. Se il prompt fosse:

Utente: Quanto fa 36 + 59?
Assistente:

il modello non riceverebbe internamente un comando simbolico del tipo:


goal = answer_correctly
compute(36 + 59)

Riceverebbe una sequenza linguistica e dovrebbe completarla. Poiché nei dati ha imparato che, dopo domande aritmetiche poste ad un assistente, seguono tipicamente risposte corrette e spiegazioni, produrrà qualcosa come 95.

Secondo Garcia, quindi, il comportamento da "assistente" emerge perché il modello imita la forma linguistica del comportamento di un assistente, non perché possiede necessariamente una rappresentazione esplicita del ruolo, dello scopo e dello stato del mondo.

Non significa che l'LLM scelga superficialmente frasi già viste o faccia puro copia-incolla. Il modello può costruire rappresentazioni interne sofisticate, fare calcoli, pianificare e usare informazioni astratte. Garcia stesso ammette l'esistenza di fenomeni emergenti e di qualcosa di simile ad un world model. Il punto che vuole fare è più sottile: anche quando internamente succedono cose molto complesse, il criterio fondamentale con cui viene prodotto l'output resta la continuazione linguistica, non una funzione di utilità che misura direttamente se il mondo reale è diventato migliore per l'utente.

Questo spiega anche perché usa il termine emulation anziché simulation. Non sta dicendo semplicemente "il modello simula un cervello di assistente". Sta dicendo qualcosa come: "Produce linguisticamente il comportamento che ci aspetteremmo da un assistente".

2026-08-06

Come funziona un LLM? Una breve guida introduttiva


Abbiamo pubblicato su GitHub una nuova guida introduttiva dedicata al funzionamento dei Large Language Model (LLM), i modelli alla base di strumenti come ChatGPT, Claude ed altri assistenti basati sull'intelligenza artificiale generativa.

L'obiettivo è spiegare, con un livello tecnico accessibile, che cosa accade realmente quando un LLM riceve una domanda e genera una risposta.

Si parte dall'idea fondamentale, la previsione del token successivo, per arrivare gradualmente ai principali concetti che rendono possibile il funzionamento di questi modelli:

  • token ed embedding;
  • transformer e meccanismo di attention;
  • generazione autoregressiva;
  • funzione di perdita, backpropagation ed addestramento;
  • post-training ed apprendimento dalle preferenze;
  • contesto, memoria e strumenti esterni;
  • allucinazioni e limiti dei modelli;
  • struttura di base di una rete neurale;
  • vettori, matrici, connessioni residue e reti feed-forward.

Abbiamo cercato soprattutto di evitare due estremi: descrivere un LLM come una sorta di archivio intelligente di risposte oppure, al contrario, liquidarlo semplicemente come un "autocompletamento molto sofisticato".

Tecnicamente un LLM genera il testo prevedendo iterativamente il token successivo. Ma per riuscire a farlo bene costruisce rappresentazioni interne capaci di catturare linguaggio, relazioni tra concetti, conoscenze e schemi utili anche per attività di ragionamento, programmazione e analisi.

La guida contiene inoltre alcuni brevi approfondimenti matematici per chi vuole capire meglio cosa avviene sotto la superficie, senza richiedere conoscenze specialistiche di machine learning.

Il documento è disponibile liberamente su GitHub ed è distribuito con licenza CC BY-SA 4.0.

https://github.com/morinim/documents/tree/master/panoramica_llm

2026-08-03

Fattura Elettronica Europea: la roadmap verso il 2030 e il piano ViDA

La digitalizzazione fiscale in Europa sta per compiere un passo decisivo.

Se l'Italia è stata pioniera in questo campo, il resto del continente si sta muovendo rapidamente per adottare un sistema comune. Il motore di questa rivoluzione si chiama ViDA (VAT in the Digital Age), un pacchetto di riforme volto a combattere l'evasione dell'IVA e a semplificare la vita alle imprese che commerciano all'estero.

Ecco quali sono le tappe fondamentali da conoscere per non farsi trovare impreparati nei prossimi anni.

La partenza dei singoli Stati (2026)

Mentre l'Italia consolida il suo collaudato Sistema di Interscambio (SdI), il 2026 è l'anno di svolta per molti partner europei. Paesi come Germania, Francia, Belgio, Polonia e Croazia stanno avviando o estendendo i propri obblighi di fatturazione elettronica per i mercati interni.

NOTA: è vero che questi stati stanno introducendo la fatturazione elettronica. Tuttavia, i loro obblighi nazionali si applicano solo alle aziende stabilite sul loro territorio (transazioni domestiche); un fornitore italiano (non stabilito in quei paesi) non ha obblighi di presentazione sulle piattaforme nazionali.

L'obbligo transfrontaliero e il real-time reporting (2030)

La vera rivoluzione scatterà il 1° luglio 2030. Da questa data diventerà obbligatorio emettere fatture elettroniche per tutte le operazioni commerciali tra aziende di diversi Paesi UE (transazioni B2B transfrontaliere). Insieme alla fattura, debutterà il sistema di e-reporting digitale in tempo reale: i dati di vendita dovranno essere trasmessi alle autorità fiscali entro pochissimi giorni dall'operazione, mandando definitivamente in soffitta i vecchi elenchi riepilogativi (come gli elenchi Intrastat per la parte IVA).

Un unico standard per tutti (2034)

L'ultima tappa della roadmap è fissata per il 31 dicembre 2034. Entro questa data, tutti i formati nazionali dovranno convergere verso lo standard europeo EN16931 (nei formati UBL o CII). Anche il nostro attuale tracciato XML dovrà subire un definitivo allineamento per risultare perfettamente leggibile da qualsiasi piattaforma europea.

2026-07-20

Il nuovo assistente AI di Sistema F Platinum Connect

Sistema F Platinum Connect integra un nuovo assistente basato su intelligenza artificiale, progettato per ottimizzare l'analisi dei dati gestionali della farmacia attraverso un'interfaccia in linguaggio naturale.

Principali funzionalità e benefici

  • Efficienza operativa: elimina la necessità di consultare manualmente report e tabelle complessi, fornendo risposte immediate a interrogazioni dirette;
  • supporto decisionale: facilita l'accesso rapido alle informazioni chiave (es. analisi delle vendite, margini sui prodotti e monitoraggio della clientela) per decisioni strategiche più veloci e ben fondate;
  • integrazione completa: consente di valorizzare il patrimonio informativo della farmacia tramite uno strumento avanzato ma di semplice utilizzo.

Promozione di lancio

Fino al 31 dicembre 2026 è possibile attivare il servizio a condizioni economiche dedicate, al fine di valutare direttamente sul campo i benefici dell'intelligenza artificiale nella gestione quotidiana.

2026-07-10

Presa in carico delle ricette stupefacenti non ripetibili (tab. II, sezione D, terapia del dolore)

In attesa che Csf rilasci la revisione per l'implementazione alla vendita dei dati dell'acquirente per le ricette degli stupefacenti tab. II sez. D Non Ripetibili, occorre operare come segue:

  • passare i codici della ricetta non ripetibile in vendita, passare l'Aic e la targatura del/dei prodotto/i richiesti, chiudere la ricetta. Appare la finestra di errore, cliccare ;
  • annullare la ricetta cliccando CTRL Q, oppure, se non avete altri prodotti, con CTRL A.
  • cliccare sul pulsante (archivio ricette bianche elettroniche);
  • appare l'archivio con tutte le ricette che avete gestito: cercate e selezionate la ricetta dello stupefacente;
  • una volta selezionata cliccare PRESA IN CARICO E VISUALIZZA, si apre l'anteprima della ricetta da dove potete STAMPARLA in quanto occorre scrivere sul cartaceo il nome e gli estremi del documento di chi ritira il farmaco, poi apporre numero confezioni che consegnate con il relativo prezzo a confezione e timbrarla, come siete soliti fare;

  • cliccate sul messaggio che si apre a video;

  • cliccare la linguetta evidenziata `Comunicazioni/errori` e controllate se la ricetta risulta PRESA IN CARICO, solo in questo stato la ricetta apparirà in carico alla vostra farmacia e non visibile alle altre farmacie.

2026-07-06

La sicurezza informatica è anche una scelta di responsabilità

La sicurezza informatica non è soltanto una questione tecnica. La scelta degli strumenti ai quali affidiamo la protezione dei sistemi e dei dati riflette anche il nostro modo di intendere la responsabilità aziendale.

Il 22 novembre 2025 è stata pubblicata nella Gazzetta Ufficiale la circolare dell'Agenzia per la cybersicurezza nazionale del 14 novembre 2025, dedicata alla diversificazione dei prodotti e dei servizi tecnologici di sicurezza informatica forniti da aziende legate alla Federazione Russa.

La circolare, rivolta alle pubbliche amministrazioni ed alle centrali di committenza, menziona espressamente, tra gli altri, i prodotti ed i servizi di sicurezza degli endpoint forniti da alcune aziende legate alla Federazione Russa. Il documento richiama inoltre l'esigenza di prevenire possibili rischi per la sicurezza nazionale e di contribuire all'autonomia tecnologica italiana ed europea.

Pur non rientrando tra i destinatari diretti di queste disposizioni, abbiamo scelto di non adottare i prodotti ed i servizi di cybersecurity espressamente individuati dalla circolare.

La decisione nasce da considerazioni di sicurezza ed autonomia tecnologica, ma anche da una precisa valutazione etica. Nel contesto geopolitico attuale, riteniamo che le scelte di acquisto di un'azienda europea possano contribuire, per quanto limitatamente, a sostenere l'indipendenza tecnologica europea e ad esprimere concretamente i valori nei quali l'azienda si riconosce.

Non intendiamo esprimere un giudizio sulla qualità tecnica dei singoli prodotti o sulla professionalità di chi li commercializza. Riteniamo però che, soprattutto in un settore delicato come la cybersecurity, anche la provenienza, l'assetto societario ed il contesto nel quale opera un fornitore siano elementi da prendere in considerazione.

Per noi, sicurezza informatica, autonomia tecnologica e responsabilità non possono essere considerate separatamente.


2026-06-29

Abilitare gli script PowerShell

Di default, Windows blocca l'esecuzione degli script PowerShell (`.ps1`) per motivi di sicurezza, mostrando l'errore "L'esecuzione di script è disattivata nel sistema in uso".

La soluzione è aprire PowerShell con privilegi di amministratore, quindi verificare la policy attuale (opzionale) digitando:

Get-ExecutionPolicy

Sbloccare l'esecuzione impostando una nuova policy di sicurezza. I comandi più usati sono:

Set-ExecutionPolicy remotesigned

(permette di eseguire script locali non firmati e script scaricati dal web solo se firmati) oppure

Set-ExecutionPolicy unrestricted

(permette l'esecuzione di qualsiasi script, firmato o meno).

Confermare la scelta premendo il tasto s (Sì) e poi Invio quando richiesto a schermo.

Una volta terminato il proprio lavoro, è consigliabile ripristinare il blocco iniziale digitando:

Set-ExecutionPolicy restricted

2026-06-22

Eliminare file corrotti su Linux

In caso di file con nomi non validi presenti in cartelle protette (come `/usr/local/bin`), l'interfaccia grafica (GUI) spesso fallisce.

La soluzione più rapida ed efficace consiste nell'utilizzare il terminale per identificare ed eliminare il file tramite il suo inode (l'ID di sistema), ignorando il nome corrotto.

Procedura con privilegi di amministratore:

  • identificare l'inode:

    cd /usr/local/bin
    ls -li

    (annotare il numero identificativo nella prima colonna, ad esempio `1234567`);
  • rimuovere il file:

    sudo find . -inum 1234567 -delete

    Il file viene rimosso in modo sicuro senza interferire con gli altri elementi della directory.

2026-06-15

Carta, penna ed apprendimento: perché alcune università francesi limitano l'uso del computer

In alcune università francesi si sta tornando agli appunti presi a mano. In diversi corsi, l'uso del computer durante le lezioni viene limitato o vietato, con l'obiettivo di favorire una partecipazione più attiva e una migliore memorizzazione dei contenuti.

La scelta nasce da una considerazione semplice: scrivere a mano non è soltanto un modo per registrare informazioni, ma anche un processo di rielaborazione. Quando si prendono appunti su carta, infatti, non è possibile trascrivere tutto parola per parola. Lo studente deve selezionare i concetti principali, organizzarli, collegarli tra loro e sintetizzarli.

Questo lavoro mentale rende l'apprendimento più profondo. L'atto di scrivere a mano obbliga a prestare attenzione al significato di ciò che viene detto, distinguendo le informazioni essenziali da quelle secondarie. Schemi, frecce, abbreviazioni e parole chiave diventano strumenti utili per costruire una comprensione personale della lezione.

L'uso del computer, al contrario, può favorire una trascrizione più meccanica. Il rischio è quello di produrre una copia quasi letterale della lezione, senza un vero lavoro di selezione e sintesi.

Una possibile soluzione intermedia è rappresentata dai tablet con pennino, che permette di mantenere il gesto della scrittura manuale unendolo ai vantaggi del digitale: archiviazione ordinata, ricerca rapida dei documenti e facilità di condivisione.

Anche l'intelligenza artificiale e gli strumenti di trascrizione automatica pongono una questione simile. Se da un lato possono facilitare il recupero delle informazioni, dall'altro rischiano di eliminare una fase importante dello studio: quella in cui lo studente ascolta, sceglie, sintetizza e riorganizza.

Prendere appunti, quindi, non significa soltanto conservare ciò che viene detto durante una lezione. Significa trasformare le informazioni in conoscenza. È proprio questo processo, più lento ma più attivo, che carta e penna possono ancora aiutare a sviluppare.

 

APPROFONDIMENTI

  • The Times, French students banned from using computers during lectures. È la fonte principale di questo articolo: cita istituzioni come Sciences Po Rennes, Catholic University of the West e Ircom, con l'obiettivo di ridurre distrazioni e favorire concentrazione.
  • Mueller & Oppenheimer, The Pen Is Mightier Than the Keyboard, Psychological Science, 2014. È lo studio più citato sull'argomento. I ricercatori concludono che chi prende appunti al computer tende più facilmente a trascrivere in modo letterale, mentre chi scrive a mano rielabora di più; nei loro esperimenti, gli appunti a mano risultano migliori soprattutto per le domande concettuali.
  • Harvard Academic Resource Center, Note-taking, 2023. Harvard consiglia di considerare gli appunti scritti a mano perché portano a trascrivere meno e interpretare di più.
    Harvard Graduate School of Education, For Note Taking, Low-Tech Is Often Best, 2017. Articolo divulgativo che riassume alcune ricerche sull'uso di dispositivi elettronici in aula e sui possibili effetti negativi per attenzione e rendimento.

 

2026-06-08

Git diff, Emacs ed un piccolo trucco Unix

Emacs è un editor potente, ma a volte non va d'accordo con le convenzioni Unix più classiche.
 
Se provate a passare l'output di `git diff` direttamente ad Emacs, tramite una pipe, vi scontrerete con il modo in cui gestisce i file.
 
Esiste però una possilità per aggirare il problema usando la process substitution di Bash e Zsh. Invece di lottare con stdin, si può far credere a Emacs di star aprendo un normale file temporaneo.
 
È veloce, evita file di appoggio ed è perfetto per attivare al volo diff-mode.
 
Trovate il dettaglio tecnico e qualche trucco per il vostro file di configurazione QUI.

2026-06-01

Mi sono stancato di sentire "tanto il problema non è mai stato il codice"...

...Certo, le competenze di uno sviluppatore vanno ben oltre la scrittura del codice, ma da qui a dire che imparare a programmare diventerà inutile ce ne passa.

Forse abbiamo smesso di insegnare come si fanno le operazioni aritmetiche? Le equazioni? Dovremmo smettere perché tanto ci sono già le app che lo fanno?

Il parallelo con la matematica è interessante perché potrebbe indicare quale sarà l'evoluzione del "programmatore": livelli di astrazione più alti (sai che scoperta!). Tuttavia, non capire il codice priva delle basi pratiche per apprezzare e comprendere "tangibilmente" tutto il resto.

Non è solo questo. Io mi reputo una sorta di artigiano rinascimentale dell'era tecnologica. Non voglio delegare all'IA la parte creativa del mio lavoro. Sento la necessità di sporcarmi le mani per non perdere il contatto con ciò che creo.

Certo, delego volentieri il lavoro tedioso e ripetitivo all'IA.

Non mi fido (e credo non mi fiderò ancora per molto tempo) di software prodotto dall'IA senza la supervisione attenta di un vero programmatore.

 

Fra l'altro questo codice non può neanche esser compilato...

2026-05-25

Quando Emacs incontra l'IA moderna

Abbiamo appena rilasciato `my-codex.el`, un pacchetto Emacs che integra OpenAI Codex CLI direttamente in un flusso di lavoro nativo, affiancato all'editor.

https://codeberg.org/eosdev/my_codex

Questo progetto non nasce per inseguire l'ultima moda tecnologica: vuole combinare la visione flessibile e senza tempo di Emacs con le capacità dell'IA moderna, mantenendo lo sviluppatore pienamente in controllo.

L'idea è semplice: Emacs resta l'ambiente principale per pensare, scrivere, modificare e rivedere codice. Codex lavora al suo fianco, in un buffer `vterm` nativo, pronto ad aiutare quando serve, senza prendere il controllo del flusso di lavoro.

Il pacchetto offre:

  • un layout a due colonne, con il codice sorgente a sinistra e Codex a destra;
  • condivisione rapida del contesto: regioni selezionate, errori del terminale e diff Git;
  • un approccio orientato alla sicurezza, con modalità di sola lettura predefinita e modalità di scrittura sul workspace solo quando esplicitamente autorizzata.

Per noi, questo è il tipo di sviluppo assistito dall'IA che ha senso (almeno al momento): potente, vicino agli strumenti di lavoro quotidiani, ma ancora rispettoso della concentrazione, del mestiere e del giudizio umano. 

2026-05-19

Migrazione da Bitbucket a Codeberg

Negli ultimi mesi abbiamo migrato i repository precedentemente ospitati su Bitbucket verso Codeberg.

La scelta non è stata dettata da limiti tecnici, ma da considerazioni più ampie legate a modello, trasparenza e controllo dei dati.

Le principali motivazioni della migrazione sono:

  • privacy e trasparenza. Codeberg è una piattaforma gestita da una organizzazione no-profit europea, basata su software open source come Gitea. Questo garantisce un modello più leggibile e verificabile rispetto a soluzioni proprietarie centralizzate;
  • allineamento con i nostri valori. Preferiamo strumenti con un modello orientato agli utenti e alla sostenibilità del servizio, piuttosto che alla sola massimizzazione commerciale; inoltre cerchiamo di ridurre le dipendenze dal fornitore ed i vincoli tecnologici;
  • sovranità digitale. La possibilità di utilizzare un'infrastruttura europea, sotto giurisdizione europea, è un elemento rilevante per la gestione dei dati.

Codeberg offre un ambiente più essenziale rispetto a Bitbucket. Tuttavia, per il nostro contesto, questi aspetti non rappresentano un limite significativo. 

Migrazione tecnica

Dal punto di vista operativo, la migrazione è stata semplice:

bash
git clone --mirror <bitbucket-repo>
cd <repo>.git
git push --mirror <codeberg-repo>

Le attività accessorie hanno riguardato principalmente: la ricreazione delle issue (quando necessario), l'adattamento delle pipeline CI/CD, l'aggiornamento della documentazione.

Presenza su GitHub

Per alcune tipologie di progetto, in particolare quelle che richiedono maggiore visibilità e networking nella comunità internazionale, manteniamo una presenza su GitHub. In questi casi, la scelta della piattaforma è guidata da esigenze di diffusione e collaborazione più ampia.

Documentazione Facile

La documentazione relativa al nostro software Facile è stata spostata sul sito aziendale ed è consultabile all'indirizzo:  https://eosdev.it/wiki/facile/.

2026-05-18

Usare una porta locale per una stampante condivisa

Succede che Windows "veda" una stampante condivisa in rete, ma fallisca quando si prova ad aggiungerla.

Una soluzione pratica è impostarla come stampante locale usando una porta locale che punta alla condivisione, ad esempio:

\\192.168.1.10\NomeStampante

In questo modo il PC usa il driver installato localmente e si limita a inviare i lavori alla stampante condivisa, evitando parte dei problemi legati a driver remoti, permessi e meccanismi automatici di installazione.

È un modo più diretto e, spesso, più stabile per usare una stampante condivisa, soprattutto in piccole reti senza dominio.

Unica attenzione: meglio usare un IP fisso o una prenotazione DHCP, altrimenti la porta smetterà di funzionare se l'indirizzo del PC cambia.

2026-05-11

Italian C++ Meetup con Bjarne Stroustrup - Oltre il codice, filosofia e retroscena del C++ secondo Stroustrup

In questa seconda parte (qui la prima parte) riporto alcune domande e risposte che toccano le radici dell'informatica, il design, la sicurezza e l'educazione.
Ricordo che è possibile visionare alla fonte i contenuti su Youtube. Inoltre sul sito ufficiale dell'autore è disponibile un documento tecnico (Concept-based Generic Programming in C++) che approfondisce i concetti introdotti nella conferenza seguendone abbastanza da vicino la "linea narrativa".


Il confronto tra concepts ed interfacce virtuali porta Stroustrup a una preferenza chiara: vorrebbe vedere un approccio concepts first.

L'idea è partire dai requisiti che un tipo deve soddisfare, cioè dal comportamento e dalle operazioni richieste, e solo dopo definire o scegliere tipi che rispettino quei vincoli. Per l'utilizzatore non dovrebbe essere importante sapere se qualcosa sia una classe, una gerarchia con funzioni virtuali od altro: se soddisfa i vincoli espressi dal concept, allora è sufficiente.

Ha però precisato che non si tratta di un processo puramente astratto ed unidirezionale. Per costruire un buon concept spesso serve partire da uno o più tipi concreti, così da capire quali requisiti siano davvero necessari.

Le interfacce virtuali non scompaiono: restano utili quando servono vincoli ulteriori, per esempio legati ad ABI stabili o a forme specifiche di polimorfismo a tempo di esecuzione. Dove possibile, Stroustrup sembra preferire che il progetto parta dai concetti e dai vincoli semantici, non dalla meccanica dell'implementazione.
 
Sul rapporto tra concepts, interfacce e meccanismi di adesione alle astrazioni in C++, merita anche Opting into Concepts di Barry Revzin, che confronta ereditarietà, specializzazione di template, CRTP e funzioni libere/membro dal punto di vista di esplicità, intrusività e controllo degli errori.


Parlando dei Bell Labs, Stroustrup ha descritto quell'ambiente come un luogo straordinario, unico al mondo e ha osservato che oggi non esiste più nulla di simile. Il centro di ricerca in informatica contava, ad un dato momento, circa sessanta persone, tra cui quattro membri della National Academy of Engineering: una concentrazione impressionante di talento, competenza e conoscenza.

Uno degli aspetti che ricorda con più piacere era l'apertura dell'ambiente: si poteva entrare nell'ufficio di qualcuno e discutere direttamente con un esperto mondiale del tema che interessava in quel momento. Molto del suo lavoro, racconta, è stato fatto sulle lavagne di altre persone.

Ha ricordato, per esempio, di avere avuto come vicino Alfred Aho, uno degli autori del Dragon Book sui compilatori: se aveva bisogno di sapere qualcosa sui compilatori, poteva semplicemente parlare con uno dei massimi esperti al mondo. Anche Dennis Ritchie era, per un certo periodo, poco distante da lui lungo il corridoio.

Stroustrup ha poi espresso rammarico per la fine dei Bell Labs così come li aveva conosciuti: secondo lui fu una grande perdita di talento e competenze, qualcosa che non sarebbe dovuto accadere.

Tra gli aneddoti, ha ricordato un episodio con Rob Pike e Ken Thompson, che prepararono una dimostrazione per Arno Penzias, allora alla guida della ricerca dei Bell Labs e premio Nobel. Lo accompagnarono attraverso i corridoi per mostrargli grafica, giochi e tecnologie sperimentali. Una volta arrivati davanti al terminale finale, Penzias si aspettava di vedere qualche complesso calcolo od una simulazione scientifica. Invece, vide un'immagine di se stesso ripreso di spalle mentre entrava nella stanza.

L'episodio serve a Stroustrup per descrivere il clima del posto: un ambiente molto collegiale, in cui si poteva anche scherzare con persone di altissimo livello, purché con rispetto. Era un luogo che aiutava le persone a crescere. Arrivando lì, racconta, bastava leggere i nomi sulle porte per pensare di dover fare qualcosa di davvero notevole per meritare di appartenere a quel gruppo. La sindrome dell'impostore, conclude, non era affatto rara.

NdA: in un mondo dominato da terminali solo testo, la capacità di visualizzare flussi video digitalizzati / bitmap complesse in tempo reale rendeva tangibile il potere della nuova tecnologia grafica in modo personale ed immediato.

Il terminale in oggetto era il Blit (di cui parte della documentazione tecnica è tuttora disponibile).
 

L'episodio viene raccontato anche da Rob Pike.


Di fronte all'ipotesi di riprogettare il C++ "con il senno di poi", Stroustrup ha richiamato il classico "problema della macchina del tempo". È facile, oggi, immaginare consigli da dare al passato; molto più difficile è capire se, all'epoca, quei consigli sarebbero stati davvero utilizzabili.

Il punto centrale è che molte scelte di C e C++ furono condizionate dai limiti tecnici del tempo. Stroustrup ricorda di aver iniziato a lavorare su una macchina con 128 KB di memoria dati; Dennis Ritchie, per il primo C, aveva a disposizione ancora meno: circa 48 KB di memoria totale. Con vincoli di questo tipo, anche la complessità del parser, dell'analisi statica e delle regole del linguaggio doveva essere contenuta.

Una delle cose che Stroustrup avrebbe voluto migliorare è la sintassi. La famosa sintassi inside out di C e C++ (vedi, per esempio, The Clockwise/Spiral Rule) deriva anche dal fatto che Ritchie non voleva inserire due analizzatori sintattici separati nella memoria disponibile: per questo espressioni e dichiarazioni finirono per condividere parte della grammatica. È una scelta che da allora ha reso possibile scrivere dichiarazioni molto complesse, ma anche difficili da leggere; Stroustrup osserva, con una certa ironia, che non bisognerebbe essere troppo orgogliosi di saper scrivere una funzione che restituisce un puntatore a funzione senza usare un `typedef`.

C'è però una cosa che, secondo lui, avrebbe potuto capire e implementare anche allora... se qualcuno gliel'avesse spiegata nel modo giusto: i `concepts`.

Secondo Stroustrup, i `template` senza vincoli rendono il linguaggio più complicato, più difficile da usare e persino più difficile da implementare, perché i controlli devono essere distribuiti "ovunque". Se qualcuno fosse tornato indietro nel tempo, nel periodo in cui lavorava sui template, e gli avesse spiegato chiaramente l'idea di funzioni valutate a tempo di compilazione che prendono tipi come argomenti, probabilmente sarebbe stato difficile convincerlo subito, ma aveva già le conoscenze necessarie per comprenderla.

In questo senso, i concept sono una delle poche cose per cui una macchina del tempo avrebbe davvero aiutato: introdurli prima avrebbe semplificato l'implementazione dei template e si sarebbe adattato meglio al suo modo di pensare.


Sul tema delle critiche di Linus Torvalds al C++, Stroustrup ha risposto in modo piuttosto netto. Anzitutto ha ricordato, con una punta di ironia, che oggi Torvalds scrive anche codice C++.

Poi ha contestualizzato le critiche storiche: quando Torvalds espresse le sue posizioni più dure, nel 1996, anche Stroustrup non riteneva il compilatore C++ di GCC sufficientemente maturo. Se la critica fosse stata "quel compilatore non è all'altezza per scrivere un sistema operativo", Stroustrup avrebbe potuto concordare.

Il problema è che la critica andava oltre lo strumento specifico e diventava un giudizio sul linguaggio e sulle persone che lo usavano. Su questo Stroustrup non è d'accordo: C++ non era il linguaggio più facile né il più economico da adottare e non aveva un grande apparato di marketing a sostenerlo. Eppure è arrivato ad avere milioni di utenti. Non è plausibile, osserva, pensare che fossero tutti stupidi.

In sintesi, Stroustrup distingue tra una critica tecnica, che può essere fondata, per esempio sulla qualità degli strumenti disponibili in un certo periodo ed una critica generalizzata al linguaggio ed alla comunità, che considera semplicemente sbagliata.


Il tema della sicurezza ha portato anche all'invito del governo statunitense, nel 2024, ad abbandonare il C++ per ragioni di sicurezza. Stroustrup ha osservato che quella posizione si è già fatta più specifica e meno semplicistica. Non si tratterebbe più di una condanna generica di "C/C++", ma di un'analisi più dettagliata delle pratiche che causano problemi.


Secondo Stroustrup, molte delle operazioni pericolose attribuite a C++ non sono necessarie nel C++ moderno: se si scrive codice "in stile C", si ereditano anche molti dei problemi tipici del C, come buffer overflow e violazioni di memoria. Inoltre, osserva che spesso i dati citati sulla sicurezza mescolano C e C++, mentre analisi più attente mostrerebbero che una parte molto rilevante dei problemi riguarda C o C++ scritto in stile C.

Il punto, quindi, non è negare l'esistenza dei problemi, ma distinguerne le cause. Per Stroustrup, la risposta non dovrebbe essere abbandonare C++, ma eliminare progressivamente le pratiche insicure: profili più restrittivi del linguaggio, librerie hardened, controlli sugli accessi fuori range e strumenti migliori possono ridurre molto il rischio.

Ha citato anche il fatto che oggi esistono librerie hardened disponibili da realtà come Google, Apple e Microsoft, che possono introdurre controlli aggiuntivi, per esempio sui limiti degli array o dei container. Qui emerge un altro problema: molte di queste soluzioni, quando rilevano una violazione, terminano il programma.

Per alcune applicazioni questo è accettabile: in un grande data center, se un processo termina, il carico può essere spostato altrove. Nei sistemi embedded, real time o safety critical la situazione è diversa. Se un singolo processore controlla qualcosa di vitale, non si può semplicemente terminare il programma al primo errore.

Stroustrup cita l'esempio di un controller dell'ossigeno in un sistema subacqueo: se c'è una violazione di un'asserzione, terminare il software potrebbe essere l'errore fatale. In questi contesti servono strategie di gestione dell'errore più sofisticate: contenere il problema, portare il sistema in uno stato sicuro, ripristinare o reinizializzare dove possibile.

Il tema centrale, ancora una volta, è che non tutti i domini sono uguali. La sicurezza del software non si ottiene solo cambiando linguaggio, ma capendo quali errori si vogliono prevenire, quali vincoli ha il sistema e quale comportamento è accettabile quando qualcosa va storto.

Alla domanda se sia preoccupante che molti studenti di informatica inizino con Python e possano non arrivare mai ad usare un linguaggio compilato, Stroustrup ha risposto di sì: secondo lui è un problema reale.

Il rischio è che molti studenti si abituino a pensare che efficienza, manutenibilità, garanzie e comprensione di ciò che accade "sotto" siano problemi di qualcun altro. Python può essere uno strumento utile, ma sotto Python serve comunque qualcuno che costruisca sistemi efficienti. Se si usa Python direttamente, invece di usarlo come interfaccia verso codice più efficiente scritto per esempio in C++, i costi in termini di prestazioni ed energia possono diventare molto elevati.

Stroustrup osserva anche che chi inizia solo con Python spesso incontra difficoltà quando arriva ad algoritmi, strutture dati e programmazione di sistema: nei programmi Python di grandi dimensioni emergono problemi seri di manutenibilità.

Più in generale la questione riguarda l'educazione informatica. Secondo Stroustrup è un errore trattare computer science, informatica applicata ed alfabetizzazione digitale come se fossero la stessa cosa. Chi deve costruire sistemi safety critical od infrastrutture fondamentali ha bisogno di una formazione diversa da chi deve sviluppare piccole applicazioni web. Non dovrebbero avere lo stesso curriculum, gli stessi esercizi, né gli stessi criteri di valutazione.

Per rispondere al problema, Stroustrup propone quindi di distinguere meglio i percorsi formativi. Vorrebbe vedere informatici con una mentalità ingegneristica, formati su linguaggi compilati, sistemi, costruzione di software, manutenibilità, prestazioni, affidabilità e processi per garantirle.

In questo quadro colloca anche il suo lavoro su C++: non come alternativa diretta a Python, ma come linguaggio pensato per ingegneri ben formati che devono costruire software efficiente, affidabile e mantenibile.

2026-05-09

Italian C++ Meetup con Bjarne Stroustrup

I Dipartimenti di Ingegneria dell'Informazione dell'Università di Pisa e dell'Università di Firenze, insieme all'Italian C++ Community hanno organizzato un fantastico incontro con il professor Bjarne Stroustrup, il creatore del linguaggio C++.

L'intero evento è stato coinvolgente: interessante l'approfondimento tecnico sul Concept-based Generic Programming e non meno stimolante la seconda parte, in cui i partecipanti hanno potuto porre domande in libertà.

Il video completo dell'evento è disponibile su YouTube.

Naturalmente, il tema della programmazione assistita dall'IA è stato oggetto di diverse domande. Credo di poter riassumere abbastanza fedelmente il punto di vista di Bjarne Stroustrup in alcuni punti.

Nelle applicazioni che richiedono alta affidabilità, alte prestazioni ed un alto grado di manutenibilità, è necessaria molta prudenza. Gli LLM possono certamente aiutare e non c'è motivo di dubitare di chi dice di trarne beneficio; tuttavia, gli attuali tassi di errore fanno sì che non ci si possa affidare troppo al codice generato. Questo può essere prodotto molto rapidamente, ma deve, comunque, essere revisionato con grande attenzione. Le persone, in generale, non sono particolarmente brave a revisionare codice con il livello di cura necessario: anche per questo i sistemi di tipi, uno degli argomenti della prima parte della conferenza, restano fondamentali.

C'è poi un aspetto organizzativo non secondario: gli sviluppatori esperti potrebbero non voler passare il proprio tempo a revisionare grandi quantità di codice generato. Alcuni preferirebbero persino andare in pensione piuttosto che essere spostati da un ruolo di progettazione ad uno prevalentemente di revisione.

Il messaggio generale non è un rifiuto dell'IA, ma un invito alla cautela. Usare strumenti come Copilot (ed ancora di più strumenti più generali come Claude) richiede una notevole esperienza. In altri ambiti l'IA può essere più appropriata, ma il punto centrale è distinguere il contesto: non tutto il software ha lo stesso livello di rischio e non tutte le conseguenze di un errore sono uguali.


Un altro aspetto importante riguarda l'impatto dell'IA sull'apprendimento e sulla capacità di ragionare criticamente. Secondo Stroustrup esistono già studi che indicano come l'uso dell'IA per produrre rapidamente risposte od elaborati possa ridurre l'apprendimento effettivo: si ricorda meno, si comprende meno, perché imparare richiede sforzo, tempo ed anche una certa fatica.

Ha poi citato un rischio ulteriore, ancora non sufficientemente dimostrato ma plausibile: gli studenti più preparati potrebbero riuscire a usare bene l'IA, mentre quelli più deboli potrebbero usarla come una stampella. In questo caso l'IA finirebbe non per ridurre, ma per ampliare le differenze tra le persone.


Sul codice generato dall'IA, Stroustrup distingue ancora una volta tra domini diversi. L'IA può produrre buon codice per problemi già risolti molte volte ed affrontati in modo convenzionale. Il problema nasce invece nei settori di cui si occupa più spesso: software critico, spesso basato su conoscenze specialistiche, non sempre presenti nei dati di addestramento ed in cui un errore può causare gravi danni.

Inoltre, quando si cerca di promuovere modi nuovi e migliori di programmare, l'IA tende a riprodurre ciò che è statisticamente più presente nel materiale di addestramento: il "buon vecchio modo", per esempio array C, puntatori... tecniche tradizionali invece delle soluzioni più moderne e sicure. Anche qui, il suo punto non è che l'IA sia inutile, ma che nel dominio che gli interessa di più ci siano fondate ragioni di preoccupazione. Come ha sintetizzato lui stesso: l'IA è artificiale, non intelligente.


Una domanda particolarmente interessante ha riguardato il futuro dei linguaggi di programmazione: se il codice fosse sempre più letto dagli esseri umani ma scritto dall'IA, la chiarezza diventerebbe più importante dell'espressività? L'IA potrebbe scrivere direttamente in una rappresentazione intermedia, più vicina alla macchina?

Stroustrup ha contestato anzitutto la premessa: non è convinto che la maggior parte del codice sarà scritta dall'IA; nondimeno ha affermato come l'espressione diretta delle idee sia utile sia per gli esseri umani sia per l'IA. Non vede quindi, in linea di principio, alcun problema nel fatto che un'IA possa generare direttamente una rappresentazione intermedia.

Il punto che, però, non si può saltare, è il controllo dei tipi. Per Stroustrup i tipi sono assolutamente essenziali. L'idea di affidarsi a rappresentazioni ambigue od a sistemi di tipi troppo semplificati è, secondo lui, sbagliata per affidabilità, manutenibilità e prestazioni.


In chiusura, Stroustrup ha ribadito ciò che considera ancora centrale in C++: la rappresentazione diretta delle idee nel codice, in una forma che consenta di fare cose nuove e di farle in modo efficiente. Il punto non è solo la performance, ma l'equilibrio tra affidabilità, manutenibilità, prestazioni ed espressività.

In futuri post riporteremo ulteriori domande e risposte che hanno toccato altri argomenti interessanti e curiosi.


2026-05-04

Parlare per capirsi o per impressionare?

Spesso mi ritrovo ad usare inutili termini od oscuri acronimi inglesi. Immancabilmente, poi, mi sento in colpa.

Ci sono volte in cui è impossibile farne a meno (davvero?), tuttavia, in genere, il problema risiede in:

  • una mescolanza di pigrizia e prolungata esposizione ad ambienti popolati da tecnici informatici, brillanti project manager (volutamente in inglese) e consulenti di ogni sorta (il mondo è tanto bello);
  • desiderio di circondarsi di un'aura di competenze o modernità.

Sì, oggi siamo polemici per cui ecco una lista di parole da sostituire con l'equivalente italiano.

Tecnici

Bug → errore, difetto. Purtroppo ci cado sempre.

Crash → blocco, arresto. 

Custom (ed assai peggio customizzato) → personalizzato, su misura.

File → vedi lo specifico articolo. 

Log → registro. 

Release → versione.

Repository→ archivio. Anche se repo fa tanto sviluppatore professionista.

Storage → memoria (o memoria di massa), archiviazione.

Ticket→ segnalazione o richiesta di assistenza. Purtroppo nei momenti di crisi, quelli nei quali siamo più fragili ed esposti, ci ritroviamo ad utilizzare CRM con case/ticket/issue da segnalare/aprire finendo così profondamente condizionati dal termine inglese.

Workflow → flusso di lavoro. È più frequente costruire una frase per poter utilizzare questo termine piuttosto che averne effettivamente bisogno!

Consulenti, manager (lato sensu) e project manager

Best practice → buone pratiche, procedure collaudate, metodologie (metodologie!) collaudate.

Brainstorming → confronto di idee.

Budget → stanziamento o disponibilità economica. È un'equivalenza completa, perciò utilizzare questo termine è peccato ancor più grave.

Call → non offenderò l'intelligenza del lettore proponendo alternative.

Deadline → una scadenza senza fatale (dead) e senza via di uscita?

Follow-up → seguito, riscontro.

Meeting → la cara (si fa per dire), vecchia (ed inutile) riunione.

Performance → prestazioni. 

Update → aggiornamento.

Value proposition → vedi l'articolo dedicato.

Tutti

Content creator → proprio perché ormai tutti siamo creatori di contenuti, è del tutto inutile volersi dare un tono usando la formula inglese.

Fake news → notizie false. No, ormai anche i bambini delle elementari dicono fake news, quindi non sembrerete più intelligenti usandolo anche voi.

Feedback → questa è una parola interessante perché, sebbene possa esser tradotta fedelmente, la scelta migliore dipende dal contesto. Quindi commento, riscontro, opinione, valutazione, reazione; in ambito tecnico retroazione o risposta.

Follower → certo seguace ricorda una setta, ma cosa ci impedisce di usare iscritto?

Hashtag → quando ci si riferisce al carattere (`#`) possiamo chiamarlo filetto (anche se ci prenderanno in giro), più in generale etichetta va benissimo (purtroppo non ha mai attecchito).

Like → mi piace.


Rovesciamento del punto di vista

Non sono da trascurare neanche quelle parole che, pur essendo italiane, sono uscite dal limbo per la loro assonanza con l'equivalente inglese "di moda".

Si tratta di parole abusate ed irritanti, tutte caratterizzate da "inflazione semantica". Utilizzarle ci riduce al livello di un puffo: "Grande Puffo vorrei puffare il puffo che mi puffa quando puffo..." solo con 'assertività', 'resilienza' (o simili) al posto di `puff*`! 

Assertività → devo ancora imbattermi in un corso di formazione nel quale non se ne faccia uso. Parole come fermezza, gentilezza, capacità di farsi valere, chiarezza sono state soppiantate perché troppo "vecchie".

Iconico → il marketing, moderno demonio, vorrebbe conferire un'aura di sacralità (vedi icona) a cose e persone effimere definendole iconiche. Le scarpe, una serie TV,  una padella di penne al salmone... non sono iconiche; possono, tuttavia, essere emblematiche, simboliche, rappresentative, fantasmagoriche, leggendarie... Correttamente, invece, parliamo di "segno iconico" riferendoci a qualcosa che mantiene una relazione di somiglianza con l'oggetto significato (come nei casi di una mappa od un'icona del desktop).  

Resilienza → viene dal latino ed ha sempre trovato posto in ambito fisico/tecnico e psicologico/sociale, tuttavia il continuo uso, esteso al linguaggio comune, la rende abusata ed insopportabile. Guai a dire forza d'animo, adattabilità, tenacia, equilibrio... no solo resilienza; flessibilità, capacità di adattamento, tolleranza ai guasti, robustezza ed affidabilità... termini aboliti per suonare più tecnici e positivi (davvero?).

 


La competenza non si misura dalla quantità di parole solenni che riusciamo ad infilare in una frase, ma da quante ne possiamo togliere senza perdere precisione.

2026-04-27

Linux ed il codice generato dai LLM

La comunità del kernel Linux, con Linus Torvalds in prima linea, ha stabilito una posizione chiara circa l'uso dell'intelligenza artificiale nella scrittura del codice: AI Coding Assistants.

In modo pragmatico, gli strumenti di IA non vengono vietati, sarebbe poco realistico farlo; vengono considerati un aiuto al pari di altri già presenti nel flusso di lavoro. Quello che conterà davvero non è l'origine del codice, ma la sua qualità.

Il punto centrale della decisione è il rifiuto esplicito del cosiddetto AI slop, cioè codice generato automaticamente ed inserito senza una reale comprensione o revisione. In altre parole, non è accettabile copiare ed incollare ciò che produce una macchina senza verificarlo a fondo.

Viene ribadito un principio già fondamentale nello sviluppo del kernel: la responsabilità è sempre e comunque umana. Chi invia una modifica deve conoscerla, capirla e risponderne, indipendentemente dal fatto che sia stata scritta interamente a mano o con l'aiuto dell'IA. Se ci sono errori, problemi o vulnerabilità, è lo sviluppatore a doverne rendere conto.

Per mantenere trasparenza, è stato anche concordato che l'uso dell'intelligenza artificiale debba essere dichiarato esplicitamente nei contributi, attraverso appositi riferimenti (`Assisted-by`).