Go down

Svincolarsi dai servizi oligopolistici realizzando applicazioni autonome è possibile
Costruzione di App indipendenti e discussione sul vibe coding

CodiceConvivialePlus si propone di permettere a chiunque di implementare, verificare e correggere una propria idea con l'assistenza di un dispositivo di IA generativa gestito in locale. Una scelta grondante buone intenzioni e contraddizioni

CodiceConvivialePlus, App sperimentale scritta in html, pensata da me (essere umano) e realizzata da Google  Antigravity (assistente artificiale), ha lo scopo, se non di azzerare, di ridurre la dipendenza dallo stesso Antigravity e da altri assistenti software simili che confinano gli utenti nella recinzione oligopolistica di GAFAM.

CodiceConvivialePlus è del tutto free e ha l'ambizione di permettere a chiunque lo voglia di assumere il ruolo di architetto digitale, perché messo nelle condizioni di configurare, verificare e correggere una propria idea trasformandola in oggetto digitale funzionante con l'assistenza di un dispositivo di IA generativa gestito in locale.

Una scelta grondante buone intenzioni e contraddizioni, che ho fatto commentare a NotebookLM, con uno pseudo-podcast, di seguito trascritto. Tra le mie varie convinzioni peregrine, vi è infatti l'idea che approcciarsi alle elaborazione dei dispositivi attualmente dominanti il mercato della conoscenza e dell'attenzione sia utile a comprenderne meglio logica operativa e pervasività culturale. 

Il tema è il vibe coding, la possibilità di affidare in parte o totalmente la stesura materiale del codice necessario allo sviluppo di un software agli assistenti artificiali. Le posizioni dei due interlocutori sono polarizzate, come è d'uso nel mondo attuale e come sottolineato dagli pseudonimi utilizzati. Oltre alla lettura "di merito", con l'obiettivo di  formarsi un'opinione circostanziata, suggerisco dì valutare se i concetti tecnici usati chiariscono o disturbano la comprensione della discussione simulata.

VibeCodingFan
Benvenuti a "Il Dibattito". Immaginate per un momento di poter creare un'intera applicazione interattiva, che ne so, un calcolatore cyberpunk completamente funzionante.


AntiVibeCoding
Con tanto di suoni sintetizzati e logica matematica, immagino.


VibeCodingFan
Esattamente. E immaginate di poterlo fare semplicemente descrivendolo a parole in una chat. Cioè, niente codice JavaScript da scrivere a mano, nessun framework ostico da configurare.


AntiVibeCoding
Sembra un po' la solita promessa fantascientifica, sai? Il sogno proibito di ogni creativo.


VibeCodingFan
Certo, ma oggi quel sogno ha una forma ben precisa. In questa discussione, infatti, analizziamo il materiale di base fornito dal manuale utente di codice conviviale PLUS.


AntiVibeCoding
Che, ricordiamolo, è un'applicazione progettata per fungere da clone locale di Anti-Gravity.


VibeCodingFan
Esatto, uno spazio di lavoro che usa modelli linguistici locali, come quelli ospitati tramite Ollama o LM Studio, per generare e avviare applicazioni web monolitiche istantaneamente.


AntiVibeCoding
E questo ci porta alla domanda centrale di oggi, giusto?

VibeCodingFan
Proprio così. Leggendo questo manuale, ci troviamo di fronte a un bivio concettuale enorme. L'avvento di dispositivi del genere dimostra che lo sviluppo software è diventato solo una questione di idee, dove il codice è una mera esecuzione automatizzata.


AntiVibeCoding
Oppure, al contrario, conferma che le competenze tecniche operative di un programmatore umano restano imprescindibili?


VibeCodingFan
Ecco, io rappresento la prima fazione. Sono convinto che questo manuale provi che il codice è ormai un dettaglio esecutivo. Il vero valore oggi risiede unicamente nell'ideazione.

AntiVibeCoding
E io invece, leggendo lo stesso identico documento, sono profondamente convinta dell'opposto: l'astrazione totale è un'illusione e il programmatore umano è assolutamente essenziale.

VibeCodingFan
Va bene, allora partiamo subito dalle posizioni. Se analizziamo il fulcro dell'esperienza utente, quello che il manuale chiama il "flusso di lavoro consigliato", vediamo che il paradigma è completamente ribaltato.


AntiVibeCoding
In che senso è ribaltato, scusa?

VibeCodingFan
Nel senso che l'utente non apre più un editor di testo vuoto, inserisce semplicemente un prompt concettuale. Guarda l'esempio del manuale, è chiarissimo. Dice, crea una lavagna interattiva per disegnare con stili al neon.

AntiVibeCoding
Sì, conosco bene quell'esempio.


VibeCodingFan
Ecco, e in quel preciso istante, il modello locale genera l'HTML, il CSS per i bagliori al neon e tutta la logica JavaScript per tracciare il mouse.


AntiVibeCoding
Tutto in tempo reale.


VibeCodingFan
Esatto. Il sistema estrae il codice e lo renderizza in una sandbox. Non c'è sintassi da imparare, non c'è ansia da pagina bianca. Stiamo passando dallo scrivere istruzioni a conversare con un'entità che costruisce la nostra visione.


AntiVibeCoding
Capisco l'entusiasmo, davvero, ma questa visione svanisce molto in fretta se non sai come accendere questa fantomatica entità.


VibeCodingFan
Ma no, dai, è semplicissimo.


AntiVibeCoding
Insomma, non proprio. Tu citi il passo quattro del manuale, il prompt concettuale. Ma cosa richiede il documento nei passi 1, 2 e 3?


VibeCodingFan
Richiede di avviare il modello, ovviamente.


AntiVibeCoding
Richiede che l'utente sappia esattamente cos'è un server locale. L'utente deve sapere che Ollama gira all'indirizzo localhost sulla porta 11434. Questo non è linguaggio naturale, questa è topologia di rete pura.


VibeCodingFan
Vabbè, è solo un indirizzo da copiare.


AntiVibeCoding
Ma chiunque abbia mai provato a far comunicare due servizi in locale sa che non è mai solo un indirizzo. Cioè, devi capire se la porta è occupata, se il demone è in esecuzione in background o se è crashato.


VibeCodingFan
Ma questi sono dettagli operativi minimi.


AntiVibeCoding
Minimi per noi. Ma Codice Conviviale Plus presuppone un livello di alfabetizzazione tecnica e sistemistica prima ancora di farti pronunciare la parola neon. Senza un programmatore a monte, l'ideatore puro non parte nemmeno.


VibeCodingFan
D'accordo, concedo che ci sia un momento di setup iniziale. Ma paragonare questo a una barriera invalicabile, cioè, è come dire che non puoi essere un grande musicista se non sai saldare i cavi del tuo amplificatore.


AntiVibeCoding
Paragone interessante. Ma se l'amplificatore prende fuoco?


VibeCodingFan
Lo configuri una volta sola. E una volta superato quello scoglio di configurazione, entri nella chat centrale. Ed è qui che il processo iterativo diventa puramente linguistico.


AntiVibeCoding
Spiegati meglio.


VibeCodingFan
Voglio dire che l'iterazione non è più una caccia al bug. Vuoi cambiare un colore? Scrivi "Rendi lo sfondo blu notte". Vuoi una nuova funzione? Chiedi "Aggiungi un pulsante per cancellare tutto".


AntiVibeCoding
Sì, è come se la macchina capisse sempre perfettamente l'intento.


VibeCodingFan
L'intelligenza artificiale estrae automaticamente il nuovo codice. Sei letteralmente come un regista cinematografico. Cioè, il regista non manovra fisicamente la cinepresa, ma è la sua visione che crea il film.


AntiVibeCoding
Capisco perché la pensi così. ma io la affronto da una prospettiva un po' diversa. Un vero regista, in questo scenario, deve sapere come aggiustare la cinepresa se si inceppa la pellicola.


VibeCodingFan
E perché dovrebbe incepparsi?


AntiVibeCoding
Perché si inceppa eccome. Prendi la sezione risoluzione dei problemi del manuale. C'è uno scenario esplicito in cui l'app non mostra assolutamente nulla nella sandbox. Zero assoluto, uno schermo bianco.


VibeCodingFan
Sì, il problema del markdown.


AntiVibeCoding
Esatto. Questi modelli LLM sono macchine probabilistiche. Se il modello, per una minima variazione, dimentica di racchiudere il codice nel blocco markdown corretto, i tre backtick seguiti dalla parola HTML, la magia svanisce.


VibeCodingFan
È una piccola inefficienza, un errore di formattazione del testo che verrà risolto nelle prossime versioni.


AntiVibeCoding
Ma per ora esiste. E guarda cosa costringe a fare. Il manuale dice chiaramente che l'utente deve intervenire nel tab Codice HTML. L'ideatore puro deve forzare il rendering a mano.


VibeCodingFan
Un piccolo intervento manuale.


AntiVibeCoding
Piccolo. Se non sai distinguere a colpo d'occhio dove finisce il testo discorsivo dell'IA e dove inizia il vero blocco Doctype HTML, sei bloccato. La tua idea muore perché manca un accento grave. Qui crolla l'illusione.


VibeCodingFan
Ok, ammetto che dover ripulire un tag markdown sia una frizione, ma stiamo perdendo di vista la vastità di ciò che viene generato tra quei due tag.


AntiVibeCoding
In che senso?


VibeCodingFan
Lascia che ti porti l'esempio della libreria Esempi Plus, descritta nella barra sinistra del manuale.


AntiVibeCoding
I template precaricati.


VibeCodingFan
Esatto. Il manuale cita tre applicazioni specifiche. C'è un Cyberpunk Calc con Web Audio API, c'è un RPG Task Quest gamificato con tanto di punti esperienza, E c'è uno Zen pomodoro con generazione procedurale di rumore bianco.


AntiVibeCoding
Idee complesse, indubbiamente.


VibeCodingFan
Fermati un attimo a riflettere su cosa significa. Le Web Audio API in JavaScript sono notoriamente complesse.


AntiVibeCoding
Appunto, richiedono ingegneria vera e propria.


VibeCodingFan
Ma l'utente di questo sistema non deve sapere nulla di tutto ciò. L'utente sa solo che vuole un suono sintetico anni '80 quando preme il tasto uguale. La traduzione di questa idea in complessi nodi matematici audio viene gestita interamente dall'IA.


AntiVibeCoding
Finché funziona il tag markdown, certo.


VibeCodingFan
Ma il limite non è più so come scriverlo, capisci? È riesco a immaginarlo. La generazione procedurale per il timer pomodoro richiede concetti di matematica avanzata in JS. Che tu possa evocarla desiderandola è un salto epocale.


AntiVibeCoding
Mi dispiace, ma non ne sono affatto convinta. Lascia che ti spieghi il perché.


VibeCodingFan
Prego.


AntiVibeCoding
Tu parli di evocare complessità, ma riesci a immaginarla e poi la fai crollare in tre iterazioni. C'è una parola chiave nel manuale che tu hai citato all'inizio e che distrugge tutta questa presunta scalabilità: monolitica.


VibeCodingFan
Monolitica? Sì. E allora?


AntiVibeCoding
Il manuale specifica che tutto il codice HTML, CSS e JavaScript risiede in un singolo file indipendente. Tutto schiacciato lì dentro.


VibeCodingFan
Il che lo rende portabile.


AntiVibeCoding
Lo rende un incubo di manutenzione, un vero debito tecnico immediato. Se chi ci ascolta ha mai programmato, sentirà i brividi a pensare a un file di 3000 righe dove lo stato globale dell'app si mischia ai fogli di stile.


VibeCodingFan
Ma stiamo parlando di prototipazione…


AntiVibeCoding
Aspetta, aspetta, il problema è proprio quando usi un LLM. L'intelligenza artificiale ha una finestra di contesto limitata. Fa fatica a mantenere la coerenza in documenti lunghissimi. Se chiedi alla chat di aggiungere una funzione di salvataggio al gioco RPG…


VibeCodingFan
L'IA riscrive la parte interessata.


AntiVibeCoding
Oppure sovrascrive classi CSS per sbaglio o rompe la logica degli eventi perché lo spazio dei nomi è globale. È come costruire un palazzo con la colla a caldo invece del cemento. Regge finché è alto 20 cm. Serve un programmatore per creare architettura e modularità.


VibeCodingFan
È un punto interessante, anche se lo inquadrerei in modo diverso. Stai valutando un dispositivo di esplorazione creativa con i parametri di una pipeline enterprise. Non stiamo costruendo sistemi bancari qui.


AntiVibeCoding
Non importa, un software che cresce deve essere scalabile.


VibeCodingFan
Ma guarda che la tua critica al monolite ha un rovescio della medaglia fenomenale. Il manuale lo dice esplicitamente. Quando l'app ti soddisfa, fai clic su Scarica per salvare la tua applicazione monolitica sul computer.


AntiVibeCoding
E ti ritrovi con un pasticcio illeggibile.


VibeCodingFan
Ti ritrovi con il veicolo perfetto per la distribuzione. Non ci sono dipendenze, non devi installare pacchetti da terminale e così via. L'utente clicca, ottiene un file, lo manda a un amico via email ed esso funziona in qualsiasi browser.

AntiVibeCoding
Sì, per un progettino ludico, forse.


VibeCodingFan
L'architettura tradizionale, con decine di file e script di build, serve a un team di 50 ingegneri, ma per un singolo ideatore è zavorra. In questo contesto, l'approccio monolitico è un vantaggio, non un limite.


AntiVibeCoding
Va bene, ammettiamo pure che per te il monolite sia accettabile. C'è però un altro ostacolo fondamentale descritto nel manuale. Un ostacolo che impedisce assolutamente di considerare questo dispositivo puramente ideativo.


VibeCodingFan
Vediamo l'attrito infrastrutturale legato al CORS, il cross origin resource sharing, una formalità, una formalità.


AntiVibeCoding
Il manuale gli dedica un'ampia sezione. Il tuo frontend deve inviare il prompt concettuale al demone di Ollama. I browser, per sicurezza, bloccano queste richieste incrociate di default.


VibeCodingFan
Sì, è una normale policy del browser.


AntiVibeCoding
Ma cosa deve fare il nostro ideatore puro, quello che non sa nulla di codice, per risolvere questo blocco? Il manuale è spietato. Deve aprire un terminale, PowerShell su Windows o Bash su Mac.


VibeCodingFan
Solo una volta.


AntiVibeCoding
E deve impostare variabili d'ambiente. Ollama origins uguale asterisco. Deve dire al sistema operativo di accettare richieste. Ti rendi conto del salto cognitivo?


VibeCodingFan
È un comando copia e incolla.


AntiVibeCodingSei passato da “voglio una lavagna al neon” a “devo alterare le variabili di sistema da riga di comando per bypassare le policy del browser”. E se fallisce? Il manuale dice di premere F12, aprire la console per sviluppatori e analizzare la rete.


VibeCodingFan
Questo se ci sono problemi insoliti.


AntiVibeCoding
L'idea pura muore prima ancora di nascere se l'utente non sa cos'è un log di rete. Servono un sistemista o almeno uno sviluppatore che capisca il protocollo HTTP.


VibeCodingFan
Non sono affatto convinto da questa linea di ragionamento. Stai prendendo il peggior scenario possibile. L'impostazione del CORS tramite terminale è solo una delle strade descritte.


AntiVibeCoding
Ma è la strada per Ollama, che è il motore principale.


VibeCodingFan
E infatti il manuale dedica un'intera parte a LM Studio. Lì la soluzione non richiede il terminale. Vai nella scheda Local Server, selezioni il modello con un'interfaccia grafica e fai clic su Start. Il manuale sottolinea che LM Studio abilita il course automaticamente di default.


AntiVibeCoding
Devi comunque sapere che esiste il problema del course per scegliere di usare LM Studio.


VibeCodingFan
Richiede solo un po' di alfabetizzazione digitale contemporanea. Permettimi di citare un'altra presunta barriera dal troubleshooting. Riguarda l'audio nel Cyberpunk Calc che non parte.


AntiVibeCoding
L'audio context bloccato.


VibeCodingFan
Esatto, la soluzione non è debuggare il ThreadJS. Il manuale spiega che i browser moderni bloccano l'audio finché l'utente non compie un'azione. Basta cliccare sulla pagina generata per sbloccare i suoni.


AntiVibeCoding
Appunto, è il browser che impone le sue rigide regole strutturali.


VibeCodingFan
Certo, ma imparare che il browser vuole un clic per l'audio è come imparare che lo smartphone ha bisogno del Wi-Fi per scaricare un aggiornamento. È l'ambiente. Non cancella il fatto miracoloso che tutta l'app sia stata scritta da un'IA basandosi su una chiacchierata.


AntiVibeCoding
Io credo che sminuire questi attriti sia pericoloso. La realtà è che il software non vive nel vuoto delle idee platoniche, vive in ambienti ostili come un browser web. Quando il dispositivo espone la complessità, come il corso o l'audio context, tu devi piegarti alle regole della macchina.


VibeCodingFan
Insomma, devi adattarti.


AntiVibeCoding
Devi indossare la tuta da meccanico e capire dove mettere le mani. L'ideatore non basta.


VibeCodingFan
Eppure, se facciamo un passo indietro e guardiamo l'impatto complessivo del layout di codice conviviale Plus, il salto di Paradigma è innegabile.


AntiVibeCoding
Su questo, forse possiamo trovare un terreno comune.


VibeCodingFan
Guarda la descrizione visiva. Sidebar a sinistra, chat al centro per l'ideazione e workspace a destra con lo split view. Quest'ultimo è geniale, no?


AntiVibeCoding
Lo split view sì.


VibeCodingFan
Vedi il codice generato affiancato all'anteprima che si aggiorna in tempo reale. Questo design sposta il focus dall'editor di testo alla chat, al dialogo. Abbassa drasticamente la barriera di ingresso per testare concetti.


AntiVibeCoding
Ti concedo che lo spazio cognitivo sia cambiato. La combinazione tra LLM locale e SplitView permette di testare un prototipo a una velocità impensabile. La barriera per iniziare è crollata.


VibeCodingFan
Esatto, la frizione per dare vita a un'idea è quasi zero.


AntiVibeCoding
Ma il mio avvertimento rimane. È un dispositivo di esplorazione. Finché ci saranno limiti monolitici, cors da sbloccare e markdown che si rompono, l'architetto avrà sempre bisogno di capire il codice per trasformare quel prototipo di sabbia in un edificio solido.


VibeCodingFan
Forse oggi è così, ma immagina quando questi modelli sapranno gestire progetti multi-file, il ruolo del programmatore si eleverà a quello di un direttore d'orchestra.


AntiVibeCoding
Sarà interessante vedere se sposterà solo il problema a un livello di astrazione superiore, perché di solito, quando nascondi la complessità, diventa solo più difficile da risolvere quando si rompe.


VibeCodingFan
Questo ci lascia con molta materia su cui riflettere. Stiamo forse assistendo a una transizione tra l'epoca dell'ingegneria dei sistemi e il sogno dell'idea pura, e sicuramente ci sarà molto altro da esplorare in questo materiale.


AntiVibeCoding
Assolutamente sì.


VibeCodingFan
Bene, per oggi chiudiamo qui la nostra discussione; grazie per averci seguito e alla prossima su "Il dibattito".

---

Dizionarietto "Codice Conviviale Plus"

Ambiente monolitico (o Applicazione monolitica)

Nel contesto di questa applicazione, significa che tutto il codice necessario a far funzionare il programma (la struttura grafica, lo stile visivo e i meccanismi di funzionamento) si trova schiacciato all'interno di un unico file indipendente. È l'equivalente di scrivere un intero saggio su un unico foglio lunghissimo invece di dividerlo in capitoli: è facilissimo da spostare e inviare (basta un file), ma diventa un incubo da correggere o ingrandire se supera una certa dimensione.

Audio Context (e blocco del browser)

È il "regista audio" interno del browser che gestisce la riproduzione e la creazione di suoni complessi. Per evitare che i siti web aggrediscano l'utente con suoni e pubblicità rumorose non appena si apre una pagina, i browser moderni bloccano l'Audio Context di default. Il blocco si scioglie solo quando l'utente compie un'azione esplicita, come fare clic in un punto qualsiasi della schermata.

Backtick e Blocco Markdown

Il backtick è il carattere dell'accento grave isolato (`). Nella scrittura digitale, tre backtick di fila seguiti dalla parola "html" dicono al computer: "Attenzione, da qui in poi non sto più chiacchierando, inizia il codice vero e proprio". Se l'Intelligenza Artificiale dimentica di inserire questi simboli di chiusura, il sistema si confonde e mostra una schermata bianca invece del programma funzionante.

CORS (Cross-Origin Resource Sharing)

È una fondamentale regola di sicurezza dei browser. Immagina che il browser sia un portiere severo: di default, impedisce a una pagina web (il pannello di controllo dell'applicazione) di parlare e scambiare dati con un programma che gira in un'altra zona "segreta" del computer (il server locale dell'IA). Per farlo funzionare, occorre "sbloccare" questa policy spiegando al sistema che i due soggetti sono autorizzati a comunicare.

Demone (Daemon)

Un programma per computer che viene eseguito silenziosamente in background, cioè dietro le quinte, senza mostrare una finestra o un'interfaccia grafica sullo schermo. Rimane in ascolto, pronto a scattare e a rispondere non appena un'altra applicazione (come l'interfaccia di Codice Conviviale Plus) gli invia una richiesta.

Finestra di contesto (Context Window)

Rappresenta la quantità massima di dati (parole, concetti, righe di codice) che un modello di Intelligenza Artificiale riesce a "tenere a mente" contemporaneamente in una singola sessione di lavoro. Se il codice diventa troppo lungo e supera questo limite, l'IA inizia a manifestare "amnesie", dimenticando i pezzi precedenti o facendo errori di distrazione.

GAFAM

Un acronimo giornalistico che unisce le iniziali dei cinque colossi tecnologici globali: Google, Apple, Facebook (Meta), Amazon e Microsoft. Nel testo viene citato per indicare la "recinzione oligopolistica", ovvero la tendenza di queste multinazionali a confinare gli utenti all'interno dei propri servizi digitali chiusi e centralizzati nel Cloud.

Generazione procedurale

Tecnica informatica in cui i contenuti (come il rumore bianco dello Zen Pomodoro o una mappa di un gioco) non vengono disegnati o registrati prima da un essere umano, ma vengono creati sul momento da un algoritmo matematico mentre il programma è in esecuzione.

Interfaccia grafica (GUI) vs Terminale (Riga di comando)

  • L'Interfaccia grafica è il modo moderno e visuale di usare un computer: ci sono pulsanti da cliccare, schede e menu (come in LM Studio).
  • Il Terminale (o riga di comando, come PowerShell o Bash) è il metodo classico: una schermata nera in cui l'utente deve digitare a mano stringhe di testo precise e comandi sistemistici per far fare qualcosa alla macchina (come per configurare Ollama).

Localhost e Porta (es. localhost:11434)

Sono la mappa stradale interna del tuo computer.

  • Localhost è l'indirizzo IP convenzionale che significa letteralmente "questo computer".
  • La Porta (il numero dopo i due punti) è come il numero di un interno di un condominio. Dire al programma di andare su localhost:11434 significa dirgli: "Cerca il servizio di IA che risiede dentro questo stesso computer, precisamente all'interno numero 11434".

Modello linguistico locale (LLM Locale)

Un motore di Intelligenza Artificiale generativa (come quelli gestiti tramite i software Ollama o LM Studio) che viene scaricato, installato ed eseguito interamente all'interno dei componenti hardware del proprio computer, senza inviare dati su internet o appoggiarsi a server esterni di terze parti. Garantisce la piena sovranità sui propri dati.

Sandbox (Scatola della sabbia)

Un ambiente virtuale di prova isolato e sicuro all'interno del browser. Permette di avviare ed eseguire il codice appena generato dall'IA in totale sicurezza: se l'applicazione ha un errore o impazzisce, i danni rimangono confinati dentro la "scatola", senza poter infettare o bloccare il resto del computer.

Sandbox Screen / Split View

Una configurazione visiva dello schermo divisa in due parti affiancate. Da un lato l'utente vede il codice sorgente (la componente testuale ingegneristica), dall'altro vede istantaneamente l'anteprima visiva e interattiva del programma in funzione, permettendo una verifica immediata delle modifiche.

Vibe Coding

Un neologismo del mondo digitale che descrive un nuovo modo di sviluppare software. L'essere umano non scrive materialmente le righe di codice sintattico, ma si limita a "dettare il ritmo" e a esprimere l'idea concettuale a parole (in linguaggio naturale), lasciando che sia l'assistente artificiale a occuparsi della stesura tecnica dell'opera.

Web Audio API

Un sistema standardizzato e sofisticato integrato nei moderni browser che mette a disposizione degli sviluppatori potenti strumenti per controllare, manipolare, mixare e generare flussi audio direttamente via codice, consentendo la creazione di sintetizzatori o effetti sonori complessi senza software esterni.




Pubblicato il 21 maggio 2026

Marco Guastavigna

Marco Guastavigna / Marco Guastavigna, già docente di scuola secondaria e formatore di insegnanti, attualmente ricercatore inopportuno e provocatore

https://concetticontrastivi.org/