<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Git on Melabit</title>
    <link>https://static.233.196.69.159.clients.your-server.de/it/tags/git/</link>
    <description>Recent content in Git on Melabit</description>
    <generator>Hugo</generator>
    <language>it</language>
    <lastBuildDate>Mon, 16 Mar 2026 18:00:00 +0000</lastBuildDate>
    <atom:link href="https://static.233.196.69.159.clients.your-server.de/it/tags/git/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Antigravity: l&#39;LLM lo fa meglio</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2026/03/16/antigravity-l-llm-lo-fa-meglio/</link>
      <pubDate>Mon, 16 Mar 2026 18:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2026/03/16/antigravity-l-llm-lo-fa-meglio/</guid>
      <description>&lt;p&gt;Nelle ultime settimane ho scritto delle mie esperienze con Antigravity, o meglio con gli &lt;em&gt;agenti&lt;/em&gt; (più o meno) &lt;em&gt;intelligenti&lt;/em&gt; integrati in questo editor. I risultati sono stati contrastanti: a volte &lt;a href=&#34;https://melabit.com/it/2026/01/21/sorpresa-antigravity/&#34;&gt;gli agenti si sono dimostrati molto efficaci&lt;/a&gt;, alleviando con precisione alcuni compiti complessi o ripetitivi, in altri casi &lt;a href=&#34;https://melabit.com/it/2026/02/16/antigravity-dalla-sorpresa-al-dubbio/&#34;&gt;non hanno combinato niente di buono&lt;/a&gt; facendo solo perdere una montagna di tempo.&lt;/p&gt;&#xA;&lt;h4 id=&#34;programmare-male-con-lllm&#34;&gt;Programmare male con l&amp;rsquo;LLM&lt;/h4&gt;&#xA;&lt;p&gt;Fra tutti gli impieghi più o meno utili degli LLM, uno dei più controversi è l&amp;rsquo;idea che chiunque possa usare un LLM per programmare, anche quando di programmazione non se ne sa una cippa. È il cosidetto &lt;em&gt;vibe coding&lt;/em&gt;, un concetto che si può &lt;a href=&#34;https://x.com/karpathy/status/1886192184808149383&#34;&gt;riassumere così&lt;/a&gt;: &amp;ldquo;vedo cose, dico cose, copio e incollo cose, e nella maggior parte dei casi funziona&amp;rdquo;. Non è una citazione da &lt;a href=&#34;https://www.youtube.com/watch?v=-w9EBTB8a3Y&#34;&gt;Nanni Moretti&lt;/a&gt;, lo dice Andrej Karpathy, uno dei fondatori di OpenAI.&lt;/p&gt;&#xA;&lt;p&gt;Ora, mettendo da parte le tante questioni relative alla sicurezza, alla manutenibilità di codice prodotto senza sapere bene cosa fa, alla &lt;a href=&#34;https://taylorandfrancis.com/knowledge/Engineering_and_technology/Engineering_support_and_special_topics/Regression_to_the_mean/&#34;&gt;deriva verso la media&lt;/a&gt; che implica che la qualità del codice prodotto dall&amp;rsquo;IA tenderà inevitabilmente a crollare, basta sperimentare un po&amp;rsquo; in prima persona, anche con progetti semplici, per accorgersi che l&amp;rsquo;idea del &lt;em&gt;coding per tutti&lt;/em&gt; non funziona, e che se vuoi ottenere qualcosa di buono dall&amp;rsquo;IA devi sapere bene cosa vuoi e come lo vuoi.&lt;/p&gt;&#xA;&lt;p&gt;Ci ho provato io stesso a fare &lt;em&gt;vibe coding&lt;/em&gt;: ho chiesto a Gemini di &lt;a href=&#34;https://melabit.com/it/2026/03/04/antigravity-un-driver-scritto-dall-ia/&#34;&gt;scrivere un driver per una videocamera Arducam&lt;/a&gt;, spiegandogli solo le cose indispensabili a aspettando che facesse tutto da solo.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Questo approccio però non ha funzionato. Ci sono volute ore ed ore di lavoro, di errori, di risposte inconcludenti, di correzioni e di consigli per raggiungere un risultato accettabile.&lt;/p&gt;&#xA;&lt;p&gt;E questo solo perché a un certo punto ho buttato alle ortiche l&amp;rsquo;idea di far fare tutto a Gemini e gli ho dato dei consigli su come procedere. Senza quelli sarebbe stato solo un sacco di tempo buttato via inutilmente.&lt;/p&gt;&#xA;&lt;div style = &#34;border-style: solid; border-width: 0px 0px 0px 12px; border-color: #03a87c; background-color: #defef6; padding: 1em; color:black; font-size:100%;&#34;&gt;&#xA;&lt;p&gt;Anche &lt;a href=&#34;https://emeralit-muloblog.statichost.page/&#34;&gt;Mimmo&lt;/a&gt; ha provato, in modo del tutto indipendente da me, a far scrivere a &lt;a href=&#34;https://lumo.proton.me&#34;&gt;Lumo&lt;/a&gt; un programma in Micropython per gestire la mia Arducam Mini 5MP Plus con il Pico. E anche Lumo, che è senza dubbio uno dei migliori chatbot in circolazione, non ce l&amp;rsquo;ha fatta da solo.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/br&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2026-03-16-antigravity-l-llm-lo-fa-meglio/Gemini_Generated_Image_jb08gsjb08gsjb08.jpg&#34; alt=&#34;&#34;&gt;&#xA;&amp;ndash; &lt;em&gt;Immagine generata da &lt;a href=&#34;https://gemini.google.com&#34;&gt;Google Gemini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;programmare-meglio-con-lo-stesso-llm&#34;&gt;Programmare meglio con lo stesso LLM&lt;/h4&gt;&#xA;&lt;p&gt;Tutto questo però non significa che un LLM non possa essere prezioso quando si programma, basta solo usarlo come si deve. Bisogna spiegargli per filo e per segno cosa deve fare, mettergli a disposizione tutto il materiale che gli serve per lavorare, e piazzargli dei paletti entro cui deve muoversi.&lt;/p&gt;&#xA;&lt;p&gt;In poche parole, bisogna trattarlo come un tesista o una stagista, con poca esperienza ma tanta voglia di imparare.&lt;/p&gt;&#xA;&lt;p&gt;Sono bastati infatti due prompt scritti con criterio, il primo che definiva la struttura delle directory del progetto e istruiva l&amp;rsquo;agente ad usare fin dall&amp;rsquo;inizio &lt;code&gt;git&lt;/code&gt; per il controllo di versione del codice e &lt;code&gt;uv&lt;/code&gt; per installare i pacchetti Python che gli sarebbero potuti servire,&lt;/p&gt;&#xA;&#xA;&lt;details class=&#34;question&#34; open&gt;&#xA;    &lt;summary class=&#34;question&#34;&gt;&#xA;        Prompt&#xA;    &lt;/summary&gt;&#xA;    &lt;div class=&#34;question&#34;&gt;&#xA;        &#xA;    &#xA;    &lt;p&gt;Start a new project and name it &lt;code&gt;project13-pico-camera5mp-reprise&lt;/code&gt;.&lt;/p&gt;&#xA;    &lt;p&gt;Read the &lt;code&gt;AGENTS.md&lt;/code&gt; file that defines your basic behaviour.&lt;/p&gt;&#xA;    &lt;p&gt;Create a new directory with this name and initialize an empty &lt;code&gt;git&lt;/code&gt; repository using &lt;code&gt;git init&lt;/code&gt;&#xA;    Use &lt;code&gt;uv&lt;/code&gt; for managing Python packages.&#xA;    All the code must stay in the &lt;code&gt;code&lt;/code&gt; directory, with no subdirectories within it.&#xA;    This project does not need a &lt;code&gt;data&lt;/code&gt; directory and the &lt;code&gt;output&lt;/code&gt; directory must be renamed as &lt;code&gt;images&lt;/code&gt;.&lt;/p&gt;&#xA;    &#xA;&#xA;&lt;div&gt;&#xA;&lt;/details&gt;&#xA;&#xA;&lt;p&gt;e il secondo che conteneva tutto quello che mi è venuto in mente per aiutarlo a lavorare,&lt;/p&gt;&#xA;&#xA;&lt;details class=&#34;question&#34; open&gt;&#xA;    &lt;summary class=&#34;question&#34;&gt;&#xA;        Prompt&#xA;    &lt;/summary&gt;&#xA;    &lt;div class=&#34;question&#34;&gt;&#xA;        &#xA;    &#xA;    &lt;p&gt;I have a Rasperry Pi Pico 2W connected to a Arducam 5MP Plus OV5642 Mini Module Camera Shield (&lt;a href=&#34;https://www.arducam.com/arducam-5mp-plus-spi-cam-arduino-ov5642.html%29&#34;&gt;https://www.arducam.com/arducam-5mp-plus-spi-cam-arduino-ov5642.html)&lt;/a&gt;.&lt;/p&gt;&#xA;    &lt;p&gt;I have connected the camera to the Pico using the standard layout found in the documentation:&lt;/p&gt;&#xA;    &lt;table&gt;&#xA;      &lt;thead&gt;&#xA;          &lt;tr&gt;&#xA;              &lt;th&gt;Camera&lt;/th&gt;&#xA;              &lt;th&gt;CS&lt;/th&gt;&#xA;              &lt;th&gt;MOSI&lt;/th&gt;&#xA;              &lt;th&gt;MISO&lt;/th&gt;&#xA;              &lt;th&gt;SCK&lt;/th&gt;&#xA;              &lt;th&gt;GND&lt;/th&gt;&#xA;              &lt;th&gt;VCC&lt;/th&gt;&#xA;              &lt;th&gt;SDA&lt;/th&gt;&#xA;              &lt;th&gt;SCL&lt;/th&gt;&#xA;          &lt;/tr&gt;&#xA;      &lt;/thead&gt;&#xA;      &lt;tbody&gt;&#xA;          &lt;tr&gt;&#xA;              &lt;td&gt;Pico&lt;/td&gt;&#xA;              &lt;td&gt;GP5&lt;/td&gt;&#xA;              &lt;td&gt;GP3&lt;/td&gt;&#xA;              &lt;td&gt;GP4&lt;/td&gt;&#xA;              &lt;td&gt;GP2&lt;/td&gt;&#xA;              &lt;td&gt;GND&lt;/td&gt;&#xA;              &lt;td&gt;3V3&lt;/td&gt;&#xA;              &lt;td&gt;GP8&lt;/td&gt;&#xA;              &lt;td&gt;GP9&lt;/td&gt;&#xA;          &lt;/tr&gt;&#xA;      &lt;/tbody&gt;&#xA;    &lt;/table&gt;&#xA;    &lt;p&gt;The main documentation for the camera can be found at these links:&lt;/p&gt;&#xA;    &lt;ul&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;https://docs.arducam.com/Arduino-SPI-camera/Legacy-SPI-camera/Introduction/&#34;&gt;https://docs.arducam.com/Arduino-SPI-camera/Legacy-SPI-camera/Introduction/&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;https://docs.arducam.com/Arduino-SPI-camera/Legacy-SPI-camera/Hardware/Arducam-Shield-Mini-5MP-Plus/&#34;&gt;https://docs.arducam.com/Arduino-SPI-camera/Legacy-SPI-camera/Hardware/Arducam-Shield-Mini-5MP-Plus/&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;https://docs.arducam.com/Arduino-SPI-camera/Legacy-SPI-camera/Software/Quick-Start-Guide/&#34;&gt;https://docs.arducam.com/Arduino-SPI-camera/Legacy-SPI-camera/Software/Quick-Start-Guide/&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;https://docs.arducam.com/Arduino-SPI-camera/Legacy-SPI-camera/Pico/Camera-Module/SPI-Camera/&#34;&gt;https://docs.arducam.com/Arduino-SPI-camera/Legacy-SPI-camera/Pico/Camera-Module/SPI-Camera/&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;https://www.uctronics.com/download/Image_Sensor/OV5642_DS.pdf&#34;&gt;https://www.uctronics.com/download/Image_Sensor/OV5642_DS.pdf&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;https://blog.arducam.com/downloads/shields/ArduCAM_Camera_Shield_Software_Application_Note.pdf&#34;&gt;https://blog.arducam.com/downloads/shields/ArduCAM_Camera_Shield_Software_Application_Note.pdf&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;li&gt;&lt;a href=&#34;https://www.uctronics.com/download/Amazon/B0067-B0068-Pico.pdf&#34;&gt;https://www.uctronics.com/download/Amazon/B0067-B0068-Pico.pdf&lt;/a&gt;&lt;/li&gt;&#xA;    &lt;/ul&gt;&#xA;    &lt;p&gt;The code to drive this camera with the Pico is written in C (i.e., for Arduino) and CircuitPython, and can be found here: &lt;a href=&#34;https://github.com/ArduCAM/PICO_SPI_CAM&#34;&gt;https://github.com/ArduCAM/PICO_SPI_CAM&lt;/a&gt;. You can download all the files you need from this repository.&#xA;    In particular, the files for CircuitPython are in the &lt;code&gt;Python&lt;/code&gt; directory:&lt;/p&gt;&#xA;    &lt;ul&gt;&#xA;    &lt;li&gt;&lt;code&gt;Arducam.py&lt;/code&gt;, which contains the functions to drive the camera,&lt;/li&gt;&#xA;    &lt;li&gt;&lt;code&gt;OV5642_reg.py&lt;/code&gt; which, as far as I have understood, defines the resolutions  allowed  when taking pictures, and&lt;/li&gt;&#xA;    &lt;li&gt;&lt;code&gt;boot.py&lt;/code&gt; , but I don&amp;rsquo;t know what it does.&#xA;    In the same directory there is also the script &lt;code&gt;ArduCAM_Mini_5MP_Plus_VideoStreaming.py&lt;/code&gt; which sends the video captured by the camera to a Windows application and that is of no use here.&lt;/li&gt;&#xA;    &lt;/ul&gt;&#xA;    &lt;p&gt;Please write a basic CircuitPython script that uses the functions defined in &lt;code&gt;Arducam.py&lt;/code&gt; to test that the camera works and can take photos.&lt;/p&gt;&#xA;    &#xA;&#xA;&lt;div&gt;&#xA;&lt;/details&gt;&#xA;&#xA;&lt;p&gt;per permettere a &lt;code&gt;Gemini 3 Flash&lt;/code&gt; di generare rapidamente uno script in CircuitPython che gira direttamente sul Pico e che fa tutto quello che gli è stato chiesto.&lt;/p&gt;&#xA;&lt;p&gt;In verità, la primissima versione dello script non funzionava, ma è bastato a Gemini modificare una sola riga del driver &lt;code&gt;Arducam.py&lt;/code&gt; fornito dal produttore per mettere tutto a posto (ha tolto uno zero al valore della frequenza).&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://static.233.196.69.159.clients.your-server.de/img/2026-03-16-antigravity-l-llm-lo-fa-meglio/one-line-diff.png&#34;&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2026-03-16-antigravity-l-llm-lo-fa-meglio/one-line-diff.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&#xA;&amp;ndash; &lt;em&gt;La linea evidenziata in azzurro indica l&amp;rsquo;unica modifica effettuata da Gemini al file &lt;code&gt;Arducam.py&lt;/code&gt;; a sinistra il file originale, a destra quello modificato da Gemini.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Tutti gli altri file forniti dal produttore sono rimasti intatti.&lt;/p&gt;&#xA;&lt;p&gt;Alla prova dei fatti, il driver del produttore funzionava benissimo con il Pico e Gemini si è limitato ad imparare ad usarlo per scrivere lo script che cattura l&amp;rsquo;immagine direttamente dal microcontroller (una cosa che con un po&amp;rsquo; di pazienza avrei potuto fare anch&amp;rsquo;io).&lt;/p&gt;&#xA;&lt;h4 id=&#34;guidare-lllm-o-lasciarlo-fare-da-solo&#34;&gt;Guidare l&amp;rsquo;LLM o lasciarlo fare da solo?&lt;/h4&gt;&#xA;&lt;p&gt;La differenza rispetto al &lt;em&gt;vibe coding&lt;/em&gt; della &lt;a href=&#34;https://melabit.com/it/2026/03/04/antigravity-un-driver-scritto-dall-ia/&#34;&gt;volta scorsa&lt;/a&gt; è abissale.&lt;/p&gt;&#xA;&lt;p&gt;In quel caso Gemini aveva lavorato furiosamente per ore, combinando dei tali casini da costringermi a riavviare per ben due volte il Mac. E nel frattempo si era convinto (e mi aveva convinto) che il driver &lt;code&gt;Arducam.py&lt;/code&gt; fosse incompatibile con Il Pico e l&amp;rsquo;aveva riscritto da zero, buttando via una libreria essenziale per interloquire con la videocamera (quella indicata dalla freccia rossa),&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://static.233.196.69.159.clients.your-server.de/img/2026-03-16-antigravity-l-llm-lo-fa-meglio/diff-libraries.png&#34;&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2026-03-16-antigravity-l-llm-lo-fa-meglio/diff-libraries.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&#xA;&amp;ndash; &lt;em&gt;Modifiche alle prime righe del file &lt;code&gt;Arducam.py&lt;/code&gt;; a sinistra il file originale, a destra come appare lo stesso file dopo le modifiche di Gemini. La freccia indica una libreria importante che viene rimossa di peso da Gemini.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;e togliendo senza nessun motivo, e senza nemmeno un guadagno reale in termini di efficienza o di funzionalità (anzi!), la maggior parte delle funzioni definite nello stesso file (si noti nell&amp;rsquo;immagine qui sotto la differenza nella lunghezza del codice originale, a sinistra, rispetto a quello modificato, a destra).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://static.233.196.69.159.clients.your-server.de/img/2026-03-16-antigravity-l-llm-lo-fa-meglio/diff-file-length.png&#34;&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2026-03-16-antigravity-l-llm-lo-fa-meglio/diff-file-length.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&#xA;&amp;ndash; &lt;em&gt;Modifiche al file &lt;code&gt;Arducam.py&lt;/code&gt;. I rettangoli rossi mettono in evidenza la differenza fra il numero di righe del codice originale (a sinistra) e di quello modificato da Gemini (a destra).&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;E non contento di tutto ciò, aveva pure stravolto il file &lt;code&gt;OV5642_reg.py&lt;/code&gt; contenente i dati di configurazione della videocamera, adducendo dei presunti problemi di memoria. Problemi che evidentemente non esistevano, visto che in questo secondo esperimento tutto è filato liscio usando il file originale del produttore.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://static.233.196.69.159.clients.your-server.de/img/2026-03-16-antigravity-l-llm-lo-fa-meglio/diff-registers.png&#34;&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2026-03-16-antigravity-l-llm-lo-fa-meglio/diff-registers.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&#xA;&amp;ndash; &lt;em&gt;Modifiche al file &lt;code&gt;OV5642_reg.py&lt;/code&gt;, contenente i dati di configurazione della videocamera. La configurazione originale (a sinistra) è stata totalmente stravolta da Gemini (a destra).&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;e-arduino&#34;&gt;E Arduino?&lt;/h4&gt;&#xA;&lt;p&gt;Arrivato a questo punto era inevitabile che chiedessi a Gemini di generare anche il driver per Arduino, usando le stesse informazioni che gli avevo già fornito per CircuitPython.&lt;/p&gt;&#xA;&lt;p&gt;Questa volta Gemini ha penato di più, ma soprattutto perché gli avevo imposto di effettuare solo delle modifiche minime alle librerie originali Arducam. Un vincolo che questa volta era impossibile da soddisfare, perché queste librerie non supportano nativamente il Raspberry Pi Pico.&lt;/p&gt;&#xA;&#xA;&lt;details class=&#34;answer&#34; open&gt;&#xA;    &lt;summary class=&#34;answer&#34;&gt;&#xA;        Risposta&#xA;    &lt;/summary&gt;&#xA;    &lt;div class=&#34;answer&#34;&gt;&#xA;        &#xA;    &#xA;    &lt;strong&gt;Researching Arducam Library Compatibility&lt;/strong&gt;&#xA;    I&amp;rsquo;ve thoroughly inspected both the original &lt;code&gt;ArduCAM&lt;/code&gt; library and the &lt;code&gt;Arducam_mini&lt;/code&gt; library. Neither version contains native support for the RP2040/RP2350 (Pico) architecture. Specifically, both libraries are missing the necessary definitions for &lt;code&gt;regtype&lt;/code&gt;, &lt;code&gt;regsize&lt;/code&gt;, &lt;code&gt;cbi&lt;/code&gt;, and &lt;code&gt;sbi&lt;/code&gt; for this platform, which is the root cause of the compilation errors.&#xA;&#xA;&lt;div&gt;&#xA;&lt;/details&gt;&#xA;&#xA;&lt;p&gt;Una volta allentato questo vincolo le cose sono filate lisce e in poco tempo anche il driver modificato &lt;em&gt;ad hoc&lt;/em&gt; per il Pico ed il relativo programma di acquisizione delle immagini erano pronti.&lt;/p&gt;&#xA;&lt;h4 id=&#34;gratis-o-a-pagamento&#34;&gt;Gratis o a pagamento?&lt;/h4&gt;&#xA;&lt;p&gt;C&amp;rsquo;è chi sostiene che &lt;a href=&#34;https://www.oneusefulthing.org/p/a-guide-to-which-ai-to-use-in-the&#34;&gt;i modelli a pagamento sono molto meglio di quelli gratuiti&lt;/a&gt;. Di conseguenza, i miei problemi con il &lt;em&gt;vibe coding&lt;/em&gt; sarebbero scomparsi se avessi pagato per usare Gemini o Claude.&lt;/p&gt;&#xA;&lt;p&gt;Non è proprio così. Nel corso delle prove ho usato prevalentemente la versione gratuita di Gemini, proprio per verificare cosa succedeva all&amp;rsquo;utente non professionale che voleva provare a giocare un po&amp;rsquo; con questi strumenti. Ma quando finivano i token sono passato alla versione a pagamento di Gemini fornita dall&amp;rsquo;università, e non ho mai notato differenze significative. Su Claude non posso dire niente, perché dover pagare 200 dollari al mese per usarlo in modo serio non ha senso per chi, come il sottoscritto, non è un programmatore professionista.&lt;/p&gt;&#xA;&lt;p&gt;Ho notato però che Claude Opus e Claude Sonnet si sono sempre dimostrati molto più bravi di Gemini a risolvere i problemi che si presentavano nel corso dello sviluppo del codice. Ma poiché li ho utilizzati sempre a lavoro inoltrato, potrebbero solo essere stati facilitati da quello che Gemini aveva già fatto.&lt;/p&gt;&#xA;&lt;h4 id=&#34;conclusioni&#34;&gt;Conclusioni&lt;/h4&gt;&#xA;&lt;p&gt;È inutile dire che sia questo esperimento che &lt;a href=&#34;https://melabit.com/it/2026/03/04/antigravity-un-driver-scritto-dall-ia/&#34;&gt;quello precedente&lt;/a&gt; non hanno nulla di &lt;em&gt;scientifico&lt;/em&gt;. Per essere tale, dovrei almeno utilizzare tipi diversi di microcontroller e di moduli collegati, stabilire un set di prompt ben definito e misurare in qualche modo come cambia la risposta dell&amp;rsquo;agente di turno al variare delle condizioni sperimentali.&lt;/p&gt;&#xA;&lt;p&gt;Ma nonostante questo, l&amp;rsquo;esperimento ha un pregio: è &lt;em&gt;riproducibile&lt;/em&gt;. Chiunque, con una spesa ridotta, può provare a ripeterlo usando lo stesso hardware e gli stessi prompt, in modo do verificare di persona se quello che ho trovato io è corretto o no.&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;Una cosa che gli apostoli del &lt;em&gt;vibe coding&lt;/em&gt; da decine di milioni di letture evitano sempre accuratamente di proporre. I loro articoli sono pieni di certezze e di previsioni roboanti, ma mancano sempre di fornire il sia pur minimo appiglio che permetta di verificare i loro &lt;em&gt;claim&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Nessuno, oggi, può ancora negare che gli LLM possano essere di grande aiuto durante la programmazione, ma è difficile credere che riescano davvero a farlo senza nessun intervento umano. E questo almeno finché gli apostoli di cui sopra non si degneranno di fornirci dati chiari e ripetibili a supporto delle loro affermazioni.&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;Pur sapendo qualcosa di programmazione, non avevo la minima idea di come si potesse sviluppare un driver e non avevo nessuna voglia di passare dei giorni a studiare come si fa.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;Tecnicamente questo file è una libreria di funzioni, ma i microcontroller non hanno un sistema operativo e quindi queste funzioni accedono direttamente all&amp;rsquo;hardware, proprio come fanno i &lt;em&gt;driver&lt;/em&gt; che controllano i componenti di un computer. Di conseguenza, in questo caso i termini &lt;em&gt;libreria&lt;/em&gt; e &lt;em&gt;driver&lt;/em&gt; sono interscambiabili.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:3&#34;&gt;&#xA;&lt;p&gt;Dico &lt;em&gt;spesa ridotta&lt;/em&gt; ma ormai la penuria di componenti elettronici ha fatto impazzire i prezzi del Pico e ancor di più della Arducam Mini 5MP Plus. Quest&amp;rsquo;ultima, dai 40 euro di pochi mesi fa ora si trova su Amazon o AliExpress a più del triplo. Per fortuna alcuni rivenditori mantengono (almeno per ora) dei prezzi più onesti.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Effetto Dory</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2026/03/09/effetto-dory/</link>
      <pubDate>Mon, 09 Mar 2026 18:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2026/03/09/effetto-dory/</guid>
      <description>&lt;p&gt;Lo so che gli LLM hanno &lt;a href=&#34;https://melabit.com/it/2026/02/16/antigravity-dalla-sorpresa-al-dubbio/&#34;&gt;poca memoria&lt;/a&gt;, ma non avrei mai immaginato di doverne subire così in fretta le conseguenze.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static.233.196.69.159.clients.your-server.de/img/2026-03-09-effetto-dory/Gemini_Generated_Image_734ww1734ww1734w.jpg&#34; alt=&#34;&#34;&gt;&#xA;&amp;ndash; &lt;em&gt;Immagine generata da &lt;a href=&#34;https://gemini.google.com&#34;&gt;Google Gemini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Nota per il lettore.&lt;/strong&gt; Questo articolo è un complemento di quello precedente, &lt;a href=&#34;https://melabit.com/it/2026/03/04/antigravity-un-driver-scritto-dall-ia/&#34;&gt;Antigravity: un driver scritto dall&amp;rsquo;IA&lt;/a&gt; e andrebbe letto dopo il primo. Ma ecco un breve riassunto per i più pigri.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Non sapendo come fare a scrivere un driver per una &lt;a href=&#34;https://en.wikipedia.org/wiki/Serial_Peripheral_Interface&#34;&gt;videocamera SPI&lt;/a&gt; collegata ad un Raspberry Pi Pico, ho chiesto aiuto a Gemini 3 Flash, lavorando interamente dentro Antigravity. Dopo parecchie ore di lavoro, l’agente è riuscito a scrivere un programma funzionante in Arduino. A questo punto ho fatto un errore fatale, chiedendogli ancora di più, ma senza prendere delle precauzioni.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;premessa&#34;&gt;Premessa&lt;/h4&gt;&#xA;&lt;p&gt;Il &lt;a href=&#34;https://melabit.com/it/2026/03/04/antigravity-un-driver-scritto-dall-ia/#lia-al-lavoro&#34;&gt;codice funzionante&lt;/a&gt; generato con tanta fatica da &lt;code&gt;Gemini 3 Flash&lt;/code&gt; prevedeva che il Pico facesse da interfaccia fra il mio Mac Mini e la videocamera SPI.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; Sul Mac, uno script in Python comandava la cattura di una immagine, mentre l&amp;rsquo;acquisizione vera e propria veniva eseguita dal Pico tramite un programma per &lt;a href=&#34;https://en.wikipedia.org/wiki/Arduino&#34;&gt;Arduino&lt;/a&gt; (uno &lt;em&gt;sketch&lt;/em&gt;, nel gergo della piattaforma), che è fondamentalmente codice C/C++ adattato all&amp;rsquo;uso con i microcontrollori.&lt;/p&gt;&#xA;&lt;p&gt;Comandare tutto da computer va benissimo per le prime prove, ma è molto scomodo quando si prevede di usare un dispositivo di questo genere per delle attività &lt;em&gt;sul campo&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;catture-automatiche&#34;&gt;Catture automatiche&lt;/h4&gt;&#xA;&lt;p&gt;Allora ho chiesto a Gemini di modificare il codice in modo da effettuare automaticamente la cattura dell&amp;rsquo;immagine ogni N minuti oppure premendo un pulsante, inviando poi l&amp;rsquo;immagine ad un computer tramite Wi-Fi.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&#xA;&lt;details class=&#34;question&#34; open&gt;&#xA;    &lt;summary class=&#34;question&#34;&gt;&#xA;        Prompt&#xA;    &lt;/summary&gt;&#xA;    &lt;div class=&#34;question&#34;&gt;&#xA;        &#xA;[...] However, this means that I need to use a Pico for the capture and another computer, even a Raspberry Pi Zero for commanding the capture process. Would it be possible to do everything on the Pico, eg press a button and perform the capture or via a timed process (defined in the .ino file itself) every N minutes (but there should be a mechanism that sends the images to a computer connected by WiFi, avoiding to fill the pico storage space).&#xA;&lt;div&gt;&#xA;&lt;/details&gt;&#xA;&#xA;&lt;p&gt;Gemini si mette subito al lavoro, sempre continuando ad usare Arduino. Dovrebbe essere un programma molto semplice da realizzare ma, per quanto Gemini ci provi, non funziona mai. Dopo molti tentativi infruttuosi mi scoccio e gli chiedo di ritornare all&amp;rsquo;ultima versione funzionante del programma.&lt;/p&gt;&#xA;&lt;h4 id=&#34;tornare-sui-propri-passi&#34;&gt;Tornare sui propri passi&lt;/h4&gt;&#xA;&lt;p&gt;E qui Gemini sbatte contro un muro imprevisto perché, nonostante la mia guida e i miei continui suggerimenti, non c&amp;rsquo;è assolutamente verso di riuscirci.&lt;/p&gt;&#xA;&lt;p&gt;Stupidamente non avevo pensato di tenere traccia delle varie versioni del codice man mano che veniva generato, e questa è solo ed esclusivamente colpa mia.&lt;/p&gt;&#xA;&lt;p&gt;Ma d&amp;rsquo;altre parte, pur essendo ben consapevole che i modelli linguistici di grandi dimensioni (LLM, &lt;em&gt;Large Language Model&lt;/em&gt;) mentre lavorano hanno una &lt;strong&gt;memoria&lt;/strong&gt; che sembra quella della &lt;a href=&#34;https://youtu.be/arnEy6qr6ZA?si=M0n4Cb98OtYmnKGB&amp;amp;t=58&#34;&gt;pesciolina Dory&lt;/a&gt;, non avrei mai immaginato che questi sistemi ultrasofisticati non fossero neanche in grado di &lt;strong&gt;ricostruire a posteriori&lt;/strong&gt; ciò che hanno fatto, pur avendo a disposizione decine e decine di file &lt;code&gt;implementation_plan.md&lt;/code&gt;, &lt;code&gt;task.md&lt;/code&gt; e &lt;code&gt; walkthrough.md&lt;/code&gt;, che descrivono per filo e per segno tutti i passaggi precedenti (li ho contati, solo per questo progetto Antigravity ha generato più di 250 file diversi).&lt;/p&gt;&#xA;&lt;p&gt;Tornare sui propri passi è una cosa che invece strumenti come &lt;code&gt;git&lt;/code&gt; e i suoi predecessori, tutti privi di una qualunque forma di &lt;em&gt;intelligenza&lt;/em&gt; che non sia quella dei suoi creatori, sono in grado di fare benissimo &lt;a href=&#34;https://blog.tarynmcmillan.com/a-history-of-version-control&#34;&gt;da più di cinquant&amp;rsquo;anni&lt;/a&gt;. Magari chi sviluppa questi agenti tanto &lt;em&gt;intelligenti&lt;/em&gt; potrebbe farci un pensierino, no?&lt;/p&gt;&#xA;&lt;h4 id=&#34;epilogo&#34;&gt;Epilogo&lt;/h4&gt;&#xA;&lt;p&gt;Alla fine, testardamente e basandomi sulle mie note,&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; sono riuscito a far ripetere a Gemini tutto quello che aveva già fatto. Ci ha messo delle ore, ha ripetuto pari pari tutti gli errori della volta precedente, ma alla fine il codice ricostruito funziona di nuovo correttamente.&lt;/p&gt;&#xA;&lt;p&gt;Già che c&amp;rsquo;ero, gli ho fatto rifare tutto anche per CircuitPython, e anche questo &lt;em&gt;port&lt;/em&gt; ha richiesto molte altre ore di lavoro e di errori. E, prima di arrivarci, Gemini ha creato dei problemi talmente gravi che macOS ha dovuto disabilitare la comunicazione delle porte USB con il Pico, costringendomi a riavviare per un paio di volte il Mac.&lt;/p&gt;&#xA;&lt;p&gt;Inutile dire che questa volta gli ho fatto tenere traccia di ogni passaggio con &lt;code&gt;git&lt;/code&gt; e ho messo pure tutto il codice su &lt;a href=&#34;https://github.com/sabinomaggi/pico-camera5mp&#34;&gt;GitHub&lt;/a&gt;, non si sa mai.&lt;/p&gt;&#xA;&lt;p&gt;Uno dei prossimi passi sarà (spero) MicroPython, ma questa è ancora un&amp;rsquo;altra storia.&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;Perché Arduino fa tanta fatica, pur se è una piattaforma di sviluppo per microcontroller molto più matura di MicroPython e CircuitPython? Perché, per il modello di videocamera che ho scelto, Arducam non supporta il Raspberry Pi Pico ma solo i Raspberry Pi &lt;em&gt;classici&lt;/em&gt; (quelli con il sistema operativo, per intenderci, come il Rasperry Pi 4, 5 e lo Zero), nonché tutti i microcontroller Arduino e ESP286.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;Lo so che l&amp;rsquo;inglese non è un gran che, è più un flusso di pensieri che un discorso organico. Ma ci sono dettagli che mi vengono in mente mentre scrivo, e preferisco buttarli giù così alla bell&amp;rsquo;e meglio piuttosto che perdere il filo delle idee.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:3&#34;&gt;&#xA;&lt;p&gt;Non ripeterò mai abbastanza quanto sia importante tenere delle note scritte di quello che si fa. All&amp;rsquo;inizio sembra solo una perdita di tempo, mentre invece è il modo migliore per evitare di perderlo in futuro.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Il CNR è anche questo: concorsi in LaTeX</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2020/11/08/il-cnr-e-anche-questo-concorsi-in-latex/</link>
      <pubDate>Sun, 08 Nov 2020 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2020/11/08/il-cnr-e-anche-questo-concorsi-in-latex/</guid>
      <description>&lt;p&gt;Nella &lt;a href=&#34;https://melabit.wordpress.com/2020/10/25/il-cnr-e-anche-questo-concorsi-senza-frontiere/&#34;&gt;puntata precedente&lt;/a&gt; ho raccontato della mia corsa contro il tempo dell&amp;rsquo;estate, una prova assurda come quelle di &lt;a href=&#34;https://curiosando708090.altervista.org/giochi-senza-frontiere-19651982-19881999/&#34;&gt;Giochi senza frontiere&lt;/a&gt;, ma senza allegria.&lt;/p&gt;&#xA;&lt;p&gt;Inutile però dilungarsi ancora in dettagli poco comprensibili ai non addetti ai lavori. Meglio parlare invece di cosa ho fatto io per superare questa prova, cercando di sfruttare quel poco che so di LaTeX e di programmazione.&lt;/p&gt;&#xA;&lt;p&gt;Perché, l&amp;rsquo;ho già detto ma mi ripeto, qualche nozione di programmazione può aiutare a cavarsela meglio con le tante &lt;em&gt;&lt;a href=&#34;https://www.treccani.it/magazine/lingua_italiana/speciali/Montalbano/Nichil_arrabbiato.html&#34;&gt;rotture di cabasisi&lt;/a&gt;&lt;/em&gt; che dobbiamo affrontare ogni giorno.&lt;/p&gt;&#xA;&lt;hr style = &#34;border: none; &#xA;            border-top: 3px double #333; &#xA;            color: #333; &#xA;            overflow: visible; &#xA;            height: 5px; &#xA;            width: 50%; &#xA;            margin-left: auto; &#xA;            margin-right: auto;&#34;&#xA;&gt;&#xA;&#xA;&lt;p&gt;Se c&amp;rsquo;è una cosa sulla quale sin dal primo momento non ho avuto il minimo dubbio, è che non avrei usato Word per preparare il curriculum professionale. Word non mi piace, si sa, ma in questa scelta non c&amp;rsquo;era nessuna prevenzione, era solo un modo per preservare la mia salute mentale.&lt;/p&gt;&#xA;&lt;p&gt;Word ha grosse difficoltà a gestire strutture complesse come le tabelle. Una, due, tre, dieci tabelle vanno ancora bene, ma qui si trattava di creare centinaia e centinaia di tabelle diverse, una per ogni &lt;a href=&#34;https://melabit.wordpress.com/2020/10/25/il-cnr-e-anche-questo-concorsi-senza-frontiere/&#34;&gt;titolo&lt;/a&gt; &amp;ndash; articolo, progetto, software, brevetto, insegnamento, incarico &amp;ndash; inserito nel curriculum professionale. Dopo un po&amp;rsquo; Word sarebbe letteralmente &lt;em&gt;impazzito&lt;/em&gt; nel maneggiare tutte quelle tabelle, facendomi perdere un sacco di tempo prezioso.&lt;/p&gt;&#xA;&lt;p&gt;Con &lt;a href=&#34;https://www.latex-project.org/&#34;&gt;LaTeX&lt;/a&gt; il problema non si pone. Un documento LaTeX è un normale file di testo e il fatto che contenga tabelle, liste o semplici paragrafi non fa molta differenza, sono solo delle porzioni di testo strutturate in modo diverso. Il peggio che può capitare è che il &lt;a href=&#34;https://www.overleaf.com/learn/latex/Choosing_a_LaTeX_Compiler&#34;&gt;compilatore LaTeX&lt;/a&gt; impieghi qualche secondo in più a convertire il documento LaTeX in PDF.&lt;/p&gt;&#xA;&lt;p&gt;Il fatto che i documenti LaTeX siano dei file di testo mi permetteva anche di generare automaticamente le tabelle relative a ciascun titolo inserito nel curriculum professionale, una cosa impossibile da fare con Word e che ha velocizzato moltissimo tutto il lavoro.&lt;/p&gt;&#xA;&lt;p&gt;Già perché, non l&amp;rsquo;ho detto prima, il curriculum professionale andava sì scritto in Word, ma poi la sottomissione andava fatta in PDF,&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; utilizzando (ci credete?) la &lt;a href=&#34;https://selezionionline.cnr.it/jconon/?lang=it&#34;&gt;piattaforma online&lt;/a&gt; per i concorsi dismessa così improvvidamente. In pratica il &lt;a href=&#34;https://figshare.com/account/articles/13076858&#34;&gt;modello in Word&lt;/a&gt; fornito dall&amp;rsquo;amministrazione serviva solo come indicazione di massima di come dovesse essere organizzato il curriculum, ma niente impediva di utilizzare altri strumenti. L&amp;rsquo;unica cosa davvero importante è che il &lt;em&gt;layout&lt;/em&gt; del file PDF corrispondesse a quello previsto dall&amp;rsquo;amministrazione.&lt;/p&gt;&#xA;&lt;p&gt;Riprodurre in LaTeX il modello originale in Word non è stato difficile: la classe &lt;a href=&#34;https://www.ctan.org/pkg/memoir&#34;&gt;memoir&lt;/a&gt; è molto flessibile ed è particolarmente adatta a produrre tutti quei documenti che escono dai canoni classici di LaTeX, mentre i package &lt;a href=&#34;https://ctan.org/pkg/geometry&#34;&gt;geometry&lt;/a&gt;, &lt;a href=&#34;https://www.ctan.org/pkg/booktabs&#34;&gt;booktabs&lt;/a&gt;, &lt;a href=&#34;https://ctan.org/pkg/multirow&#34;&gt;multirow&lt;/a&gt; e &lt;a href=&#34;https://www.ctan.org/pkg/titlesec&#34;&gt;titlesec&lt;/a&gt; permettono di regolare finemente i dettagli del documento finale.&lt;/p&gt;&#xA;&lt;p&gt;Sia chiaro, preparare un modello di documento LaTeX partendo da zero non è mai facile, a meno di non essere dei veri esperti. Per fortuna avevo già fatto delle cose simili in passato e mi è bastato modificare qualche dettaglio per ottenere quello che mi serviva.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;hr style = &#34;border: none; &#xA;            border-top: 3px double #333; &#xA;            color: #333; &#xA;            overflow: visible; &#xA;            height: 5px; &#xA;            width: 50%; &#xA;            margin-left: auto; &#xA;            margin-right: auto;&#34;&#xA;&gt;&#xA;&#xA;&lt;p&gt;Il modello LaTeX era però il problema minore, ciò che importava davvero era riuscire a riutilizzare il più possibile il lavoro fatto in passato. Come già detto nel &lt;a href=&#34;https://melabit.wordpress.com/2020/10/25/il-cnr-e-anche-questo-concorsi-senza-frontiere/&#34;&gt;post precedente&lt;/a&gt;, i soloni che ci governano non avevano previsto nessuna possibilità di esportare i dati già presenti sulla piattaforma online. L&amp;rsquo;unica possibilità era quella di partire dal curriculum in PDF preparato per un concorso precedente (del 2013, ben sette anni fa).&lt;/p&gt;&#xA;&lt;p&gt;Per fortuna ho una certa esperienza nell&amp;rsquo;estrazione di dati dai documenti PDF, un problema molto attuale dato che tante istituzioni, non solo nazionali ma anche internazionali, sono molto restie a condividere i loro dati in formati standard utilizzabili da chi, come me, si occupa di estrarre informazioni dalle serie temporali di misure. Quando va bene il meglio che si riesce ad ottenere sono dei file PDF contenenti delle tabelle mal strutturate, che bisogna ingegnarsi a convertire in formati usabili per le analisi. Mi è bastato quindi adattare uno script in R sviluppato per altri scopi per riuscire a convertire la domanda in PDF in un &lt;a href=&#34;https://www.html.it/articoli/file-csv-cosa-sono-come-si-aprono-e-come-crearli/&#34;&gt;file CSV&lt;/a&gt; ben ordinato.&lt;/p&gt;&#xA;&lt;p&gt;Partendo dal file CSV e con qualche semplice &lt;a href=&#34;https://melabit.wordpress.com/2019/02/18/script-per-tutti-i-giorni-entra-in-scena-awk/&#34;&gt;script in AWK&lt;/a&gt; (un&amp;rsquo;altro &lt;em&gt;tool&lt;/em&gt; di base di cui non potrei mai fare a meno) è stato quasi un gioco da ragazzi estrarre i dati relativi ai titoli già presentati in quel concorso, salvandoli in file differenti in base alla &lt;a href=&#34;https://melabit.wordpress.com/2020/10/25/il-cnr-e-anche-questo-concorsi-senza-frontiere/&#34;&gt;tipologia&lt;/a&gt; in modo che poi fosse più semplice aggiungere uno ad uno i titoli mancanti (dal 2013 ad oggi ce ne sono state di novità!). Il modello LaTeX si occupava poi di importare questi file nella sequenza corretta producendo il curriculum completo.&lt;/p&gt;&#xA;&lt;p&gt;Già che c&amp;rsquo;ero, con gli stessi script potevo anche costruire automaticamente le tabelle LaTeX dove incasellare ciascun titolo. È una cosa più difficile da spiegare che da fare, ma che ha rappresentato un vantaggio incomparabile rispetto a creare le tabelle una ad una con Word.&lt;/p&gt;&#xA;&lt;p&gt;Devo ammettere che gli script AWK non erano perfetti, purtroppo me ne sono accorto solo dopo aver iniziato il lavoro di inserimento dei nuovi titoli. Ma dato che questi script mi servivano solo una volta, ho preferito correggere a mano gli errori piuttosto che perdere altro tempo a perfezionarli.&lt;/p&gt;&#xA;&lt;hr style = &#34;border: none; &#xA;            border-top: 3px double #333; &#xA;            color: #333; &#xA;            overflow: visible; &#xA;            height: 5px; &#xA;            width: 50%; &#xA;            margin-left: auto; &#xA;            margin-right: auto;&#34;&#xA;&gt;&#xA;&#xA;&lt;p&gt;Lavorare con file diversi per ciascuna tipologia (o &lt;em&gt;fattispecie&lt;/em&gt;, il termine preferito dai nostri vertici amministrativi) aveva un altro grosso vantaggio. Avendo separato il modello LaTeX, che gestiva l&amp;rsquo;aspetto generale del curriculum professionale, dai dati riportati nei diversi file, potevo velocizzare parecchio la fase di (diciamo così) &lt;em&gt;debugging&lt;/em&gt; del documento finale. In altre parole, se lavoravo sugli articoli scientifici scritti nel corso della mia carriera, potevo importare nel modello generale LaTeX solo il file relativo, lasciando fuori tutto ciò che riguardava le altre attività svolte. Analogamente per le altre tipologie di documenti. Sembra una cosa da niente, ma quando si passano le giornate ad inserire i dati di decine di nuovi documenti, avere a disposizione un file PDF più snello e poter controllare più rapidamente di non aver fatto errori e di non aver dimenticato niente può davvero fare la differenza.&lt;/p&gt;&#xA;&lt;hr style = &#34;border: none; &#xA;            border-top: 3px double #333; &#xA;            color: #333; &#xA;            overflow: visible; &#xA;            height: 5px; &#xA;            width: 50%; &#xA;            margin-left: auto; &#xA;            margin-right: auto;&#34;&#xA;&gt;&#xA;&#xA;&lt;p&gt;Un altro aspetto chiave dell&amp;rsquo;usare LaTeX al posto di Word è stato il fatto di poter numerare a piacere le singole tabelle. Su questo la confusione era massima. Il principio generale era chiaro, i vari titoli delle &lt;a href=&#34;https://melabit.wordpress.com/2020/10/25/il-cnr-e-anche-questo-concorsi-senza-frontiere/&#34;&gt;Categorie A e B&lt;/a&gt; andavano inseriti rispettando un ordine temporale inverso, dal più recente al più vecchio, assegnando un numero progressivo a ciascuna tabella. Quello che non era affatto chiaro era il &lt;em&gt;come&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2020/10/categoria-a.png&#34; alt=&#34;&#34;&gt;&#xA;&lt;em&gt;Modello di curriculum professionale: titoli della Categoria A.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2020/10/categoria-b.png&#34; alt=&#34;&#34;&gt;&#xA;&lt;em&gt;Modello di curriculum professionale: titoli della Categoria B.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;C&amp;rsquo;era chi affermava che si dovessero numerare progressivamente i documenti della &lt;strong&gt;Categoria A&lt;/strong&gt;, gli ormai famosi &lt;strong&gt;Prodotti della Ricerca&lt;/strong&gt;, indipendentemente dalla loro tipologia ma tendendo conto solo della data, ricominciando la numerazione dal principio una volta passati ai titoli della &lt;strong&gt;Categoria B&lt;/strong&gt;, dove invece i titoli andavano raggruppati in base alla tipologia. Altri pensavano che fosse preferibile raggruppare tutti i titoli della Categoria A per tipologia (prima tutti gli articoli, poi i capitoli di libri e gli atti di congressi, poi i brevetti, e così via), ordinandoli dal più recente al più vecchio e numerandoli progressivamente, continuando la numerazione con gli stessi criteri una volta passati alla Categoria B. Altri volevano numerare anche le tipologie, un po&amp;rsquo; come si fa con i capitoli di un libro tecnico. Insomma, ogni partecipante al concorso aveva la sua idea.&lt;/p&gt;&#xA;&lt;p&gt;Come ha scritto qualcuno in un gruppo WhatsApp, &lt;em&gt;&amp;ldquo;le migliori menti del Paese non riuscivano a interpretare le istruzioni del bando di concorso&amp;rdquo;&lt;/em&gt;. Non so se al CNR ci siano davvero le &lt;em&gt;migliori menti del Paese&lt;/em&gt;, ma è evidente che tutta questa confusione derivava dalla difficoltà di interpretare un gergo burocratico astruso e inconsistente, incomprensibile per chi è abituato per professione ad essere preciso e rigoroso. A ciò si aggiungeva un motivo più banale, il timore di fare degli errori nella stesura del curriculum e di essere penalizzati per questo dalle commissioni di valutazione.&lt;/p&gt;&#xA;&lt;p&gt;Io non avevo scelta. Avendo raggruppato tutti i miei titoli in file differenti in base alla tipologia e importando i file uno dopo l&amp;rsquo;altro nel modello generale LaTeX, non potevo fare altro che numerare tutti i titoli della stessa tipologia in base alla data (dal più recente al più vecchio), proseguendo la numerazione una volta passato ad un&amp;rsquo;altra tipologia e continuando a numerare progressivamente allo stesso modo anche i titoli della Categoria B.&lt;/p&gt;&#xA;&lt;p&gt;Mi sembrava anche la cosa più logica da fare, perché questo ordinamento facilitava il lavoro della commissione, che così trovava raggruppati prima tutti gli articoli scientifici (che sono senza ombra di dubbio i titoli più importanti per un ricercatore), poi tutti i capitoli di libri o gli atti di congresso, poi i brevetti, e così via. Se l&amp;rsquo;ordinamento primario per tipologia era previsto esplicitamente per la Categoria B, perché non fare lo stesso anche per la Categoria A? Se poi alla commissione non piacerà, pazienza!&lt;/p&gt;&#xA;&lt;hr style = &#34;border: none; &#xA;            border-top: 3px double #333; &#xA;            color: #333; &#xA;            overflow: visible; &#xA;            height: 5px; &#xA;            width: 50%; &#xA;            margin-left: auto; &#xA;            margin-right: auto;&#34;&#xA;&gt;&#xA;&#xA;&lt;p&gt;Inutile dire che ho usato &lt;a href=&#34;https://git-scm.com&#34;&gt;git&lt;/a&gt; &amp;ndash; il sistema di controllo delle versioni che è ormai uno standard di fatto nel mondo dello sviluppo &amp;ndash; per gestire le revisioni di tutti i file che mi servivano per produrre il curriculum professionale finale: il modello generale in LaTeX, gli script in R e AWK e tutti i file CSV e LaTeX generati dagli script.&lt;/p&gt;&#xA;&lt;p&gt;Con il sistema di controllo delle versioni potevo aggiornare i vari file LaTeX dei titoli sapendo di poter tornare indietro anche in caso di errori troppo gravi per essere recuperati a colpi di &lt;em&gt;undo&lt;/em&gt;. Per fare un esempio, a un certo punto mi sono accorto che avrei dovuto scambiare due righe in tutte le tabelle del file relativo agli articoli (si veda la figura qui sotto). Con un buon editor di testo è una cosa che si fa in cinque minuti, ma sapere di poter usare &lt;code&gt;git&lt;/code&gt; anche per &lt;a href=&#34;https://git-scm.com/book/en/v2/Git-Tools-Interactive-Staging&#34;&gt;annullare ogni singola modifica&lt;/a&gt; è una cosa che si apprezza solo dopo essersi spupazzati una ad una un migliaio di righe di codice LaTeX.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2020/10/git-latex.png&#34; alt=&#34;&#34;&gt;&#xA;&lt;em&gt;Interfaccia grafica di &lt;code&gt;git&lt;/code&gt; con la quale è possibile accettare o annullare ogni singola modifica ad un file.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Git è troppo complicato? Può darsi, ma un sistema di controllo delle versioni è come un backup, finché va tutto bene non si capisce a cosa serva, ma quando si presenta un problema si ringrazia il cielo di averlo usato.&lt;/p&gt;&#xA;&lt;hr style = &#34;border: none; &#xA;            border-top: 3px double #333; &#xA;            color: #333; &#xA;            overflow: visible; &#xA;            height: 5px; &#xA;            width: 50%; &#xA;            margin-left: auto; &#xA;            margin-right: auto;&#34;&#xA;&gt;&#xA;&#xA;&lt;p&gt;Guardando a ritroso mi accorgo che la preparazione di questo curriculum professionale è stata in parte un lavoro di programmazione, tutto sommato abbastanza divertente, seguita da una lunga e noiosissima fase di inserimento dei nuovi dati e di controllo che tutto fosse a posto, una cosa che sembrava non dovesse finire mai. Lavorando una decina di ore al giorno ho impiegato quasi un mese per completare il lavoro, un pelo in anticipo rispetto alla scadenza prevista. Uno spreco di tempo assurdo per quello che dovrebbe essere un evento normalissimo nella vita professionale di chi fa questo mestiere.&lt;/p&gt;&#xA;&lt;p&gt;La versione finale del mio curriculum ha 248 pagine, un numero che per un matematico (o un programmatore) ha un certo significato.&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; Chissà se la commissione che lo giudicherà sarà dello stesso avviso.&lt;/p&gt;&#xA;&lt;p&gt;(&lt;a href=&#34;https://melabit.wordpress.com/2020/12/01/il-cnr-e-anche-questo-un-po-di-codice/&#34;&gt;Continua&amp;hellip;&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;Una cosa più che ragionevole, visto che un file PDF è molto più difficile da manipolare del corrispettivo in Word.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;Detto fra parentesi, se c&amp;rsquo;è interesse per l&amp;rsquo;argomento, potrei scrivere dei post specifici su LaTeX e dintorni, toccando non solo le basi ma anche argomenti più avanzati come questo.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:3&#34;&gt;&#xA;&lt;p&gt;Ammetto che arrivare a 271 o a 314 pagine sarebbe stato meglio, ma ci proverò la prossima volta.&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
  </channel>
</rss>
