<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Cool Computer Stuff: Roba d'Azione per Computer]]></title><description><![CDATA[Tutte robe interessanti, ma in italiano.]]></description><link>https://didof.substack.com/s/ita-cool-computer-stuff</link><image><url>https://substackcdn.com/image/fetch/$s_!exPl!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F664fe394-7052-4ae1-9679-76dac337d640_1280x1280.png</url><title>Cool Computer Stuff: Roba d&apos;Azione per Computer</title><link>https://didof.substack.com/s/ita-cool-computer-stuff</link></image><generator>Substack</generator><lastBuildDate>Sat, 06 Jun 2026 04:18:35 GMT</lastBuildDate><atom:link href="https://didof.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[didof]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[didof@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[didof@substack.com]]></itunes:email><itunes:name><![CDATA[didof.dev]]></itunes:name></itunes:owner><itunes:author><![CDATA[didof.dev]]></itunes:author><googleplay:owner><![CDATA[didof@substack.com]]></googleplay:owner><googleplay:email><![CDATA[didof@substack.com]]></googleplay:email><googleplay:author><![CDATA[didof.dev]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Perché i tuoi script Bash si rompono su altre macchine? La storia della Shebang.]]></title><description><![CDATA[Uno script funziona perfettamente sul tuo sistema, ma fallisce inspiegabilmente altrove. Il colpevole? Spesso &#232; la prima trascurata riga di codice, la shebang. L'arte di scrivere software portabile.]]></description><link>https://didof.substack.com/p/shebang-e-portabilita</link><guid isPermaLink="false">https://didof.substack.com/p/shebang-e-portabilita</guid><dc:creator><![CDATA[didof.dev]]></dc:creator><pubDate>Thu, 04 Sep 2025 08:59:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MUS5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52485ffe-d705-483a-a497-d18afd706b51_1408x736.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><code>#!/bin/bash vs #!/usr/bin/env bash: </code><strong>L'Architettura della Portabilit&#224;</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MUS5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52485ffe-d705-483a-a497-d18afd706b51_1408x736.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MUS5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52485ffe-d705-483a-a497-d18afd706b51_1408x736.png 424w, https://substackcdn.com/image/fetch/$s_!MUS5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52485ffe-d705-483a-a497-d18afd706b51_1408x736.png 848w, https://substackcdn.com/image/fetch/$s_!MUS5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52485ffe-d705-483a-a497-d18afd706b51_1408x736.png 1272w, https://substackcdn.com/image/fetch/$s_!MUS5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52485ffe-d705-483a-a497-d18afd706b51_1408x736.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MUS5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52485ffe-d705-483a-a497-d18afd706b51_1408x736.png" width="1408" height="736" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52485ffe-d705-483a-a497-d18afd706b51_1408x736.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:736,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1537270,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://didof.substack.com/i/172759240?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52485ffe-d705-483a-a497-d18afd706b51_1408x736.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MUS5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52485ffe-d705-483a-a497-d18afd706b51_1408x736.png 424w, https://substackcdn.com/image/fetch/$s_!MUS5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52485ffe-d705-483a-a497-d18afd706b51_1408x736.png 848w, https://substackcdn.com/image/fetch/$s_!MUS5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52485ffe-d705-483a-a497-d18afd706b51_1408x736.png 1272w, https://substackcdn.com/image/fetch/$s_!MUS5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52485ffe-d705-483a-a497-d18afd706b51_1408x736.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Il Problema: L'Anarchia Controllata degli Ambienti</strong></h2><p>Il <code>PATH</code> &#232; una variabile d'ambiente. Una semplice lista di percorsi, come <code>/usr/local/bin:/usr/bin:/bin</code>, che definisce i <strong>terreni di caccia della shell</strong>. Quando invochiamo un comando, la shell esplora questi percorsi in ordine. La prima preda trovata, vince. Questo meccanismo &#232; il cuore della <em>flessibilit&#224; UNIX</em>, ma &#232; anche l'origine di un'apparente anarchia.</p><p>La posizione degli eseguibili non &#232; scolpita nella pietra. &#200; una convenzione, e le convenzioni si infrangono. <code>bash</code> su Linux risiede quasi sempre in <code>/bin/bash</code>, ma su <em>macOS</em> la versione di sistema &#232; una reliquia; quella che usiamo ogni giorno vive in un altro percorso, installata via <em>Homebrew</em>. Sistemi operativi, scelte degli admin, configurazioni utente: il <code>PATH</code> &#232; un elemento vivo. Assumere che sia statico significa scrivere codice destinato a rompersi.</p><h2><strong>Approccio #1: Il Path Assoluto, tra Prevedibilit&#224; e Fragilit&#224;</strong></h2><p>Il path assoluto aderisce a un principio fondamentale dell'ingegneria: la minima sorpresa ("<strong>Principle of Least Astonishment</strong>"). <code>#!/bin/bash</code> &#232; la sua espressione pi&#249; pura. Dichiara un'intenzione chiara, senza spazio per l'interpretazione: "Usa l'eseguibile che si trova <em>esattamente</em> qui".</p><p>Pensiamo a uno script di deploy su un cluster di produzione omogeneo. L'affidabilit&#224; &#232; la metrica che conta. In questo scenario, <code>#!/bin/bash</code> non &#232; una limitazione, &#232; una feature di sicurezza. Garantisce che a girare sia la shell di sistema, stabile e verificata, non una versione arbitraria presente nel <code>PATH</code> di un utente. Il controllo &#232; totale.</p><p>Il prezzo da pagare per questo controllo &#232; una fragilit&#224; strutturale. Il patto &#232; rigido. Spostiamo lo script su <em>macOS</em> o <em>FreeBSD</em>, dove <code>/bin/bash</code> non esiste o &#232; obsoleto, e lo script non si adatta. Non cerca, non negozia. Si spezza. &#200; il trade-off tra prevedibilit&#224; totale e fragilit&#224; assoluta.</p><div class="community-chat" data-attrs="{&quot;url&quot;:&quot;https://open.substack.com/pub/didof/chat?utm_source=chat_embed&quot;,&quot;subdomain&quot;:&quot;didof&quot;,&quot;pub&quot;:{&quot;id&quot;:5223861,&quot;name&quot;:&quot;Cool Computer Stuff&quot;,&quot;author_name&quot;:&quot;didof.dev&quot;,&quot;author_photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!ZVNZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bd3ad70-9777-41cf-ba36-79f22f27e382_194x194.jpeg&quot;}}" data-component-name="CommunityChatRenderPlaceholder"></div><h2><strong>Approccio #2: L'Indirezione come Scelta di Design</strong></h2><p>La shebang, <code>#!</code>, &#232; un "magic number" che il kernel sa come leggere. Alla vista di <code>#!/usr/bin/env bash</code>, il kernel non esegue lo script, ma innesca una chiamata <code>execve</code> sull'interprete <code>/usr/bin/env</code>, passandogli "bash" come argomento. A questo punto, il controllo passa al programma <code>env</code>.</p><p><code>env</code> &#232; uno strumento standard <em>POSIX</em>, un compagno quasi universale. Il suo compito &#232; semplice: prendere l'argomento <code>bash</code> e cercarlo nelle directory del <code>PATH</code>. Trovata la prima corrispondenza, la esegue. Questo meccanismo a due stadi &#232; un'applicazione da manuale di un principio architetturale potentissimo: l'<strong>Inversion of Control (IoC)</strong>. Lo script non impone pi&#249; una dipendenza, ma la richiede al suo ambiente. Si disaccoppia.</p><p>Il beneficio &#232; una portabilit&#224; radicale. Lo script ora funziona su quasi ogni sistema <em>UNIX</em>-like, diventando resiliente e adattabile. Il compromesso &#232; una cessione di controllo. L'autore non pu&#242; pi&#249; essere certo di <em>quale</em> <code>bash</code> verr&#224; eseguito. La sua esecuzione dipende interamente dalla configurazione del sistema target. Si scambia il controllo ferreo per la flessibilit&#224;.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://didof.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://didof.substack.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Le Zone d'Ombra: i Limiti della Portabilit&#224;</strong></h2><p>La portabilit&#224; di <code>env</code> &#232; potente, ma incontra dei limiti dove la teoria si scontra con la realt&#224; delle implementazioni. Esploriamo queste zone d'ombra.</p><h3>Il Problema degli Argomenti</h3><p>Passare argomenti come in #!/usr/bin/env python -v &#232; inaffidabile. Molti sistemi trattano "python -v" come un nome unico. La soluzione (parziale) &#232; il flag -S di GNU: #!/usr/bin/env -S python -v. Questo chiede a env di separare l'eseguibile dagli argomenti. Attenzione, per&#242;: -S non &#232; standard POSIX e pu&#242; fallire su sistemi minimali come Alpine o alcuni BSD.</p><h3>Quando la Rigidit&#224; &#232; una Virt&#249;</h3><p>In ambienti controllati, la prevedibilit&#224; torna ad essere un requisito. Per uno script critico gestito da systemd o all'interno di un Dockerfile ben definito, usare il path assoluto (#!/bin/bash) &#232; una scelta di robustezza e sicurezza. Si elimina una variabile dal sistema.</p><h3>Una Checklist per l'Ingegnere</h3><p>Prima di scrivere una shebang, l'ingegnere consapevole si pone tre domande:</p><ol><li><p><strong>Chi &#232; il mio target?</strong> Un tool pubblico per ambienti sconosciuti, o uno script per un'infrastruttura nota?</p></li><li><p><strong>Ho bisogno di argomenti?</strong> Se s&#236;, posso contare sul supporto del flag <code>-S</code>?</p></li><li><p><strong>Qual &#232; il costo di un fallimento?</strong> Un piccolo fastidio o un blocco in produzione? Pi&#249; alto &#232; il costo, pi&#249; la prevedibilit&#224; del path assoluto acquista valore.</p></li></ol><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://didof.substack.com/p/shebang-e-portabilita/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://didof.substack.com/p/shebang-e-portabilita/comments"><span>Leave a comment</span></a></p><h2><strong>5. Il Distillato: Un Trade-off, non un Dogma</strong></h2><p>Alla fine, non emerge una regola aurea. Emerge un trade-off fondamentale tra controllo e portabilit&#224;, tra rigidit&#224; e flessibilit&#224;.</p><p>La shebang smette di essere boilerplate. Diventa una dichiarazione di intenti, un piccolo ma denso documento di design. &#200; il punto in cui il nostro codice dichiara come intende relazionarsi con il mondo: se imponendo le proprie regole o adattandosi al contesto che lo ospita.</p><p>Qui risiede la vera maturit&#224; dell'ingegnere: non nell'applicazione cieca di una "best practice", ma nella capacit&#224; di valutare i compromessi. Nel riconoscere quando la disciplina di un path assoluto &#232; esattamente la scelta giusta per la stabilit&#224; del sistema che stiamo costruendo.</p><p>La grande ingegneria del software non &#232; fatta solo di architetture complesse. Si nasconde nei dettagli. In due caratteri e una sbarra che racchiudono un intero universo di decisioni consapevoli.</p>]]></content:encoded></item><item><title><![CDATA[Come Funziona la Conversione da Stringa a Intero]]></title><description><![CDATA[Esploriamo la logica, il ruolo dell'ASCII e l'eleganza dietro una delle funzioni pi&#249; comuni in programmazione.]]></description><link>https://didof.substack.com/p/come-funziona-la-conversione-da-stringa</link><guid isPermaLink="false">https://didof.substack.com/p/come-funziona-la-conversione-da-stringa</guid><dc:creator><![CDATA[didof.dev]]></dc:creator><pubDate>Wed, 03 Sep 2025 09:11:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gof2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6380969-0271-4348-b6fe-6eaa93900b66_2816x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Un computer non conosce i numeri. Conosce solo il testo. Quando digiti <code>123</code>, la macchina non vede un valore, ma tre simboli separati: '1', '2', '3'. Questa &#232; la radice del problema, e della sua soluzione geniale.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gof2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6380969-0271-4348-b6fe-6eaa93900b66_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gof2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6380969-0271-4348-b6fe-6eaa93900b66_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!gof2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6380969-0271-4348-b6fe-6eaa93900b66_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!gof2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6380969-0271-4348-b6fe-6eaa93900b66_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!gof2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6380969-0271-4348-b6fe-6eaa93900b66_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gof2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6380969-0271-4348-b6fe-6eaa93900b66_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6380969-0271-4348-b6fe-6eaa93900b66_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5709473,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://didof.substack.com/i/172661618?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6380969-0271-4348-b6fe-6eaa93900b66_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gof2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6380969-0271-4348-b6fe-6eaa93900b66_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!gof2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6380969-0271-4348-b6fe-6eaa93900b66_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!gof2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6380969-0271-4348-b6fe-6eaa93900b66_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!gof2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6380969-0271-4348-b6fe-6eaa93900b66_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>L'Incomprensione</h3><p>Immagina di chiedere a un programma di sommare due numeri inseriti dall'utente: <code>5</code> e <code>3</code>. Il programma riceve i <em>caratteri</em> '5' e '3', non i loro <em>valori</em> numerici. Nella <a href="https://en.wikipedia.org/wiki/ASCII">tabella ASCII</a>, il contratto che regola i caratteri, '5' corrisponde al valore 53 e '3' a 51. Un'addizione diretta porterebbe a un risultato insensato.</p><pre><code><code>char a = '5'; // Valore ASCII: 53
char b = '3'; // Valore ASCII: 51
int result = a + b; // result &#232; 104, non 8.</code></code></pre><p>La comunicazione fallisce.</p><blockquote><p>Il genio non &#232; nella formula, ma nel design del contratto. La tabella ASCII &#232; stata disegnata con una clausola tanto semplice quanto potente: i caratteri numerici sono in sequenza.</p></blockquote><h3>La Clausola</h3><p>Il genio non &#232; nella formula, ma nel design del contratto. La tabella ASCII &#232; stata disegnata con una clausola tanto semplice quanto potente: i caratteri numerici sono in sequenza, senza interruzioni. <code>'0'</code> &#232; 48, <code>'1'</code> &#232; 49, <code>'2'</code> &#232; 50, e cos&#236; via. La distanza tra un carattere numerico e il suo valore reale &#232; una costante.</p><h3>La Conversione</h3><p>Questa clausola rende la conversione un'operazione di una pulizia brutale. Per conoscere il valore numerico di un carattere, basta sottrarre il punto di partenza del contratto. L'offset di <code>'0'</code>.</p><pre><code><code>char c = '2'; // Valore ASCII: 50
int value = c - '0'; // 50 - 48 = 2.</code></code></pre><p>Ecco il numero. L'essenza. L'algoritmo per un numero intero si costruisce su questa singola intuizione. Per ogni cifra della stringa, si fa spazio al nuovo valore moltiplicando il risultato per 10, e poi si aggiunge la cifra appena convertita.</p><pre><code><code>int string_to_int(char *s) {
    int result = 0;
    for (int i = 0; s[i] != '\0'; i++) {
        int digit = s[i] - '0';
        result = result * 10 + digit;
    }
    return result;
}

// string_to_int("123") eseguir&#224;:
// 1. result = 0 * 10 + 1  -&gt; 1
// 2. result = 1 * 10 + 2  -&gt; 12
// 3. result = 12 * 10 + 3 -&gt; 123</code></code></pre><p>Il simbolo &#232; diventato numero. Il contratto &#232; stato onorato. Per un'analisi ancora pi&#249; dettagliata di implementazioni reali come la funzione <code>atoi</code>, <a href="https://www.pass4sure.com/blog/demystifying-atoi-in-c-basics-syntax-and-internal-working/">puoi approfondire qui</a>.</p><div><hr></div><blockquote><p>Apprezzare questi dettagli non &#232; archeologia. &#200; capire dove poggiano i piedi i giganti.</p></blockquote><p>Molte delle fondamenta su cui poggia il software sono cos&#236;. Contratti silenziosi, accordi presi decenni fa, la cui eleganza permette a tutto il resto di esistere. Apprezzare questi dettagli non &#232; archeologia. &#200; capire dove poggiano i piedi i giganti. E se pensi che questo problema sia "risolto", dai un'occhiata a cosa succede quando si entra nel mondo di Unicode e delle <a href="https://adaptivepatchwork.com/2023/07/10/utf-conversion/">sue sfide di conversione</a>.</p>]]></content:encoded></item><item><title><![CDATA[Complessità dalla Semplicità]]></title><description><![CDATA[Un singolo pixel pu&#242; creare un universo. John Conway, con poche regole, ha generato una complessit&#224; computazionale infinita, superando i giganti e ridefinendo i limiti di ci&#242; che &#232; possibile.]]></description><link>https://didof.substack.com/p/il-gioco-della-vita-di-conway</link><guid isPermaLink="false">https://didof.substack.com/p/il-gioco-della-vita-di-conway</guid><dc:creator><![CDATA[didof.dev]]></dc:creator><pubDate>Tue, 02 Sep 2025 11:15:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vZVW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6da5a-7681-4441-9b63-82474f132dc9_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vZVW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6da5a-7681-4441-9b63-82474f132dc9_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vZVW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6da5a-7681-4441-9b63-82474f132dc9_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!vZVW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6da5a-7681-4441-9b63-82474f132dc9_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!vZVW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6da5a-7681-4441-9b63-82474f132dc9_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!vZVW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6da5a-7681-4441-9b63-82474f132dc9_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vZVW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6da5a-7681-4441-9b63-82474f132dc9_1024x1024.png" width="419" height="419" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63d6da5a-7681-4441-9b63-82474f132dc9_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:419,&quot;bytes&quot;:1773438,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://didof.substack.com/i/172559950?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6da5a-7681-4441-9b63-82474f132dc9_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vZVW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6da5a-7681-4441-9b63-82474f132dc9_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!vZVW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6da5a-7681-4441-9b63-82474f132dc9_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!vZVW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6da5a-7681-4441-9b63-82474f132dc9_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!vZVW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63d6da5a-7681-4441-9b63-82474f132dc9_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>La Geniale Semplificazione</strong></h2><p><em><strong>Come John Conway cre&#242; un universo con due passi indietro.</strong></em></p><p>C'&#232; un sogno che ossessiona i padri della computazione. Quello della vita artificiale.</p><p>Di una macchina, che crea s&#233; stessa.</p><p>Il gigante John von Neumann ci prov&#242; per primo. Un automa colossale, quasi illeggibile nella sua complessit&#224;. Un progetto per conquistare pianeti. Ma la vera svolta non venne da chi aggiunse.</p><p>Venne da chi os&#242; togliere. Fino all'essenziale.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://didof.dev/it/game-of-life/&quot;,&quot;text&quot;:&quot;Il Gioco della Vita Online (Free)&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://didof.dev/it/game-of-life/"><span>Il Gioco della Vita Online (Free)</span></a></p><h3><strong>La Scintilla di Conway</strong></h3><p>Entra in scena <a href="https://it.wikipedia.org/wiki/John_Conway">John Conway</a>. Matematico a Cambridge. La sua domanda andava controcorrente.</p><p>"Qual &#232; il minimo assoluto, per creare un universo interessante?"</p><p>La sua risposta cambi&#242; le regole del gioco. Dimenticate i <a href="https://esolangs.org/wiki/Von_Neumann%27s_29-state_cellular_automaton">29 stati di Von Neumann</a>. Ne bastano due. Vivo. O morto.</p><h3><strong>La Genesi in Due Regole</strong></h3><p>Le leggi del nuovo universo sono di una purezza disarmante. Una cella morta con esattamente tre vicini vivi, prende vita. Una cella viva con due o tre vicini, resta viva.</p><p>Tutto il resto, &#232; morte. Per solitudine. O per sovrappopolazione.</p><p>Questo &#232; il Game of Life.</p><h3><strong>L'Universo Prende Vita, </strong>Conway preme "play".</h3><p>E dalla griglia emerge... comportamento. Non caos. Appaiono forme di vita digitale. Strutture stabili. I Still Lifes. Figure che pulsano. Gli Oscillators.</p><p>E poi, la meraviglia. Creature che viaggiano. Gli Alianti. I Gliders. Icone di cinque pixel che navigano la griglia in diagonale. Per sempre.</p><h3><strong>Dall'Aliante all'Infinito</strong></h3><p>Ci si rese conto presto. Quei Gliders non erano solo forme. Erano messaggeri. Bit di informazione che viaggiano su fili invisibili. La scoperta fu che, facendoli collidere in modi precisi, si potevano creare delle porte logiche.</p><p>Un Glider che ne devia un altro: una porta NOT. Due Gliders che si annichiliscono a vicenda per crearne un terzo: una porta AND. E con le porte logiche, si pu&#242; costruire un computer.</p><p>La Gosper Glider Gun, una macchina che generava un flusso infinito di Gliders, divenne la sorgente di alimentazione di questo computer nascosto. Un computer universale, latente in una griglia di pixel. Il "gioco" di Conway poteva calcolare tutto.</p><p>Era una Macchina di Turing.</p><h3><strong>La Lezione della Semplicit&#224;</strong></h3><p>La geniale semplificazione di Conway non era un limite. Era il punto di accesso a una complessit&#224; infinita. Una lezione che va ben oltre il codice.</p><p>La vera eleganza ingegneristica non sta nell'aggiungere, ma nel trovare il minimo indispensabile da cui tutto il resto pu&#242; emergere. A volte, per costruire un universo, non serve un progetto immenso. Serve solo trovare le regole giuste del gioco.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://didof.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://didof.substack.com/subscribe?"><span>Subscribe now</span></a></p><h4><strong>Fonti</strong></h4><div id="youtube2-R9Plq-D1gEk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;R9Plq-D1gEk&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/R9Plq-D1gEk?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div id="youtube2-Kk2MH9O4pXY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Kk2MH9O4pXY&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Kk2MH9O4pXY?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div id="youtube2-vGWGeund3eA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;vGWGeund3eA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/vGWGeund3eA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div>]]></content:encoded></item><item><title><![CDATA[Creeper e Reaper (1971)]]></title><description><![CDATA[Una storia di origini. Come un esperimento innocente, il primo worm digitale, ha dato vita alla sua controparte: il primo antivirus. Il mito di fondazione della cybersecurity.]]></description><link>https://didof.substack.com/p/creeper-e-reaper-1971</link><guid isPermaLink="false">https://didof.substack.com/p/creeper-e-reaper-1971</guid><dc:creator><![CDATA[didof.dev]]></dc:creator><pubDate>Mon, 01 Sep 2025 09:00:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!VaLO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1422cecd-7031-405f-b921-9b5f233c6838_1184x864.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VaLO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1422cecd-7031-405f-b921-9b5f233c6838_1184x864.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VaLO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1422cecd-7031-405f-b921-9b5f233c6838_1184x864.png 424w, https://substackcdn.com/image/fetch/$s_!VaLO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1422cecd-7031-405f-b921-9b5f233c6838_1184x864.png 848w, https://substackcdn.com/image/fetch/$s_!VaLO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1422cecd-7031-405f-b921-9b5f233c6838_1184x864.png 1272w, https://substackcdn.com/image/fetch/$s_!VaLO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1422cecd-7031-405f-b921-9b5f233c6838_1184x864.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VaLO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1422cecd-7031-405f-b921-9b5f233c6838_1184x864.png" width="1184" height="864" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1422cecd-7031-405f-b921-9b5f233c6838_1184x864.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:864,&quot;width&quot;:1184,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1463260,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://didof.substack.com/i/172463413?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1422cecd-7031-405f-b921-9b5f233c6838_1184x864.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VaLO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1422cecd-7031-405f-b921-9b5f233c6838_1184x864.png 424w, https://substackcdn.com/image/fetch/$s_!VaLO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1422cecd-7031-405f-b921-9b5f233c6838_1184x864.png 848w, https://substackcdn.com/image/fetch/$s_!VaLO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1422cecd-7031-405f-b921-9b5f233c6838_1184x864.png 1272w, https://substackcdn.com/image/fetch/$s_!VaLO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1422cecd-7031-405f-b921-9b5f233c6838_1184x864.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Il Creeper</h2><p>Nel 1971 non c'erano ancora computer nelle case. Erano dei mastodonti che occupavano intere stanze. Quasi fantascienza. Queste macchine venivano collegate tra loro da <a href="https://it.wikipedia.org/wiki/ARPANET">ARPANET</a>.</p><p>In un laboratorio polveroso, immerso tra fiumi in piena di cavi, <a href="https://en.wikipedia.org/wiki/Bob_Thomas_(reporter)">Bob Thomas</a> ebbe un'intuizione. Un'idea semplice, ma non per questo meno audace: <strong>poteva un programma muoversi da solo?</strong> Poteva un pezzo di software essere abbastanza autonomo da viaggiare, da un computer all'altro, senza un umano che lo trasportasse?</p><p>Non c'era intenzione maligna in Bob. Solo curiosit&#224;. Era un esploratore, un <em>pioniere</em>.</p><p>Bob Thomas diede vita a "<a href="https://en.wikipedia.org/wiki/Creeper_and_Reaper">Creeper</a>". Il primo worm digitale della storia non faceva nulla di male. Si limitava a saltare da un terminale all'altro, lasciando scritto dietro di s&#233; un messaggio beffardo:</p><pre><code>I'M THE CREEPER: CATCH ME IF YOU CAN!</code></pre><p>Un po' come un tag su di un muro digitale.</p><p>E in pieno rispetto del dualismo che compone questa realt&#224;, presto venne la controparte al Creeper.</p><div class="poll-embed" data-attrs="{&quot;id&quot;:369025}" data-component-name="PollToDOM"></div><div><hr></div><h2>Il Reaper</h2><p>La rete aveva un nuovo inquilino. Innocuo, ma sufficiente a far scattare un campanello d'allarme nella mente di un'altro pioniere, <a href="https://it.wikipedia.org/wiki/Ray_Tomlinson">Ray Tomlinson</a>. A onor del vero, non &#232; famoso per questo. &#200; famoso per aver inventato l'email (<em>say whaaat?</em>).</p><p>Ma in quel momento, la sua attenzione era tutta per Creeper. Tomlinson cap&#236; che un programma che si muoveva autonomamente non era solo un esperimento: era una <strong>vulnerabilit&#224;</strong>. Un codice che poteva viaggiare e riprodursi era un problema che richiedeva una soluzione, non solo un'osservazione.</p><p>E dove Creeper era un'idea, Reaper ne era la reazione.</p><p>Reaper era un codice semplice, ma rivoluzionario. Il suo unico scopo era inseguire Creeper. Non per osservarlo, o per coesistere. Il suo unico, inesorabile obiettivo era <strong>trovarlo e cancellarlo</strong>. A tutti gli effetti, era il primo antivirus della storia.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IRoP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e187de-7647-4b16-96b5-255ef8a2ec62_1024x537.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IRoP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e187de-7647-4b16-96b5-255ef8a2ec62_1024x537.png 424w, https://substackcdn.com/image/fetch/$s_!IRoP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e187de-7647-4b16-96b5-255ef8a2ec62_1024x537.png 848w, https://substackcdn.com/image/fetch/$s_!IRoP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e187de-7647-4b16-96b5-255ef8a2ec62_1024x537.png 1272w, https://substackcdn.com/image/fetch/$s_!IRoP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e187de-7647-4b16-96b5-255ef8a2ec62_1024x537.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IRoP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e187de-7647-4b16-96b5-255ef8a2ec62_1024x537.png" width="1024" height="537" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4e187de-7647-4b16-96b5-255ef8a2ec62_1024x537.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:537,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:937334,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://didof.substack.com/i/172463413?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e187de-7647-4b16-96b5-255ef8a2ec62_1024x537.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IRoP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e187de-7647-4b16-96b5-255ef8a2ec62_1024x537.png 424w, https://substackcdn.com/image/fetch/$s_!IRoP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e187de-7647-4b16-96b5-255ef8a2ec62_1024x537.png 848w, https://substackcdn.com/image/fetch/$s_!IRoP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e187de-7647-4b16-96b5-255ef8a2ec62_1024x537.png 1272w, https://substackcdn.com/image/fetch/$s_!IRoP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4e187de-7647-4b16-96b5-255ef8a2ec62_1024x537.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Il suo arrivo segn&#242; l'inizio del gioco. Non pi&#249; un'esplorazione solitaria, ma una caccia. Un duello digitale. Un gatto che inseguiva un topo.</p><div><hr></div><h2>Il Gioco Infinito</h2><p>La storia di Creeper e Reaper &#232; il mito di fondazione. La loro breve, leggendaria esistenza ha fissato un principio fondamentale della nostra era. Ha dimostrato che, per ogni idea, esiste una sua reazione. <strong>Per ogni vulnerabilit&#224;, una potenziale difesa.</strong> E per ogni creatore, c'&#232; sempre un altro che osserva e risponde.</p><p>Quello che era iniziato come un innocente esperimento sulla libert&#224; del codice, ha creato il concetto di worm. E, come reazione naturale e quasi istintiva, ha generato la sua controparte: l'antivirus. Il primo di una lunga serie.</p><p>Oggi, quel gioco continua. Il duello tra codice che attacca e codice che difende &#232; la spina dorsale della cybersecurity. Un'industria che vale miliardi, nata da un semplice tag lasciato su uno schermo.</p><p>Perch&#233;, ad essere onesti, il nostro intero ecosistema digitale &#232; costruito su questo <strong>eterno scontro</strong>. Un ciclo senza fine, dove ogni nuova vulnerabilit&#224; genera una nuova contromisura.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://didof.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">La mitologia non &#232; solo quella greca, egiziana e nordica. Esploriamo la mitologia digitale.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Git non salva le tue modifiche. Costruisce universi paralleli.]]></title><description><![CDATA[Ti sei mai chiesto perch&#233; Git &#232; cos&#236; veloce? La risposta non &#232; nei 'diff', ma nel suo geniale design a snapshot. Smontiamo il motore e vediamo come funziona.]]></description><link>https://didof.substack.com/p/git-universi-paralleli</link><guid isPermaLink="false">https://didof.substack.com/p/git-universi-paralleli</guid><dc:creator><![CDATA[didof.dev]]></dc:creator><pubDate>Sun, 31 Aug 2025 14:40:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!X6tr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F887ae66d-4548-4e4f-9245-2807eddb5475_2816x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Sfatiamo un mito: Git non pensa in termini di "modifiche". La sua vera natura &#232; quella di un file system specializzato che scatta <strong>snapshot immutabili</strong> e perfetti del nostro progetto. Capire questo ci aiuta a lavorare meglio. Apprezziamo insieme questo programma super-veloce che naviga una storia potenzialmente infinita.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X6tr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F887ae66d-4548-4e4f-9245-2807eddb5475_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X6tr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F887ae66d-4548-4e4f-9245-2807eddb5475_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!X6tr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F887ae66d-4548-4e4f-9245-2807eddb5475_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!X6tr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F887ae66d-4548-4e4f-9245-2807eddb5475_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!X6tr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F887ae66d-4548-4e4f-9245-2807eddb5475_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X6tr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F887ae66d-4548-4e4f-9245-2807eddb5475_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/887ae66d-4548-4e4f-9245-2807eddb5475_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5011317,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://didof.substack.com/i/172404869?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F887ae66d-4548-4e4f-9245-2807eddb5475_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!X6tr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F887ae66d-4548-4e4f-9245-2807eddb5475_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!X6tr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F887ae66d-4548-4e4f-9245-2807eddb5475_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!X6tr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F887ae66d-4548-4e4f-9245-2807eddb5475_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!X6tr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F887ae66d-4548-4e4f-9245-2807eddb5475_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Commit come Istantanea</h2><p>Il comando <code>git commit</code> non salva una patch. Forgia un <strong>commit object</strong>, un atomo indivisibile della nostra cronologia. Per vederlo, catturiamo l'ID dell'ultimo commit e usiamo <code>git cat-file</code> per ispezionarne il contenuto.</p><pre><code><code>$ git rev-parse HEAD
d44e43b2c28da7d033dcef0df71ed705d700169c

$ git cat-file -p d44e43b2c28da7d033dcef0df71ed705d700169c
tree e49bc081fa13438a945471f98c542502a4416060
parent 0b3d4b803980b3ef12091e2dccc5a257723a1445
author didof &lt;hello@didof.dev&gt; 1756650583 +0200
committer didof &lt;hello@didof.dev&gt; 1756650583 +0200

Fix: bug fixed</code></code></pre><p>Questo oggetto &#232; un'istantanea che lega insieme tre cose:</p><ul><li><p><code>tree</code> (lo stato completo del progetto)</p></li><li><p><code>parent</code> (il commit precedente)</p></li><li><p>e i metadati.</p></li></ul><div class="poll-embed" data-attrs="{&quot;id&quot;:368662}" data-component-name="PollToDOM"></div><h2><strong>Tree come Mappa</strong></h2><p>Il <code>commit</code> ci ha dato un puntatore a un <code>tree</code>. Questo oggetto &#232; l'equivalente di una directory, una mappa che associa nomi di file e cartelle ai loro contenuti.</p><pre><code><code>$ git cat-file -p f1e7b7b2a6b7d5a0a3d4f8c1b2a9e8c7d6b5a4b3
100644 blob a1b2c3...    README.md
100644 blob f0e9d8...    index.js
040000 tree 1a2b3c...    src</code></code></pre><p>Un <code>tree</code> elenca <code>blob</code> (file) e altri <code>tree</code> (sottodirectory), costruendo in modo ricorsivo l'intera gerarchia del progetto.</p><h2><strong>Blob come DNA</strong></h2><p>Il <code>blob</code> &#232; il contenuto puro di un file. La sua identit&#224; (l'hash) &#232; calcolata direttamente dal contenuto stesso. &#200; il suo DNA.</p><pre><code><code>$ echo 'il mio codice' &gt; codice.txt
$ git hash-object codice.txt
2d644598034d2f835e21f2f01c4a8a29a4f41078</code></code></pre><p>Grazie a questo sistema, se due file hanno contenuti identici, avranno lo stesso DNA. Git salver&#224; il <code>blob</code> <strong>una sola volta</strong>. Ecco il segreto della sua efficienza.</p><h4><strong>Velocit&#224; come Struttura</strong></h4><p>Perch&#233; <code>git log</code> &#232; cos&#236; veloce? Perch&#233; la cronologia di un branch &#232; una gigantesca <strong>Linked List</strong>. Ogni <code>commit</code> &#232; un nodo, il <code>parent</code> &#232; il link al nodo precedente.</p><p><code>git log</code> semplicemente attraversa questa catena.</p><p>Ma cosa succede su un repository con milioni di commit? Anche un'operazione cos&#236; semplice rallenta. Il nemico non &#232; l'algoritmo, &#232; l'I/O del disco. Per ogni passo, Git dovrebbe trovare un piccolo file, decomprimerlo e leggerne una riga. Ripetuto milioni di volte, questo processo &#232; lento.</p><p>Invece di fare milioni di piccole e lente letture dal disco, perch&#233; non creare un unico file-indice che contenga solo le informazioni necessarie per la "passeggiata"? Il <code>commit-graph file</code> &#232; esattamente questo: una mappa pre-calcolata di tutte le connessioni tra i commit. Leggendo questo singolo file, Git attraversa la storia senza quasi mai toccare i singoli oggetti. &#200; un trade-off geniale: un po' di lavoro in pi&#249; per scrivere l'indice, in cambio di una velocit&#224; di lettura istantanea.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://didof.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><em>Se ti piacciono le analisi tecniche che vanno al cuore del sistema, iscriviti per non perdere le prossime.</em></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Per approfondire:</p><ul><li><p><a href="https://git-scm.com/book/en/v2/Git-Internals-Git-Objects">Git Internals - Git Objects</a></p></li><li><p><a href="https://github.blog/open-source/git/gits-database-internals-i-packed-object-store/">Git&#8217;s database internals I: packed object store</a></p></li></ul><div><hr></div><h4><strong>Curatori, non Tecnici</strong></h4><p>Git non traccia "modifiche". Costruisce un universo di snapshot immutabili. Capire questo ci eleva da semplici utenti a curatori consapevoli della storia di un progetto.</p>]]></content:encoded></item><item><title><![CDATA[Starter Kit per Substack: 5 Principi Operativi per Partire da Zero]]></title><description><![CDATA[[derived]]]></description><link>https://didof.substack.com/p/starter-kit-per-substack-5-principi</link><guid isPermaLink="false">https://didof.substack.com/p/starter-kit-per-substack-5-principi</guid><dc:creator><![CDATA[didof.dev]]></dc:creator><pubDate>Sat, 30 Aug 2025 18:48:28 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f895a895-4a87-46a2-a312-396e5242d9da_2816x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><em>Smetterla di scrivere a caso.<br>Linee guida per l&#8217;</em>individuo pragmatico<em>.</em></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9JbE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2036fd0a-29ae-40ca-b54e-6df3431e58c6_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9JbE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2036fd0a-29ae-40ca-b54e-6df3431e58c6_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!9JbE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2036fd0a-29ae-40ca-b54e-6df3431e58c6_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!9JbE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2036fd0a-29ae-40ca-b54e-6df3431e58c6_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!9JbE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2036fd0a-29ae-40ca-b54e-6df3431e58c6_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9JbE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2036fd0a-29ae-40ca-b54e-6df3431e58c6_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2036fd0a-29ae-40ca-b54e-6df3431e58c6_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5451815,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://didof.substack.com/i/172354340?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2036fd0a-29ae-40ca-b54e-6df3431e58c6_2816x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9JbE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2036fd0a-29ae-40ca-b54e-6df3431e58c6_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!9JbE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2036fd0a-29ae-40ca-b54e-6df3431e58c6_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!9JbE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2036fd0a-29ae-40ca-b54e-6df3431e58c6_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!9JbE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2036fd0a-29ae-40ca-b54e-6df3431e58c6_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ho analizzato con <em>human-in-the-loop supervisor</em> un post di <strong>Sinem G&#252;nel</strong> su come partire da zero su Substack (ma si applica un po&#8217; in genere ad essere onesti) e ho estratto le 5 idee che contano davvero.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://didof.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Principi pratici per chi non vuole perdere tempo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><ul><li><p><em>La fonte originale</em></p></li></ul><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:168639324,&quot;url&quot;:&quot;https://writebuildscale.substack.com/p/start-substack-from-scratch&quot;,&quot;publication_id&quot;:2768005,&quot;publication_name&quot;:&quot;Write &#8226; Build &#8226; Scale&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!xM-E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a543e6-6e7c-4f6c-8b7e-88ec3c7c5cca_500x500.png&quot;,&quot;title&quot;:&quot;What I'd Do If I Had to Start on Substack From Scratch&quot;,&quot;truncated_body_text&quot;:null,&quot;date&quot;:&quot;2025-07-22T15:57:07.465Z&quot;,&quot;like_count&quot;:1633,&quot;comment_count&quot;:208,&quot;bylines&quot;:[{&quot;id&quot;:5895865,&quot;name&quot;:&quot;Sinem G&#252;nel&quot;,&quot;handle&quot;:&quot;sinemgunel&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!dbOl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F766a2554-31f0-4671-821a-7d7b556861f4_800x800.jpeg&quot;,&quot;bio&quot;:&quot;Digital Writer, Entrepreneur &amp; Educator. I help you build a business &amp; life you love. &#9881;&#65039;&#129505; Steal my FREE Substack Bestseller Workbook: https://mwa.kit.com/substackbestseller&quot;,&quot;profile_set_up_at&quot;:&quot;2023-09-21T12:27:43.879Z&quot;,&quot;reader_installed_at&quot;:&quot;2024-07-06T14:36:51.629Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:2810546,&quot;user_id&quot;:5895865,&quot;publication_id&quot;:2768005,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:2768005,&quot;name&quot;:&quot;Write &#8226; Build &#8226; Scale&quot;,&quot;subdomain&quot;:&quot;writebuildscale&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Learn how to write online, build your audience, and scale your income.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95a543e6-6e7c-4f6c-8b7e-88ec3c7c5cca_500x500.png&quot;,&quot;author_id&quot;:5895865,&quot;primary_user_id&quot;:5895865,&quot;theme_var_background_pop&quot;:&quot;#121BFA&quot;,&quot;created_at&quot;:&quot;2024-07-07T10:14:24.093Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Sinem G&#252;nel&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:100,&quot;status&quot;:{&quot;bestsellerTier&quot;:100,&quot;subscriberTier&quot;:1,&quot;leaderboardRank&quot;:41,&quot;leaderboardLabel&quot;:&quot;Education&quot;,&quot;leaderboardPubName&quot;:&quot;Write &#8226; Build &#8226; Scale&quot;,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;bestseller&quot;,&quot;tier&quot;:100}}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:false,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://writebuildscale.substack.com/p/start-substack-from-scratch?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!xM-E!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a543e6-6e7c-4f6c-8b7e-88ec3c7c5cca_500x500.png"><span class="embedded-post-publication-name">Write &#8226; Build &#8226; Scale</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">What I'd Do If I Had to Start on Substack From Scratch</div></div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">10 months ago &#183; 1633 likes &#183; 208 comments &#183; Sinem G&#252;nel</div></a></div><div><hr></div><p><strong>I 5 Principi Operativi</strong></p><h2>1. Vendi un Risultato, non un Argomento</h2><p>Non dire "scrivo di startup". Di' "ti aiuto a trovare i tuoi primi 10 clienti".</p><ul><li><p><em>Il Perch&#233; Funziona:</em> <strong>Le persone non comprano il trapano, ma il buco nel muro.</strong> Definire un risultato chiaro attira le persone giuste e respinge quelle sbagliate. La tua newsletter diventa uno <em>strumento</em>, non solo una lettura.</p></li></ul><h2>2. Testa le Idee con i "Notes"</h2><p>Un post richiede ore (se non giorni!). Una "Nota" richiede un minuto. Usa le Note per lanciare un'idea, una domanda o una statistica e vedi se alla gente interessa.</p><ul><li><p><em>Il Perch&#233; Funziona:</em> &#200; come lanciare un'esca per vedere se i pesci abboccano. Se una Nota genera discussione, hai la prova che vale la pena scriverci un articolo. &#200; il modo migliore per <strong>evitare di scrivere nel vuoto</strong>.</p></li></ul><h2>3. Offri un Regalo, non solo una Newsletter</h2><p>Invece di chiedere di "iscriversi", offri in regalo qualcosa di immediatamente utile: una guida in PDF, una checklist, un template.</p><ul><li><p><em>Il Perch&#233; Funziona:</em> Nessuno vuole un'altra email in casella. Tutti, per&#242;, vogliono soluzioni. Se il tuo "regalo" risolve un problema specifico <em>subito</em>, l'iscrizione non &#232; un favore che il lettore fa a te, ma <strong>una scelta intelligente che fa per s&#233; stesso</strong>.</p></li></ul><h2>4. Collaborare per Fiducia</h2><p>Trova 10 newsletter simili alla tua. Non chiedere di promuoverti. Offriti di scrivere un pezzo per loro, intervista il loro autore, fai qualcosa di utile per loro.</p><ul><li><p><em>Il Perch&#233; Funziona:</em> La gente si fida di chi gi&#224; legge. Apparire su una newsletter che amano &#232; come essere presentato da un amico fidato. <strong>Quella fiducia si trasferisce, in parte, a te.</strong></p></li></ul><h2>5. Fai Domande per Creare una Community (non solo un Pubblico).</h2><p>Alla fine di ogni post, fai una domanda specifica. Rispondi a ogni commento. Scrivi in privato ai tuoi lettori pi&#249; attivi per ringraziarli.</p><ul><li><p><em>Il Perch&#233; Funziona:</em> Parlare da solo &#232; una trasmissione. Parlare <em>con</em> gli altri &#232; una conversazione. Le persone restano dove si sentono ascoltate e parte di qualcosa. <strong>Un commento a cui rispondi vale pi&#249; di mille like silenziosi.</strong></p></li></ul><div><hr></div><h3>Chiusura</h3><p>Questi non sono solo consigli. Sono i pezzi di un sistema per costruire una <strong>community</strong>, non solo per scrivere una newsletter. Usali.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:168639324,&quot;url&quot;:&quot;https://writebuildscale.substack.com/p/start-substack-from-scratch&quot;,&quot;publication_id&quot;:2768005,&quot;publication_name&quot;:&quot;Write &#8226; Build &#8226; Scale&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!xM-E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a543e6-6e7c-4f6c-8b7e-88ec3c7c5cca_500x500.png&quot;,&quot;title&quot;:&quot;What I'd Do If I Had to Start on Substack From Scratch&quot;,&quot;truncated_body_text&quot;:null,&quot;date&quot;:&quot;2025-07-22T15:57:07.465Z&quot;,&quot;like_count&quot;:1633,&quot;comment_count&quot;:208,&quot;bylines&quot;:[{&quot;id&quot;:5895865,&quot;name&quot;:&quot;Sinem G&#252;nel&quot;,&quot;handle&quot;:&quot;sinemgunel&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!dbOl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F766a2554-31f0-4671-821a-7d7b556861f4_800x800.jpeg&quot;,&quot;bio&quot;:&quot;Digital Writer, Entrepreneur &amp; Educator. I help you build a business &amp; life you love. &#9881;&#65039;&#129505; Steal my FREE Substack Bestseller Workbook: https://mwa.kit.com/substackbestseller&quot;,&quot;profile_set_up_at&quot;:&quot;2023-09-21T12:27:43.879Z&quot;,&quot;reader_installed_at&quot;:&quot;2024-07-06T14:36:51.629Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:2810546,&quot;user_id&quot;:5895865,&quot;publication_id&quot;:2768005,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:2768005,&quot;name&quot;:&quot;Write &#8226; Build &#8226; Scale&quot;,&quot;subdomain&quot;:&quot;writebuildscale&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Learn how to write online, build your audience, and scale your income.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95a543e6-6e7c-4f6c-8b7e-88ec3c7c5cca_500x500.png&quot;,&quot;author_id&quot;:5895865,&quot;primary_user_id&quot;:5895865,&quot;theme_var_background_pop&quot;:&quot;#121BFA&quot;,&quot;created_at&quot;:&quot;2024-07-07T10:14:24.093Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Sinem G&#252;nel&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:100,&quot;status&quot;:{&quot;bestsellerTier&quot;:100,&quot;subscriberTier&quot;:1,&quot;leaderboardRank&quot;:41,&quot;leaderboardLabel&quot;:&quot;Education&quot;,&quot;leaderboardPubName&quot;:&quot;Write &#8226; Build &#8226; Scale&quot;,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;bestseller&quot;,&quot;tier&quot;:100}}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://writebuildscale.substack.com/p/start-substack-from-scratch?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!xM-E!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95a543e6-6e7c-4f6c-8b7e-88ec3c7c5cca_500x500.png" loading="lazy"><span class="embedded-post-publication-name">Write &#8226; Build &#8226; Scale</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">What I'd Do If I Had to Start on Substack From Scratch</div></div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">10 months ago &#183; 1633 likes &#183; 208 comments &#183; Sinem G&#252;nel</div></a></div>]]></content:encoded></item><item><title><![CDATA[Due Array Identici, Uno Lento: Il Segreto di V8 che Devi Conoscere]]></title><description><![CDATA[Una guida pratica per capire gli "Elements Kinds" di V8, evitare i downgrade di performance e rendere i tuoi array JavaScript incredibilmente pi&#249; veloci.]]></description><link>https://didof.substack.com/p/due-array-identici-uno-lento-il-segreto</link><guid isPermaLink="false">https://didof.substack.com/p/due-array-identici-uno-lento-il-segreto</guid><dc:creator><![CDATA[didof.dev]]></dc:creator><pubDate>Fri, 29 Aug 2025 10:18:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/m9cTaYI95Zc" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>L'illusione della Libert&#224;: Un Regalo con un Costo Nascosto</h3><p>Se hai mai utilizzato linguaggi come il C, sai bene che richiedono estrema precisione. Vuoi un array di interi? Lo dichiari. Di caratteri? Lo dichiari. Il compilatore esige di sapere tutto subito, cos&#236; da poter ottimizzare al massimo la memoria.</p><p>Poi arrivi in JavaScript e scopri una libert&#224; quasi anarchica. Puoi creare un array e inserirvi di tutto: un numero, una stringa, persino un oggetto.</p><p><code>[1, "ciao", { a: 1 }]</code></p><p>Fantastico, vero? &#200; una flessibilit&#224; che ti fa sentire potente.</p><p>Ma ogni potere ha un costo nascosto. Come fa il motore V8, che &#232; costruito per la velocit&#224; pura, a gestire un contenitore cos&#236; imprevedibile? Sembra quasi che debba chiedersi ogni volta: "Cosa mai potrebbe esserci dentro questa cella?".</p><p>Questa domanda &#232; esattamente il punto da cui parte il nostro viaggio.</p><div><hr></div><h3>Sotto il Cofano: La Classificazione Segreta degli Array di V8</h3><p>Allora, come fa V8 a gestire il caos di cui parlavamo? La risposta non &#232; nella magia, ma in una strategia incredibilmente pragmatica. V8 non subisce passivamente la flessibilit&#224; di JavaScript, ma <strong>gioca d'anticipo</strong>.</p><p>Sotto il cofano, si comporta come un programmatore C purosangue: osserva attentamente cosa metti nei tuoi array e li etichetta. Questo sistema di classificazione segreto si chiama <strong>"Elements Kinds"</strong>.</p><h4>Il caso ideale: l'array perfetto</h4><p>Se crei un array e ci metti dentro solo numeri interi piccoli, come <code>[10, 20, 30]</code>, V8 esulta. Lo etichetta internamente come <code>PACKED_SMI_ELEMENTS</code>.</p><ul><li><p><strong>PACKED</strong>: Significa che &#232; compatto, senza "buchi" tra gli elementi.</p></li><li><p><strong>SMI</strong>: Sta per <em>Small Integers</em> (interi piccoli).</p></li></ul><p>Quando un array &#232; di questo tipo, V8 sa che ogni elemento occupa esattamente la stessa microscopica quantit&#224; di memoria. Per trovare il terzo elemento, non deve controllare ogni cella: esegue un semplice calcolo matematico, salta all'indirizzo di memoria corretto e arriva a destinazione. Il risultato &#232; pura velocit&#224;.</p><h4>Il primo piccolo compromesso</h4><p>Cosa succede, invece, se inserisci un numero con la virgola, come <code>[10.1, 20.2, 30.3]</code>? V8 non pu&#242; pi&#249; usare l'ottimizzazione per gli interi piccoli e deve effettuare un "downgrade": l'array diventa un <code>PACKED_DOUBLE_ELEMENTS</code>. &#200; sempre compatto e veloce, ma gestisce numeri in virgola mobile, che sono leggermente pi&#249; complessi.</p><p>Fin qui, tutto bene. V8 &#232; ancora in grado di ottimizzare. &#200; quando il caos aumenta e inseriamo tipi di dati completamente diversi che le cose iniziano a farsi costose.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://didof.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Ti piacciono questi insights? Tanti altri in arrivo!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>La Cascata dei Downgrade: Quando la Magia si Spezza</h3><p>Abbiamo visto che V8 ama gli array ordinati con numeri dello stesso tipo. Ma cosa succede se, in un array di interi perfetti, inseriamo una stringa?</p><p><code>[10, 20, "ciao"]</code></p><p>Succede una cosa tanto semplice quanto costosa: <strong>il downgrade</strong>.</p><p>V8 non pu&#242; pi&#249; garantire che ogni cella contenga un numero. L'etichetta cambia da <code>PACKED_SMI_ELEMENTS</code> a <code>PACKED_ELEMENTS</code>, la versione pi&#249; generica per un contenitore di tipi misti. Ora, per V8, ogni cella non contiene pi&#249; un valore diretto, ma un <strong>puntatore</strong> a un'altra area della memoria dove si trova il valore reale. Ogni volta che vuoi leggere un elemento, il motore deve fare un doppio lavoro: leggere il puntatore e poi seguirlo per trovare il valore.</p><p>&#200; un'operazione intrinsecamente pi&#249; lenta. E la cosa pi&#249; importante da capire &#232; che <strong>non si torna indietro</strong>. Una volta che un array ha subito il downgrade, rimarr&#224; "lento" per sempre, anche se in seguito rimuovi la stringa.</p><h4>Il colpo di grazia: i "buchi"</h4><p>C'&#232; un modo per peggiorare ulteriormente le cose: creare "buchi" (<em>holes</em>) nel tuo array. Ad esempio, quando fai questo:</p><p>let arr = [];</p><p>arr[5] = 10; // Salti gli indici da 0 a 4</p><p>V8 etichetta subito questo array come <strong>HOLEY</strong> (con buchi). Un <code>HOLEY_ELEMENTS</code> &#232; il tipo di array meno performante in assoluto. Non solo il motore deve gestire i puntatori, ma deve anche controllare costantemente se un indice esiste o &#232; solo un buco vuoto.</p><p>Questa &#232; la cascata dei downgrade: si parte dal velocissimo <code>PACKED_SMI</code> e, ad ogni compromesso (tipi misti, buchi), si scende verso un tipo di array pi&#249; generico, pi&#249; flessibile, ma molto pi&#249; lento.</p><div><hr></div><h3>Scrivi Codice da Pro: Collabora con l'Intelligenza di V8</h3><p>Torniamo alla domanda iniziale. Perch&#233; due array che appaiono identici, <code>[1, 2, 3]</code> e <code>[1, 2, 3]</code>, possono avere performance drasticamente diverse?</p><p>La risposta non &#232; in <em>cosa</em> sono, ma nella loro <strong>storia</strong>.</p><ul><li><p>L'<strong>array veloce</strong> &#232; nato e cresciuto puro. Ha sempre e solo contenuto numeri interi piccoli. V8 lo ha etichettato fin da subito come <code>PACKED_SMI_ELEMENTS</code> e ha mantenuto questa ottimizzazione.</p></li><li><p>L'<strong>array lento</strong>, invece, ha un passato turbolento. Magari a un certo punto conteneva una stringa, oppure un elemento &#232; stato rimosso creando un buco. Anche se alla fine l'hai "ripulito", per V8 la cicatrice rimane. Il downgrade &#232; <strong>irreversibile</strong>.</p></li></ul><p>Questa &#232; la lezione fondamentale: V8 premia la coerenza e la disciplina. Non ti impedisce di fare quello che vuoi, ma ti ricompensa se collabori con le sue regole interne.</p><p>Quindi, come si scrive codice da professionista?</p><ol><li><p><strong>Inizializza gli array in modo corretto.</strong> Se sai gi&#224; la dimensione, creali con quella dimensione per evitare che crescano in modi imprevedibili.</p></li><li><p><strong>Mantieni i tipi di dati omogenei.</strong> Se un array nasce per contenere numeri, fai in modo che contenga solo numeri.</p></li><li><p><strong>Non creare "buchi".</strong> Evita di usare <code>delete</code> su un indice (che crea un buco) o di saltare posizioni durante l'assegnazione. Metodi come <code>splice</code> sono pi&#249; sicuri perch&#233; mantengono l'array compatto.</p></li></ol><p>Non si tratta di scrivere codice pi&#249; complesso, ma di scriverlo con maggiore consapevolezza. Ora hai il potere non solo di far funzionare le cose, ma di farle andare veloci.</p><div><hr></div><h3>Fonti e Riferimenti</h3><p>Per chi volesse approfondire l'argomento direttamente alla fonte, queste sono le risorse di riferimento:</p><ul><li><p><strong><a href="https://v8.dev/blog/elements-kinds">Elements kinds in V8</a></strong></p><ul><li><p>URL: <code>https://v8.dev/blog/elements-kinds</code></p></li></ul></li><li><p><strong><a href="https://chromium.googlesource.com/v8/v8/+/de6382dfc88b90a28c051ed2b434315586035717/src/objects/elements-kind.h">Elements in source code</a></strong></p><ul><li><p>URL: <code>https://chromium.googlesource.com/v8/v8/+/de6382dfc88b90a28c051ed2b434315586035717/src/objects/elements-kind.h</code></p></li></ul></li><li><p><strong><a href="https://v8.dev/blog/react-cliff">The story of a V8 performance cliff in React</a></strong></p><ul><li><p>URL: <code>https://v8.dev/blog/react-cliff</code></p></li></ul></li><li><p><strong><a href="https://www.youtube.com/watch?v=m9cTaYI95Zc">Understanding V8&#8217;s Internals for JavaScript Developers (Video)</a></strong></p></li></ul><div id="youtube2-m9cTaYI95Zc" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;m9cTaYI95Zc&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/m9cTaYI95Zc?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://didof.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>