<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Nicolò Altamura on</title><link>https://nicolo.dev/</link><description>Recent content in Nicolò Altamura on</description><generator>Hugo</generator><language>it</language><lastBuildDate>Mon, 09 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://nicolo.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>ptxNinja: decompilazione per PTX (CUDA)</title><link>https://nicolo.dev/projects/ptx-ninja/</link><pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate><guid>https://nicolo.dev/projects/ptx-ninja/</guid><description>&lt;p&gt;&lt;a href="https://github.com/seekbytes/ptxNinja"&gt;ptxNinja&lt;/a&gt; è un plugin architetturale che estende le funzionalità di Binary Ninja per supportare file &lt;code&gt;*.ptx&lt;/code&gt; contenenti funzioni o kernel scritti in PTX. Il linguaggio PTX è un formato di basso livello utilizzato da NVDIA per le proprie GPU basate su architetture CUDA. Questo plugin consente di avere un lifter che traduce istruzioni grezze in istruzioni nel formato di basso livello (LLIL) che Binary Ninja necessita per avviare le analisi.&lt;/p&gt;</description></item><item><title>Chi sono</title><link>https://nicolo.dev/about/</link><pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate><guid>https://nicolo.dev/about/</guid><description>&lt;p&gt;Security Engineer presso &lt;a href="https://emproof.com"&gt;emproof&lt;/a&gt;, nel campo della protezione del software. Ho una solida formazione in reverse engineering, nell&amp;rsquo;analisi statica e nella ricerca e sviluppo (R&amp;amp;D) inerente all&amp;rsquo;analisi binaria, come disassembler, decompilatori e progettazione di linguaggi intermedi.&lt;/p&gt;
&lt;p&gt;Questo è il sito web personale in cui pubblico alcuni post riguardo quello che faccio e i miei interessi. Il blog raggruppa gran parte della mia esperienza con la sicurezza del software, l&amp;rsquo;informatica e tutto ciò che riguarda la protezione del software.&lt;/p&gt;</description></item><item><title>Obfuscation Analysis: A BinaryNinja plugin</title><link>https://nicolo.dev/projects/obfuscation-analysis/</link><pubDate>Thu, 04 Sep 2025 00:00:00 +0000</pubDate><guid>https://nicolo.dev/projects/obfuscation-analysis/</guid><description>&lt;p&gt;&lt;a href="https://github.com/mrphrazer/obfuscation_analysis"&gt;Obfuscation Analysis&lt;/a&gt; è un plugin per Binary Ninja progettato per migliorare la leggibilità di binari protetti una volta identificate le regioni di codice rilevanti. Fornisce strumenti mirati per affrontare i principali ostacoli del reverse engineering, tra cui la semplificazione delle MBA direttamente nella vista del decompilatore, il rilevamento e la rimozione di funzioni corrotte che compromettono la disassemblazione e l’inlining ricorsivo delle funzioni a livello di decompilazione per migliorare la propagazione e la pulizia attraverso i confini delle chiamate. Tutte le funzionalità sono implementate come task in background efficienti, con un solido sistema di gestione e segnalazione degli errori.&lt;/p&gt;</description></item><item><title>Ottenere le istruzioni: linear sweep e recursive traversal</title><link>https://nicolo.dev/blog/ottenere-istruzioni-disassemblaggio-linear-recursive/</link><pubDate>Mon, 03 Feb 2025 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/ottenere-istruzioni-disassemblaggio-linear-recursive/</guid><description>&lt;p&gt;Costruire il proprio insieme di strumenti di analisi è un ottimo esercizio per chi ha già delle basi e consente successivamente di poter passare ad implementare analisi più mirate nell&amp;rsquo;ambito del reverse engineering. Anche solamente vedere come poter implementare i diversi algoritmi fornisce uno schema mentale che potrebbe aiutare durante il reverse engineering di file eseguibili più difficili da analizzare, ovvero quelli offuscati.&lt;/p&gt;
&lt;p&gt;Escludendo il formato del file, un file eseguibile contiene due tipi di informazioni principali: le &lt;strong&gt;istruzioni&lt;/strong&gt; (cosa la CPU esegue) e i &lt;strong&gt;dati&lt;/strong&gt; (che informazioni la CPU utilizza per eseguire le istruzioni). Per poter ricostruire le informazioni di alto livello, ogni pipeline di analisi implementa diversi passi: possiamo trovare il parsing del file eseguibile, il disassemblaggio delle istruzioni, la data flow analysis, la ricostruzione del grafo del controllo di flusso, l&amp;rsquo;inferenza dei tipi. Inferire questo tipo di informazioni è molto complesso data la natura dell&amp;rsquo;analisi statica in cui si affrontano molti problemi indecibili: poter derivare informazioni corrette è una questione difficile e ogni passo della pipeline di analisi influisce sul risultato finale.&lt;/p&gt;</description></item><item><title>IPA: Interactive PDF Analysis</title><link>https://nicolo.dev/projects/ipa/</link><pubDate>Thu, 22 Aug 2024 00:00:00 +0000</pubDate><guid>https://nicolo.dev/projects/ipa/</guid><description>&lt;p&gt;&lt;a href="https://github.com/seekbytes/IPA"&gt;Interactive PDF Analysis&lt;/a&gt; (chiamato anche IPA) consente a qualsiasi ricercatore di esplorare i dettagli interni di qualsiasi file PDF. I file PDF possono essere utilizzati per trasportare payload dannosi che sfruttano le vulnerabilità e i problemi dei visualizzatori di PDF, oppure possono essere utilizzati nelle campagne di phishing come artefatti di ingegneria sociale. L&amp;rsquo;obiettivo di questo software è quello di consentire a qualsiasi analista di andare in profondità nel proprio file PDF. Tramite IPA, è possibile estrarre payload importanti dai file PDF, comprendere le relazioni tra gli oggetti e dedurre elementi che possono essere utili per il triage di payload dannosi o non attendibili.&lt;/p&gt;</description></item><item><title>Appunti di Software Security</title><link>https://nicolo.dev/projects/appunti-sw-security/</link><pubDate>Sun, 26 Nov 2023 00:00:00 +0000</pubDate><guid>https://nicolo.dev/projects/appunti-sw-security/</guid><description>&lt;p&gt;Appunti del corso Software Security tenuto dalla prof.ssa Mila Dalla Preda, anno accademico 2023/2024 del corso magistrale in scienze e ingegneria informatica presso l&amp;rsquo;Università degli Studi di Verona.&lt;/p&gt;
&lt;p&gt;Per ora è una semplice bozza in stato embrionale: work in progress. Mancano tutti i capitoli.&lt;/p&gt;
&lt;!-- aggiungi come è stato creato il PDF, a che punto è --&gt;
&lt;ul&gt;
&lt;li&gt;Capitolo 1: Introduzione&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolo.dev/files/pdf/sicurezza_sw_2_autenticazione.pdf"&gt;Capitolo 2: Autenticazione&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolo.dev/files/pdf/sicurezza_sw_3_controllo_accessi.pdf"&gt;Capitolo 3: Controllo degli accessi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolo.dev/files/pdf/sicurezza_sw_4_protezione.pdf"&gt;Capitolo 4: Protezione del software&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolo.dev/files/pdf/sicurezza_sw_5_offuscamento.pdf"&gt;Capitolo 5: Offuscamento del codice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nicolo.dev/files/pdf/sicurezza_sw_6_impossibilita.pdf"&gt;Capitolo 6: Impossibilità dell&amp;rsquo;offuscamento&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Capitolo 7: Offuscamento basato sulla semantica&lt;/li&gt;
&lt;li&gt;Capitolo 8: Rilevamento del tampering&lt;/li&gt;
&lt;li&gt;Capitolo 9: Watermarking&lt;/li&gt;
&lt;li&gt;Capitolo 10: Similarità&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://nicolo.dev/files/pdf/appunti_sicurezza_sw.pdf"&gt;Appunti PDF fino al capitolo 5&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Il ruolo del grafo di controllo di flusso nell'analisi statica</title><link>https://nicolo.dev/blog/ruolo-grafo-controllo-flusso-analisi-statica/</link><pubDate>Mon, 30 Oct 2023 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/ruolo-grafo-controllo-flusso-analisi-statica/</guid><description>&lt;p&gt;Il grafo del controllo di flusso è un importante elemento da costruire nell&amp;rsquo;analisi statica dei programmi per applicare una serie di analisi che prendono in considerazione il flusso di un programma. Il &amp;ldquo;flusso&amp;rdquo;, informalmente, rappresenta l&amp;rsquo;evoluzione del programma durante il tempo d&amp;rsquo;esecuzione, ovvero a quali indirizzi la CPU salta per poter proseguire l&amp;rsquo;esecuzione del programma.&lt;/p&gt;
&lt;p&gt;Il grafo (anche chiamato CFG per brevità) consente di ricavare in modo generale i primi elementi di alto livello del software partendo da una rappresentazione di livello basso/medio (citiamo il codice assembly o codice intermedio). Gli elementi di alto livello includono i loop di alto livello (cicli while o for), rami di esecuzione (switch, if, else) che possono essere fondamentali per individuare come l&amp;rsquo;esecuzione evolve nel tempo.&lt;/p&gt;</description></item><item><title>Analisi dell'offuscamento di Apple FairPlay</title><link>https://nicolo.dev/blog/fairplay-apple-offuscamento/</link><pubDate>Mon, 28 Aug 2023 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/fairplay-apple-offuscamento/</guid><description>&lt;p&gt;&lt;strong&gt;FairPlay&lt;/strong&gt; comprende una serie di algoritmi creati da Apple per la gestione dei diritti digitali (anche chiamato DRM, &lt;em&gt;digital rights management&lt;/em&gt;). FairPlay è attualmente utilizzato per gestire la decrittazione delle applicazioni per iOS durante l&amp;rsquo;installazione delle stesse sui dispositivi Apple. Sappiamo infatti che Apple distribuisce tutte le applicazioni dell&amp;rsquo;Apple Store attraverso il formato file IPA. Il formato file IPA contiene al suo interno le informazioni crittate che verranno poi utilizzate dal sistema operativo per installare una applicazione. Tutte le informazioni crittate vengono gestite tramite FairPlay che si occupa di mantenere sicura la chiave di decrittazione e tutto il processo per evitare che, in mani sbagliate, sia possibile decrittare il contenuto dei file .ipa per condividere il contenuto di un app (magari pagata).&lt;/p&gt;</description></item><item><title>Reverse engineering McAfee Virus Scan - Parte I: L'installer</title><link>https://nicolo.dev/blog/reverse-engineering-mcafee-virus-scan/</link><pubDate>Thu, 17 Aug 2023 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/reverse-engineering-mcafee-virus-scan/</guid><description>&lt;p&gt;Con questo articolo voglio riassumere alcuni dettagli che ho trovato durante l&amp;rsquo;analisi del software McAfee Virus Scan, storicamente parlando, si tratta di uno dei primi antivirus commerciali. Studiarne i dettagli e il funzionamento potrebbe rivelare alcune scelte di progettazione che mostrano come i primi antivirus funzionarono. In particolar modo siamo interessati a capire come avveniva la detection dei malware, nonché alle particolari caratteristiche che il prodotto McAfee offriva.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nicolo.dev/images/blog/mcafee/antivirus-screen.jpeg" alt="Screenshot di VirusScan Console"&gt;&lt;/p&gt;</description></item><item><title>Pocket - Mixed Boolean Arithmetic</title><link>https://nicolo.dev/projects/pocket/</link><pubDate>Tue, 25 Jul 2023 00:00:00 +0000</pubDate><guid>https://nicolo.dev/projects/pocket/</guid><description>&lt;p&gt;&lt;a href="https://github.com/seekbytes/pocket"&gt;POCKET&lt;/a&gt; è un programma che consente di applicare delle trasformazioni per offuscare una espressione MBA (Mixed Boolean Arithmetic). Accetta delle espressioni in input e le offusca tramite alcune regole che vengono applicate per sostituzione.&lt;/p&gt;
&lt;p&gt;Esempi di regole che vengono applicate:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;X ^ Y == (X | Y) - (X &amp;amp; Y)
X + Y == (X &amp;amp; Y) + (X | Y)
X - Y == (X ^ -Y) + 2*(X &amp;amp; -Y)
X &amp;amp; Y == (X + Y) - (X | Y)
X | Y == X + Y + 1 + (~X | ~Y)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="rendere-difficile-lanalisi-statica"&gt;Rendere difficile l&amp;rsquo;analisi statica&lt;/h2&gt;
&lt;p&gt;La maggior parte dei decompilatori (ad esempio IDA Pro, Ghidra, Binary Ninja) sono in grado di riottenere da un qualsiasi programma binario gran parte delle istruzioni originali. Seppur le istruzioni in codice macchina non contengano vaste informazioni (come commenti, nomi di variabili, strutture di alto livello), è ancora possibile recuperare gran parte della logica originale.&lt;/p&gt;</description></item><item><title>Introduzione a Pocket: offuscatore per espressioni MBA</title><link>https://nicolo.dev/blog/introduzione-pocket-offuscatore/</link><pubDate>Mon, 24 Jul 2023 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/introduzione-pocket-offuscatore/</guid><description>&lt;p&gt;L&amp;rsquo;offuscamento del codice è una tecnica che consente di applicare delle trasformazioni ad un codice per rendere più difficile e più complessa eventuali analisi statiche (automatiche e non). L&amp;rsquo;analisi statica raggruppa una serie di operazioni che un&amp;rsquo;analista può svolgere su un eseguibile per cercare di ottenere le informazioni come le strutture ad alto livello, le variabili originali.&lt;/p&gt;
&lt;p&gt;Tra le tecniche di analisi statica di un software, possiamo trovare il reverse engineering, chiamata anche &lt;em&gt;ingegneria inversa&lt;/em&gt;. Questa tecnica consente di recuperare parte delle informazioni che permettono ad un&amp;rsquo;analista di comprendere meglio come funziona il software, in che modo interagisce con i dati e quali algoritmi utilizza. Ottenere il codice originario presenta spesso diverse sfide e insidie dal momento che il codice macchina non consente di esprimere i cicli e le strutture dati di alto livello.&lt;/p&gt;</description></item><item><title>È stata rilasciata la versione 0.0.3 di MicroSCOPE</title><link>https://nicolo.dev/blog/rilascio-versione-microscope-0-0-3/</link><pubDate>Mon, 29 May 2023 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/rilascio-versione-microscope-0-0-3/</guid><description>&lt;p&gt;È stata rilasciata una nuova versione di &lt;a href="https://github.com/seekbytes/MicroSCOPE"&gt;MicroSCOPE&lt;/a&gt;. Di seguito la lista di alcune modifiche apportate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Migliorata euristica sulle flag delle sezioni&lt;/li&gt;
&lt;li&gt;Risolto problema con offset delle risorse, se presenti in sezioni diverse&lt;/li&gt;
&lt;li&gt;Aggiunta stampa sulle flag delle sezioni&lt;/li&gt;
&lt;li&gt;Risolto problema sulla verifica della trust chain per la sezione Security&lt;/li&gt;
&lt;li&gt;Aggiunti certificati di root Microsoft (2010 e 2017)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;È possibile scaricare il software per Windows, Unix e macOS tramite il link disponibile su &lt;a href="https://github.com/seekbytes/MicroSCOPE/releases/tag/0.0.3"&gt;Github&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>MicroSCOPE - analizzatore per ransomware</title><link>https://nicolo.dev/projects/microscope/</link><pubDate>Sun, 08 Jan 2023 00:00:00 +0000</pubDate><guid>https://nicolo.dev/projects/microscope/</guid><description>&lt;p&gt;&lt;a href="https://github.com/seekbytes/MicroSCOPE"&gt;MicroSCOPE&lt;/a&gt; è un software a linea di comando che serve per analizzare in modo statico un qualsiasi programma binario ELF (*nix) o PE (Windows). MicroSCOPE applica delle euristiche per cercare eventuali caratteristiche che possano identificare il programma come ransomware.&lt;/p&gt;
&lt;p&gt;Il progetto è stato sviluppato seguendo le tecniche moderne di ingegneria del software, prediligendo un approccio incrementale. Come linguaggio di programmazione ho utilizzato &lt;a href="https://go.dev"&gt;Go&lt;/a&gt;, potente, versatile e con una sintassi molto simile al C; Go mi ha permesso di scrivere il software in qualche settimana senza preoccuparmi della gestione dei puntatori, della memoria e di altri dettagli sulla performance out-of-scope.&lt;/p&gt;</description></item><item><title>È stata rilasciata la versione 0.0.2 di MicroSCOPE</title><link>https://nicolo.dev/blog/rilascio-versione-microscope-0-0-2/</link><pubDate>Wed, 16 Nov 2022 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/rilascio-versione-microscope-0-0-2/</guid><description>&lt;p&gt;È stata rilasciata una nuova versione di &lt;a href="https://github.com/seekbytes/MicroSCOPE"&gt;MicroSCOPE&lt;/a&gt;. Di seguito la lista di alcune modifiche apportate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Risolti fix sull&amp;rsquo;intestazione dei file ELF&lt;/li&gt;
&lt;li&gt;Aggiunte euristiche sul nome della sezione&lt;/li&gt;
&lt;li&gt;Aggiunte euristiche per le risorse&lt;/li&gt;
&lt;li&gt;Migliorate euristiche delle stringhe per ransomware&lt;/li&gt;
&lt;li&gt;Aumentato threshold al valore 150&lt;/li&gt;
&lt;li&gt;Risolto un problema sui valori di export&lt;/li&gt;
&lt;li&gt;Aggiunto il campo Timestamp alla risorsa&lt;/li&gt;
&lt;li&gt;Aggiunte euristiche per file .NET&lt;/li&gt;
&lt;li&gt;Risolto problema di calcolo errato della dimensione dell&amp;rsquo;intestazione&lt;/li&gt;
&lt;li&gt;Aggiunta conversione UUID/Path (Windows-related)&lt;/li&gt;
&lt;li&gt;Risolto problema degli apici all&amp;rsquo;interno del file TXT di output&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;È possibile scaricare il software per Windows, Unix e macOS tramite il link disponibile su &lt;a href="https://github.com/seekbytes/MicroSCOPE/releases/tag/0.0.2"&gt;Github&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>OSLab</title><link>https://nicolo.dev/projects/oslab/</link><pubDate>Sat, 08 Oct 2022 00:00:00 +0000</pubDate><guid>https://nicolo.dev/projects/oslab/</guid><description>&lt;p&gt;OSLab contiene i file sorgenti per &lt;a href="https://gohugo.io"&gt;Hugo&lt;/a&gt; che consentono di costruire la documentazione in HTML per il corso di Sistemi Operativi, anno accademico 2021-2022, parte di laboratorio. Contiene una serie di informazioni utili che talvolta non sono scritte nelle slide e alcuni esempi di codice spiegati passo passo.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/seekbytes/OSlab"&gt;Github repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://seekbytes.github.io/oslab/"&gt;Documentazione in formato HTML&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="mailto:seekbytes@protonmail.com?Subject=OSLab" class="btn"&gt;Voglio saperne di più&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Creare il tuo blog statico con Hugo + Cloudflare Pages</title><link>https://nicolo.dev/blog/creare-blog-statico-hugo-go-cloudflare-pages/</link><pubDate>Sun, 15 May 2022 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/creare-blog-statico-hugo-go-cloudflare-pages/</guid><description>&lt;p&gt;&lt;a href="https://gohugo.io"&gt;Hugo&lt;/a&gt;&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; è uno strumento per la generazione di siti statici, scritto in Go. È incredibilmente veloce e dispone di ottime primitive di alto livello e flessibili per la gestione dei contenuti utilizzando &lt;a href="https://it.wikipedia.org/wiki/Markdown"&gt;Markdown&lt;/a&gt; e &lt;a href="https://www.json.org/json-it.html"&gt;JSON&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Imparerai a creare un nuovo blog Hugo e la distribuirete utilizzando &lt;a href="https://pages.cloudflare.com"&gt;Cloudflare Pages&lt;/a&gt;. Utilizzerete la CLI di hugo per creare un nuovo sito Hugo e successivamente Cloudflare per fare il deploy del vostro sito web. Per creare un nuovo blog è necessario avere un account Cloudflare e un account Github.&lt;/p&gt;</description></item><item><title>Formattare data su Go</title><link>https://nicolo.dev/blog/formattare-data-golang/</link><pubDate>Thu, 14 Apr 2022 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/formattare-data-golang/</guid><description>&lt;p&gt;Ipotizziamo di avere il seguente codice:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#ebdbb2;background-color:#282828;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;t &lt;span style="color:#fe8019"&gt;:=&lt;/span&gt; time.&lt;span style="color:#fabd2f"&gt;Now&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fmt.&lt;span style="color:#fabd2f"&gt;Println&lt;/span&gt;(t.&lt;span style="color:#fabd2f"&gt;Format&lt;/span&gt;(&lt;span style="color:#b8bb26"&gt;&amp;#34;yyyyMMddHHmmss&amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Come possiamo formattare la data nel formato: &lt;code&gt;yyyyMMddHHmmss&lt;/code&gt;? La domanda è molto semplice e la risposta è quasi banale. Tuttavia il motivo di questa risposta cela uno dei grandi incubi dei programmatori che scrivono con GoLang.&lt;/p&gt;
&lt;h2 id="2-gennaio-2006"&gt;2 Gennaio 2006&lt;/h2&gt;
&lt;p&gt;Per formattare la data è sufficiente inserire &lt;code&gt;fmt.Println(t.Format(&amp;quot;20060102150405&amp;quot;))&lt;/code&gt;. Mh, sembra molto strano a prima vista. Perché includiamo una data? E perchè proprio il 2 Gennaio 2006?&lt;/p&gt;</description></item><item><title>Installare Gitea: instanza self-hosted per Git</title><link>https://nicolo.dev/blog/installare-gitea/</link><pubDate>Sun, 30 Jan 2022 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/installare-gitea/</guid><description>&lt;p&gt;Avete l&amp;rsquo;impressione di avere troppo codice sparso per il vostro SSD? Volete condividere elaborati e cartelle piene di codice che non toccate da anni? Odiate GitHub? Un buon backup del vostro codice tramite Git potrebbe fare al caso vostro.&lt;/p&gt;
&lt;p&gt;Gitea è un progetto open source che ti permette di creare la tua istanza personale di Git server, accessibile con una interfaccia online che ricorda molto quella di &lt;a href="https://gitlab.com"&gt;Gitlab&lt;/a&gt; o &lt;a href="https://github.com"&gt;Github&lt;/a&gt;. In questo post, andremo ad illustrare come è possibile installare Gitea e incominciare a caricare i vostri progetti.&lt;/p&gt;</description></item><item><title>Il problema dei metronomi de-sincronizzati</title><link>https://nicolo.dev/blog/metronomi-sincronizzazione/</link><pubDate>Sat, 15 Jan 2022 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/metronomi-sincronizzazione/</guid><description>&lt;p&gt;Durante lo studio di sistemi operativi, ho trovato un&amp;rsquo;importante risorsa chiamata &lt;em&gt;&lt;a href="https://greenteapress.com/wp/semaphores/"&gt;The Little Book of Semaphores&lt;/a&gt;&lt;/em&gt; che illustra svariati esempi di esercizi della programmazione concorrente, in particolare sui semafori.&lt;/p&gt;
&lt;p&gt;Per chi è un po&amp;rsquo; a digiuno o non ha mai visto nella sua carriera la programmazione concorrente, facciamo un passo indietro. Ogni processo che noi eseguiamo e che viene eseguito per il sistema operativo concorre con tutti gli altri processi in esecuzione per prendere il controllo della risorsa più preziosa: la CPU. L&amp;rsquo;algoritmo di scheduling decide per quanto tempo il processo può occupare la CPU e in caso di cambio di processi, scegliere il prossimo che avrà diritto alla CPU.&lt;/p&gt;</description></item><item><title>Scrivere un Makefile</title><link>https://nicolo.dev/blog/guida-makefile/</link><pubDate>Sun, 12 Dec 2021 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/guida-makefile/</guid><description>&lt;p&gt;Make è uno strumento Unix progettato per avviare l&amp;rsquo;esecuzione di un makefile, facilitandoti il processo di compilazione. Supponiamo per esempio di avere più file sorgenti su cui dover eseguire alcuni comandi di compilazione in un determinato ordine. Eseguire tutti i comandi di compilazione ogni volta si vuole aggiornare il binario richiede molta fatica, con il rischio di trovarsi dei file oggetto obsoleto.&lt;/p&gt;
&lt;p&gt;La soluzione è adottare lo strumento &lt;code&gt;make&lt;/code&gt; che cercherà di eseguire passo passo un preciso schema di compilazione, basandosi su makefile, file speciali che contengono regole per la compilazione. Mentre sei nella directory contenente questo makefile, digiterai &lt;code&gt;make&lt;/code&gt; e i comandi nel makefile verranno eseguiti. Se crei più di un makefile, assicurati di essere nella directory corretta prima di digitare make.&lt;/p&gt;</description></item><item><title>Compilare MentOS: Mentoring Operating System</title><link>https://nicolo.dev/blog/compilare-mentos/</link><pubDate>Sun, 05 Dec 2021 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/compilare-mentos/</guid><description>&lt;p&gt;Per il laboratorio di Sistemi Operativi, è stato richiesto di incominciare a vedere in modo autonomo &lt;a href="https://github.com/mentos-team/MentOS"&gt;MentOS&lt;/a&gt;&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;, Mentoring Operating System, un sistema operativo &amp;ldquo;hobbystico&amp;rdquo; sviluppato da &lt;a href="https://mentos-team.github.io/"&gt;alcuni studenti&lt;/a&gt; dell&amp;rsquo;Università di Verona. A differenza di molti altri sistemi operativi utilizzati in altri corsi, MentOS è tra i pochi a seguire in modo dogmatico le linee guida messe a disposizione da Linux, implementando le stesse strutture dati e algoritmi.&lt;/p&gt;
&lt;p&gt;Questo articolo vuole essere una sorta di guida passo passo per la compilazione di MentOS. Le sezioni a seguire dipendono tutte dal sistema operativo &lt;strong&gt;host&lt;/strong&gt; in cui andate a compilare &lt;a href="https://github.com/mentos-team/MentOS"&gt;MentOS&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Come usare Git – Parte I</title><link>https://nicolo.dev/blog/come-usare-git/</link><pubDate>Tue, 30 Nov 2021 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/come-usare-git/</guid><description>&lt;p&gt;Non hai la più pallida idea di cosa sia Git? Pensi che sia il nome della nuova macchina di Elon Musk? Ne hai bisogno per SO? Non c&amp;rsquo;è nulla di cui preoccuparsi: basta seguire questa guida introduttiva passo passo e presto prenderai dimestichezza con Git, tanto da vantarti con amici e parente di essere sviluppatore™.&lt;/p&gt;
&lt;p&gt;Prima di approfondire, chiariamo un malinteso comune: Git non è la stessa cosa di GitHub. Git è un sistema di controllo della versione (cioè un pezzo di software) che ti aiuta a tenere traccia dei programmi e dei file del tuo computer e delle modifiche che vengono apportate ad essi nel tempo. Ti consente anche di collaborare con i tuoi colleghi su un programma, codice o file. &lt;a href="https://github.com"&gt;GitHub&lt;/a&gt; e servizi simili (inclusi &lt;a href="https://gitlab.com"&gt;GitLab&lt;/a&gt; e &lt;a href="https://bitbucket.com"&gt;BitBucket&lt;/a&gt;) sono siti Web che ospitano un programma server Git per contenere il tuo codice.&lt;/p&gt;</description></item><item><title>L'illusione del parallelismo</title><link>https://nicolo.dev/blog/illusione-parallelismo/</link><pubDate>Wed, 20 Oct 2021 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/illusione-parallelismo/</guid><description>&lt;p&gt;Tra i tanti concetti (e pre-concetti) dell&amp;rsquo;informatica, mi ha sempre affascinato un paradigma in particolare: l&amp;rsquo;illusione. In informatica, a differenza di molte altre scienze, sei libero di barare, nascondere e utilizzare tutti i trucchetti che vuoi per far credere all&amp;rsquo;utente qualsiasi cosa. Alcuni pattern su interfaccie grafiche e relative ad esperienze utente sono così subdoli da essere stati fortemente criticati da molte persone&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Uno dei &amp;ldquo;trucchi di magia&amp;rdquo; che ancora mi rende affascinato consiste nel &amp;ldquo;finto parallelismo&amp;rdquo;. Immaginiamo di avere un dispositivo ad una CPU con un solo core e di voler ascoltare la musica in background mentre scriviamo il nuovo articolo da pubblicare su un blog. Dalla teoria di base dell&amp;rsquo;informatica sappiamo che un solo core può eseguire al massimo una operazione alla volta e, salvo casi particolari, non è possibile avere un parallelismo tra istruzioni.&lt;/p&gt;</description></item><item><title>Ciao mondo!</title><link>https://nicolo.dev/blog/ciao-mondo/</link><pubDate>Tue, 19 Oct 2021 00:00:00 +0000</pubDate><guid>https://nicolo.dev/blog/ciao-mondo/</guid><description>&lt;p&gt;Ciao mondo. Ogni blog che si rispetti deve iniziare con la frase tipica del programma che di solito propongono durante la prima lezione di qualsiasi corso di programmazione. Chi avrà sicuramente tentato lo sviluppo di programmi, si sarà imbattuto sicuramente in Hello world. Seppur non rappresenti alcuna caratteristica interessante all&amp;rsquo;interno di un programma, mostrare un semplice messaggio a video è già un progresso: significa avere capito come compilare/eseguire il programma! (o, in alternativa, aver capito quali tutorial seguire e quali no)&lt;/p&gt;</description></item></channel></rss>