<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Marcello Barnaba</title>
    <link>https://sindro.me/it/posts/</link>
    <description>Recent content in Posts on Marcello Barnaba</description>
    <generator>Hugo</generator>
    <language>it</language>
    <lastBuildDate>Sat, 04 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://sindro.me/it/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Come ho rimpiazzato l&#39;app Verisure con Home Assistant</title>
      <link>https://sindro.me/it/posts/2026-04-04-verisure-italy-home-assistant/</link>
      <pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2026-04-04-verisure-italy-home-assistant/</guid>
      <description>&lt;p&gt;L&amp;rsquo;app Verisure fa schifo. Lì, l&amp;rsquo;ho detto.&lt;/p&gt;&#xA;&lt;p&gt;Non che l&amp;rsquo;allarme funzioni male — il pannello SDVECU è solido, i sensori&#xA;sono affidabili, l&amp;rsquo;installazione è professionale. Ma l&amp;rsquo;app. Dio santo,&#xA;l&amp;rsquo;app.&lt;/p&gt;&#xA;&lt;h2 id=&#34;il-problema&#34;&gt;Il problema&lt;/h2&gt;&#xA;&lt;p&gt;Apri l&amp;rsquo;app per controllare lo stato dell&amp;rsquo;allarme e ti accoglie una &lt;strong&gt;pubblicità&#xA;di Verisure stessa&lt;/strong&gt;. Io pago fior di quattrini per il servizio e loro mi&#xA;piazzano le ads &lt;em&gt;dentro&lt;/em&gt; l&amp;rsquo;app. È il 2026 e un&amp;rsquo;azienda di sicurezza mi fa&#xA;vedere banner pubblicitari quando provo a verificare se casa mia è protetta.&lt;/p&gt;&#xA;&lt;p&gt;Ma le ads sono il meno. I veri problemi sono:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Routine cieche.&lt;/strong&gt; Sì, l&amp;rsquo;app ha le &amp;ldquo;routine&amp;rdquo; — attiva a&#xA;mezzanotte, disattiva alle 7. Ma non sanno dove sei. Mezzanotte&#xA;e sei ancora in giardino? L&amp;rsquo;allarme si attiva e i sensori scattano.&#xA;Finestra aperta? Il pannello annuncia che non riesce ad attivare,&#xA;ma se non lo senti l&amp;rsquo;allarme resta spento. Vai in vacanza e&#xA;dimentichi di disabilitare la routine di disattivazione mattutina?&#xA;Allarme spento con la casa vuota. E le modifiche alle routine&#xA;impiegano &lt;em&gt;20 minuti a propagarsi&lt;/em&gt; — &amp;ldquo;o il giorno dopo&amp;rdquo;. Nel 2026.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Zero presenza.&lt;/strong&gt; L&amp;rsquo;app non sa dove sei. Non sa chi è in casa.&#xA;Non sa se la donna delle pulizie è andata via. Nessuna automazione&#xA;basata sulla posizione.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Una telecamera alla volta.&lt;/strong&gt; Vuoi vedere tutte le camere? Tocca,&#xA;aspetta, torna indietro, tocca la prossima, aspetta. Nessuna vista&#xA;d&amp;rsquo;insieme. Nessun &amp;ldquo;cattura tutto&amp;rdquo;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Lentezza biblica.&lt;/strong&gt; Richiedi un&amp;rsquo;immagine, aspetti, aspetti, forse&#xA;arriva. A volte ricarichi l&amp;rsquo;app e riprovi. Nel 2026.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Nessuno storage permanente.&lt;/strong&gt; Le immagini catturate spariscono. Non&#xA;c&amp;rsquo;è uno storico consultabile.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Nessun timestamp sulle immagini.&lt;/strong&gt; Catturi una foto e non sai&#xA;&lt;em&gt;quando&lt;/em&gt; è stata scattata né &lt;em&gt;da quale camera&lt;/em&gt;. Devi ricordartelo tu.&#xA;Per un sistema di sicurezza è imbarazzante.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Notifiche generiche.&lt;/strong&gt; Una notifica uguale per tutti. Niente&#xA;notifiche actionable, niente notifiche critiche che bypassano il&#xA;&amp;ldquo;Non Disturbare&amp;rdquo;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Quello che volevo: il mio allarme, integrato nella mia domotica, con&#xA;automazioni intelligenti, notifiche per tutti i residenti, e una&#xA;dashboard che mostra &lt;em&gt;tutto&lt;/em&gt; in un colpo d&amp;rsquo;occhio. Senza pubblicità.&lt;/p&gt;</description>
    </item>
    <item>
      <title>wifi-dethrash: trovare e risolvere il thrashing WiFi mesh su OpenWrt</title>
      <link>https://sindro.me/it/posts/2026-04-03-wifi-dethrash-openwrt-mesh-analyzer/</link>
      <pubDate>Fri, 03 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2026-04-03-wifi-dethrash-openwrt-mesh-analyzer/</guid>
      <description>&lt;p&gt;Tutto è cominciato con il &lt;a href=&#34;https://sindro.me/posts/2026-02-15-wifi-presence-detection-home-assistant/&#34;&gt;rilevamento presenza WiFi&lt;/a&gt;. Avevo costruito un sistema che traccia in quale stanza si trova ognuno scrapando l&amp;rsquo;RSSI dai miei AP OpenWrt. Funzionava &amp;ndash; ma le assegnazioni delle stanze continuavano a sfarfallare. Cucina. Ufficio. Cucina. Ufficio. Tre volte in dieci secondi. La macchina a stati era a posto. Il WiFi no.&lt;/p&gt;&#xA;&lt;p&gt;La mia rete domestica ha sei AP OpenWrt su tre piani, due SSID &amp;ndash; Mercury su 5 GHz, Saturn su 2,4 GHz &amp;ndash; tutti con 802.11r per il roaming veloce. Vista da fuori, sembra una mesh fatta bene. Vista da dentro, un telefono rimbalzava tra access point &lt;strong&gt;129 volte in 24 ore&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Non lo sapevo finché non ho costruito lo strumento per vederlo.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2026-04-03-wifi-dethrash-openwrt-mesh-analyzer/roaming-timeline-24h.png&#34; alt=&#34;Timeline di roaming — 24 ore&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ogni riga è un client WiFi, il colore mostra a quale AP è connesso. I client sani mostrano barre lunghe e piene. Quelli malati sembrano pali da barbiere. Vedi &lt;code&gt;sara-iphone&lt;/code&gt;? Quella striscia arcobaleno sono 129 connessioni in 24 ore &amp;ndash; il telefono cammina in una zona di overlap tra due AP dove entrambi hanno un segnale circa uguale (e orrendo).&lt;/p&gt;&#xA;&lt;h2 id=&#34;il-problema-che-non-puoi-vedere&#34;&gt;Il problema che non puoi vedere&lt;/h2&gt;&#xA;&lt;p&gt;Il roaming WiFi è invisibile. Il tuo telefono mostra tutte le tacche, Netflix bufferizza un attimo, e tu dai la colpa alla connessione internet. Ma quello che è successo davvero è che il tuo telefono si è disconnesso da un AP, ha scansionato le alternative, ne ha scelto un altro con un segnale marginalmente diverso, si è associato, autenticato, e ha ricominciato lo streaming &amp;ndash; tutto in meno di un secondo se 802.11r funziona, diversi secondi se non funziona.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rilevamento presenza WiFi per Home Assistant con OpenWrt</title>
      <link>https://sindro.me/it/posts/2026-02-15-wifi-presence-detection-home-assistant/</link>
      <pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2026-02-15-wifi-presence-detection-home-assistant/</guid>
      <description>&lt;p&gt;Avevo due problemi con il rilevamento presenza di Home Assistant.&lt;/p&gt;&#xA;&lt;p&gt;Il primo: il GPS ti dice &lt;em&gt;se&lt;/em&gt; qualcuno è a casa, ma non &lt;em&gt;dove&lt;/em&gt; in casa si trova. La mia casa ha sei access point OpenWrt distribuiti su tre piani. Sanno già esattamente quale telefono è connesso a quale AP in ogni momento &amp;ndash; sono dati di presenza a livello di stanza, lì nello stack WiFi, che urlano per essere usati. Sapere chi è in quale stanza apre un&amp;rsquo;intera classe di automazioni che il GPS non può toccare: luci che ti seguono, climatizzazione per stanza occupata, una dashboard che mostra la situazione della casa a colpo d&amp;rsquo;occhio.&lt;/p&gt;&#xA;&lt;p&gt;Il secondo: la nostra donna delle pulizie sta a casa nostra un paio di giorni a settimana. Non voglio configurarle un account HA completo, installarle l&amp;rsquo;app companion sul telefono, o avere a che fare con i permessi GPS. Ma &lt;em&gt;devo&lt;/em&gt; sapere se è a casa &amp;ndash; perché la mia automazione dell&amp;rsquo;allarme ha bisogno di sapere se la casa è davvero vuota prima di attivarsi. Il suo telefono si connette al WiFi. Mi basta questo.&lt;/p&gt;&#xA;&lt;p&gt;Così ho scritto &lt;a href=&#34;https://github.com/vjt/openwrt-ha-presence&#34; target=&#34;_blank&#34;&gt;openwrt-ha-presence&lt;/a&gt;: una macchina a stati che scrapa le metriche RSSI direttamente dai tuoi AP OpenWrt, capisce in quale stanza si trova ogni persona in base alla potenza del segnale, e pubblica lo stato casa/fuori per ogni persona su Home Assistant via MQTT Discovery. Niente cloud, niente beacon, niente parsing di log, niente database time-series. Python, async, ~600 righe di logica effettiva.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2026-02-15-wifi-presence-detection-home-assistant/home-assistant.png&#34; alt=&#34;Storico tracking stanze di Home Assistant&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>5G come backup della fibra: non perdere mai più una riunione</title>
      <link>https://sindro.me/it/posts/2026-01-31-quectel-5g-modem-tools-for-openwrt/</link>
      <pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2026-01-31-quectel-5g-modem-tools-for-openwrt/</guid>
      <description>&lt;p&gt;Un paio di mesi fa, la fibra è andata giù. Come da primo corollario di Murphy, è successo nel momento peggiore in assoluto: subito prima di una riunione cruciale con un&amp;rsquo;azienda partner. Mi sono ritrovato a saltare freneticamente tra l&amp;rsquo;AP di un vicino lontano e l&amp;rsquo;hotspot del telefono, ma entrambi facevano schifo. Parliamo di 200ms di RTT e 15% di packet loss. Mi stavo scusando a profusione mentre il mio feed video si trasformava in uno slideshow del 1998; nessuno capiva una parola di quello che dicevo. Ho finito per spegnere il video e stare zitto. Opportunità persa. &lt;strong&gt;Mai. Più.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Così sono andato in modalità paranoica totale e ho costruito un setup di backup 5G serio.&lt;/p&gt;&#xA;&lt;h2 id=&#34;lhardware&#34;&gt;L&amp;rsquo;hardware&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.gl-inet.com/products/gl-x3000/&#34; target=&#34;_blank&#34;&gt;GL.iNet X-3000&lt;/a&gt; con modem Quectel RM520N-GL&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://poynting.tech/antennas/xpol-24/&#34; target=&#34;_blank&#34;&gt;Poynting XPOL-24&lt;/a&gt; antenna direzionale montata sul muro fuori dal mio ufficio&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Il segnale 5G qui è inesistente, quindi ho dovuto usare l&amp;rsquo;artiglieria pesante. La Poynting è una bestia. 11 dBi di guadagno, vero MIMO 4x4, cross-polarizzata, stagna. Puntala verso la torre più vicina e all&amp;rsquo;improvviso il SINR salta da &amp;ldquo;meh&amp;rdquo; a &amp;ldquo;porco dio!&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Ma puntare un&amp;rsquo;antenna direzionale senza feedback visivo è doloroso. In pratica giri in tondo, aggiorni una web UI, bestemmi guardando il cielo.&lt;/p&gt;&#xA;&lt;h2 id=&#34;il-software&#34;&gt;Il software&lt;/h2&gt;&#xA;&lt;p&gt;Ho scritto un set di strumenti per risolvere il problema: &lt;a href=&#34;https://github.com/vjt/quectel-5g-tools&#34; target=&#34;_blank&#34;&gt;quectel-5g-tools&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;5g-info&lt;/code&gt; scarica tutto quello che il tuo modem sa in un formato leggibile:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2026-01-31-quectel-5g-modem-tools-for-openwrt/5g-info.png&#34; alt=&#34;output di 5g-info&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;5g-monitor&lt;/code&gt; è una TUI ncurses che si aggiorna in tempo reale e &amp;ndash; qui viene il bello &amp;ndash; &lt;strong&gt;emette beep in base al SINR&lt;/strong&gt;. Qualità del segnale più alta = più beep. Punta l&amp;rsquo;antenna, ascolta i beep, stringi i bulloni. Fatto.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker vs. iptables: una storia di rabbia e la chain DOCKER-USER</title>
      <link>https://sindro.me/it/posts/2026-01-30-docker-vs-iptables-rage-and-docker-user-chain/</link>
      <pubDate>Fri, 30 Jan 2026 00:00:00 +0100</pubDate>
      <guid>https://sindro.me/it/posts/2026-01-30-docker-vs-iptables-rage-and-docker-user-chain/</guid>
      <description>&lt;p&gt;Siamo nel 2026, e stiamo ancora lottando con l&amp;rsquo;arroganza assoluta di Docker riguardo al networking Linux.&lt;/p&gt;&#xA;&lt;p&gt;Ecco lo scenario: faccio girare un host ibrido. Da un lato, ho una macchina virtuale KVM che fa girare &lt;strong&gt;Home Assistant&lt;/strong&gt; (perché ho bisogno del controllo completo del SO e della &lt;a href=&#34;https://sindro.me/posts/2026-01-20-raspberry-pi-luks-encrypted-root/&#34; target=&#34;_blank&#34;&gt;cifratura del disco&lt;/a&gt;).&#xA;Dall&amp;rsquo;altro, ho la solita lista di container Docker &amp;ndash; &lt;strong&gt;NUT&lt;/strong&gt; per monitorare il mio UPS Lakeview (Vultech) di merda e &lt;strong&gt;Technitium&lt;/strong&gt; per DNS e DHCP &amp;ndash; in esecuzione direttamente sull&amp;rsquo;host.&lt;/p&gt;&#xA;&lt;p&gt;Sembra semplice. Dovrebbe essere semplice.&lt;/p&gt;&#xA;&lt;p&gt;Ma nel momento in cui ho installato Docker, la comunicazione con la mia VM Home Assistant è morta. Semplicemente cessata di esistere.&lt;/p&gt;&#xA;&lt;h2 id=&#34;il-problema-docker-è-un-dittatore&#34;&gt;Il problema: Docker è un dittatore&lt;/h2&gt;&#xA;&lt;p&gt;Docker, per default, tratta le tue regole &lt;code&gt;iptables&lt;/code&gt; come se fossero semplici suggerimenti. Quando il demone si avvia, sostanzialmente sovrascrive la chain &lt;code&gt;FORWARD&lt;/code&gt;, inserisce la sua logica, e imposta policy che isolano efficacemente qualsiasi cosa non sia un container gestito da Docker stesso.&lt;/p&gt;&#xA;&lt;p&gt;Se hai un&amp;rsquo;interfaccia bridge per una VM (come &lt;code&gt;br0&lt;/code&gt; o &lt;code&gt;virbr0&lt;/code&gt;), le regole di Docker spesso finiscono per droppare i pacchetti destinati a quella VM perché non corrispondono alla sua logica interna per il traffico dei container.&lt;/p&gt;&#xA;&lt;h3 id=&#34;la-soluzione-ingenua-e-perché-fallisce&#34;&gt;La soluzione ingenua (e perché fallisce)&lt;/h3&gt;&#xA;&lt;p&gt;La mia prima reazione &amp;ndash; come qualsiasi sysadmin che fa questo lavoro dai primi anni 2000 &amp;ndash; è stata sistemare le regole a mano e poi eseguire:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iptables-save &amp;gt; /etc/iptables/rules.v4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Questa è una trappola!&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://media1.giphy.com/media/v1.Y2lkPTc5MGI3NjExOHI5MzZoYzVwdGluYmNnMXBpYmJ2M2Y4cHB1OGVhaGlxdXRpZHpqOCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3ornka9rAaKRA2Rkac/giphy.gif&#34; alt=&#34;Trap GIF&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Se usi &lt;code&gt;iptables-persistent&lt;/code&gt; (o &lt;code&gt;netfilter-persistent&lt;/code&gt;) con Docker, stai entrando in un mondo di dolore per due motivi:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sblocco remoto via SSH di ZFS cifrato su FreeBSD</title>
      <link>https://sindro.me/it/posts/2026-01-28-freebsd-encrypted-zfs-remote-unlock/</link>
      <pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2026-01-28-freebsd-encrypted-zfs-remote-unlock/</guid>
      <description>&lt;h2 id=&#34;luks-remoto-pfft-ecco-come-sbloccare-via-ssh-una-root-zfs-cifrata-su-freebsd-nel-modo-difficile&#34;&gt;LUKS remoto? Pfft. Ecco come sbloccare via SSH una root ZFS cifrata su FreeBSD (nel modo difficile)&lt;/h2&gt;&#xA;&lt;p&gt;Se usi FreeBSD &lt;a href=&#34;https://sindro.me/posts/2023-08-13-freebsd-encrypted-root-on-zfs/&#34; target=&#34;_blank&#34;&gt;come me&lt;/a&gt;, su un server remoto con cifratura completa del disco (ZFS su GELI), conosci il panico del riavvio. Sei sempre alla mercé di un KVM-over-IP o di una connessione VNC dal browser, per inserire la password del filesystem root al prompt del kernel.&lt;/p&gt;&#xA;&lt;p&gt;Inoltre, se (come me) fai girare un sistema con &lt;code&gt;kern.securelevel&lt;/code&gt; &amp;gt; 0, allora installare una nuova libc significa riavviare in single user e installare gli aggiornamenti tramite la suddetta connessione KVM o VNC, che &lt;em&gt;non è ergonomica&lt;/em&gt; per usare un eufemismo.&lt;/p&gt;&#xA;&lt;p&gt;La soluzione standard è di solito un ambiente SSH pre-boot. Su Linux, dropbear-initramfs rende la cosa banale. Su FreeBSD? Devi costruirti un mfsroot (memory file system) custom da zero.&lt;/p&gt;&#xA;&lt;p&gt;La maggior parte delle guide suggerisce di usare un semplice shell script come init. Funziona, ma è misero. Perdi il job control (niente Ctrl+C), non hai un TTY decente, e in bocca al lupo se devi fare debug dei problemi di rete in modo interattivo.&lt;/p&gt;&#xA;&lt;p&gt;Non volevo un hack raffazzonato. Volevo un ambiente vero. Volevo &lt;code&gt;init&lt;/code&gt;, &lt;code&gt;getty&lt;/code&gt;, &lt;code&gt;login&lt;/code&gt;, autenticazione PAM, e un chroot ZFS per la manutenzione &amp;ndash; per installare aggiornamenti.&lt;/p&gt;&#xA;&lt;p&gt;Ecco come ho costruito un unlocker remoto robusto per FreeBSD.&lt;/p&gt;&#xA;&lt;h2 id=&#34;il-problema-con-binsh-come-init&#34;&gt;Il problema con /bin/sh come Init&lt;/h2&gt;&#xA;&lt;p&gt;L&amp;rsquo;approccio ingenuo è compilare un ramdisk minuscolo, ficcarci dentro un binario sh statico, e dire al loader di eseguirlo come PID 1.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Questo crea incubi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat &amp;gt; /sbin/init &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;&amp;lt;EOF&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;#!/bin/sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;/sbin/dropbear&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;exec /bin/sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;EOF&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Perché fallisce?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Root cifrata con LUKS su Raspberry PI 5</title>
      <link>https://sindro.me/it/posts/2026-01-20-raspberry-pi-luks-encrypted-root/</link>
      <pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2026-01-20-raspberry-pi-luks-encrypted-root/</guid>
      <description>&lt;h2 id=&#34;premessa&#34;&gt;Premessa&lt;/h2&gt;&#xA;&lt;p&gt;Quindi ho cominciato a far girare &lt;a href=&#34;https://www.home-assistant.io/&#34; target=&#34;_blank&#34;&gt;Home Assistant&lt;/a&gt;&#xA;a casa su un Raspberry PI 5 e ho semplicemente installato HAOS su una SD. Poi ho&#xA;iniziato a sentirmi sempre più a disagio nel salvare credenziali nel filesystem&#xA;di HA in chiaro (qualsiasi offuscamento non è sufficiente).&lt;/p&gt;&#xA;&lt;p&gt;Considerando che configurare una root cifrata con HAOS è semplicemente&#xA;impossibile senza forkarlo, e considerando anche che dedicare un intero RPI5&#xA;a HAOS è uno spreco di risorse, ho deciso di aggiungere un SSD al Pi, avviarlo&#xA;con Raspbian e poi far girare HAOS dentro una VM.&lt;/p&gt;&#xA;&lt;p&gt;In questo modo, posso avere una root cifrata sull&amp;rsquo;host principale, cifrando&#xA;così l&amp;rsquo;intera VM HAOS.&lt;/p&gt;&#xA;&lt;p&gt;Inoltre posso ora fare snapshot dell&amp;rsquo;intera VM HAOS e ho molta più&#xA;flessibilità nella gestione. Ultimo ma non meno importante, posso anche usare&#xA;la CPU e la RAM rimanenti del RPI per qualcos&amp;rsquo;altro.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ringraziamenti&#34;&gt;Ringraziamenti&lt;/h2&gt;&#xA;&lt;p&gt;Prima di tutto, un grande grazie a &lt;a href=&#34;https://rr-developer.github.io/LUKS-on-Raspberry-Pi/&#34; target=&#34;_blank&#34;&gt;questo&#xA;post&lt;/a&gt; che mi ha dato&#xA;le indicazioni iniziali su come fare il setup. Ma quel post del 2021 è ora&#xA;leggermente datato, e molti passaggi non sono più necessari.&lt;/p&gt;&#xA;&lt;p&gt;Secondo, un grande grazie a &lt;a href=&#34;https://github.com/ericfjosne&#34; target=&#34;_blank&#34;&gt;Eric Fjøsne&lt;/a&gt; per&#xA;&lt;a href=&#34;https://github.com/vjt/sindro.me/pull/1&#34; target=&#34;_blank&#34;&gt;aver usato questa guida e averla corretta&lt;/a&gt;&#xA;dato che l&amp;rsquo;avevo scritta perlopiù a posteriori :-).&lt;/p&gt;&#xA;&lt;h2 id=&#34;requisiti&#34;&gt;Requisiti&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Un RPI5 con Debian 13 (trixie) o successivo&lt;/li&gt;&#xA;&lt;li&gt;Una chiavetta USB decente e affidabile che può essere completamente cancellata&lt;/li&gt;&#xA;&lt;li&gt;Una tastiera e un monitor collegati direttamente al RPI&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;panoramica&#34;&gt;Panoramica&lt;/h2&gt;&#xA;&lt;p&gt;L&amp;rsquo;idea di fondo è:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Prepariamo un initrd che contiene i seguenti strumenti:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;resize2fs&lt;/code&gt; per ridurre e ingrandire filesystem &lt;code&gt;ext4&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;cryptsetup&lt;/code&gt; per gestire la cifratura delle partizioni&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Configuriamo il sistema per avviarsi da una root cifrata che non esiste ancora,&#xA;forzando così il sistema a cadere nell&amp;rsquo;initrd.&lt;/li&gt;&#xA;&lt;li&gt;Nell&amp;rsquo;initrd, riduciamo il filesystem root alla dimensione minima possibile&lt;/li&gt;&#xA;&lt;li&gt;Copiamo il filesystem root dalla partizione in chiaro sulla chiavetta USB&lt;/li&gt;&#xA;&lt;li&gt;Creiamo la partizione cifrata usando LUKS&lt;/li&gt;&#xA;&lt;li&gt;Copiamo il filesystem root dalla chiavetta USB sulla partizione cifrata&lt;/li&gt;&#xA;&lt;li&gt;Estendiamo il filesystem root alla dimensione massima&lt;/li&gt;&#xA;&lt;li&gt;Configuriamo SSH nell&amp;rsquo;initrd così da poterlo sbloccare anche dopo aver&#xA;piazzato il Raspberry Pi in un posto senza tastiera o schermo.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Pronti? Via!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Talk su MetalOS ad All Systems Go! 2025</title>
      <link>https://sindro.me/it/posts/2025-10-09-all-systems-go/</link>
      <pubDate>Thu, 09 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2025-10-09-all-systems-go/</guid>
      <description>&lt;p&gt;Ho presentato un talk ad &lt;a href=&#34;https://all-systems-go.io/&#34; target=&#34;_blank&#34;&gt;All Systems Go 2025&lt;/a&gt;, la conferenza fondamentale sullo userspace Linux. La conferenza è organizzata principalmente dal team di systemd, ed è un punto d&amp;rsquo;incontro annuale per tutti quelli che lavorano su software di sistema Linux.&lt;/p&gt;&#xA;&lt;p&gt;Il tema di quest&amp;rsquo;anno è stato prevalentemente &amp;ldquo;container, container, container&amp;rdquo;, con molte nuove funzionalità in systemd per supportare la containerizzazione e anche esperienze pratiche da persone che lavorano sul campo su come usano systemd e software collaterali per costruire infrastrutture a container.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2025-10-09-all-systems-go/vjt-dubros-on-stage.jpg&#34; alt=&#34;Io e Serge sul palco&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ho presentato insieme al mio collega &lt;a href=&#34;https://www.linkedin.com/in/serge-dubrouski-2902638/&#34; target=&#34;_blank&#34;&gt;Serge Dubrouski&lt;/a&gt; il nostro lavoro nella costruzione di un sistema operativo alla scala di Meta. Gestiamo un sistema operativo basato su immagini, ma l&amp;rsquo;azienda viene da due decenni di aggiornamenti del SO online, quindi abbiamo dovuto progettare una strategia di migrazione adeguata e gettare le fondamenta per il futuro.&lt;/p&gt;&#xA;&lt;p&gt;Descriviamo come prepariamo le release CentOS dall&amp;rsquo;upstream, gli &lt;a href=&#34;https://github.com/facebookincubator/antlir&#34; target=&#34;_blank&#34;&gt;strumenti OSS&lt;/a&gt; che abbiamo costruito per creare le immagini del SO, e la tecnologia interna (MetalOS) che abbiamo ideato per costruire un SO che gira su milioni di server Linux.&lt;/p&gt;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/PpDDdLMiPCs?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;p&gt;Puoi anche &lt;a href=&#34;https://sindro.me/posts/2025-10-09-all-systems-go/asg2025-332-eng-OS_as_a_Service_at_Meta_Platforms_hd.mp4&#34;&gt;scaricare il video per la visione offline&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Domande? Commenti? Sfogate qui sotto! 🤣&lt;/p&gt;</description>
    </item>
    <item>
      <title>pfasciilogd: collegare pf e fail2ban</title>
      <link>https://sindro.me/it/posts/2023-08-17-pfasciilogd-link-pf-and-fail2ban/</link>
      <pubDate>Thu, 17 Aug 2023 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2023-08-17-pfasciilogd-link-pf-and-fail2ban/</guid>
      <description>&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;&#xA;&lt;p&gt;FreeBSD: come bloccare i port scanner dall&amp;rsquo;enumerare le porte aperte sul&#xA;tuo server, usando fail2ban e una rappresentazione ASCII dei log di &lt;code&gt;pf&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;premessa&#34;&gt;Premessa&lt;/h2&gt;&#xA;&lt;p&gt;Uso &lt;a href=&#34;https://fail2ban.org/&#34; target=&#34;_blank&#34;&gt;&lt;code&gt;fail2ban&lt;/code&gt;&lt;/a&gt; per tenere alla larga attaccanti e bot&#xA;che tentano di scansionare i miei siti web o di forzare le mie caselle di posta.&#xA;Fail2ban funziona scansionando i file di log alla ricerca di pattern specifici e&#xA;mantenendo un conteggio delle corrispondenze per IP, e permette&#xA;all&amp;rsquo;amministratore di sistema di definire cosa fare quando quel conteggio supera&#xA;una soglia definita.&lt;/p&gt;&#xA;&lt;p&gt;I pattern sono indicativi di attività malevola, come il tentativo di indovinare&#xA;la password di una casella di posta, o il tentativo di scansionare lo spazio di&#xA;un sito web alla ricerca di vulnerabilità.&lt;/p&gt;&#xA;&lt;p&gt;L&amp;rsquo;azione da eseguire nella maggior parte dei casi è bloccare l&amp;rsquo;indirizzo IP&#xA;incriminato tramite il firewall della macchina, ma fail2ban supporta qualsiasi&#xA;meccanismo che tu possa concepire, purché possa essere attuato da un comando&#xA;UNIX.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pf-e-i-suoi-log&#34;&gt;PF e i suoi log&lt;/h2&gt;&#xA;&lt;p&gt;Sul mio server FreeBSD uso l&amp;rsquo;eccellente &lt;a href=&#34;https://docs.freebsd.org/en/books/handbook/firewalls/#firewalls-pf&#34; target=&#34;_blank&#34;&gt;pf&lt;/a&gt;,&#xA;il packet filter, per gestire il traffico in entrata e per eseguire la&#xA;normalizzazione del traffico.&lt;/p&gt;&#xA;&lt;p&gt;Il meccanismo di logging di PF è molto UNIX-iano: fornisce un&amp;rsquo;interfaccia di&#xA;rete virtuale (&lt;code&gt;pflog0&lt;/code&gt;) sulla quale vengono inoltrati i primi byte dei&#xA;pacchetti bloccati da una regola con lo specificatore &lt;code&gt;log&lt;/code&gt;, così che i log&#xA;dei blocchi in tempo reale possano essere ispezionati con un semplice:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# tcpdump -eni pflog0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tcpdump: verbose output suppressed, use -v or -vv &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; full protocol decode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;listening on pflog0, link-type PFLOG &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;OpenBSD pflog file&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;, capture size &lt;span style=&#34;color:#ae81ff&#34;&gt;262144&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;01:48:13.748353 rule 1/0&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;match&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: block in on vtnet0: 121.224.77.46.41854 &amp;gt; 46.38.233.77.6379: Flags &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;S&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;, seq 1929621329, win 29200, options &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;mss 1460,sackOK,TS val &lt;span style=&#34;color:#ae81ff&#34;&gt;840989709&lt;/span&gt; ecr 0,nop,wscale 7&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;, length &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;01:48:15.726215 rule 1/0&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;match&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: block in on vtnet0: 192.241.235.20.37422 &amp;gt; 46.38.233.77.5632: UDP, length &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;01:48:17.993439 rule 1/0&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;match&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: block in on vtnet0: 145.239.244.34.54154 &amp;gt; 46.38.233.77.1024: Flags &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;S&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;, seq 3365362952, win 1024, length &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;^C&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; packets captured&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; packets received by filter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; packets dropped by kernel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Questi log possono essere salvati da &lt;code&gt;pflogd&lt;/code&gt; in un file formato &lt;code&gt;pcap&lt;/code&gt; in&#xA;&lt;code&gt;/var/log/pflog&lt;/code&gt;, che può essere usato per troubleshooting e ispezione&#xA;asincrona, sempre con &lt;code&gt;tcpdump&lt;/code&gt; o qualsiasi cosa che sappia leggere file&#xA;&lt;code&gt;pcap&lt;/code&gt; (come Wireshark).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Root cifrata su ZFS con FreeBSD</title>
      <link>https://sindro.me/it/posts/2023-08-13-freebsd-encrypted-root-on-zfs/</link>
      <pubDate>Sun, 13 Aug 2023 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2023-08-13-freebsd-encrypted-root-on-zfs/</guid>
      <description>&lt;h2 id=&#34;premessa&#34;&gt;Premessa&lt;/h2&gt;&#xA;&lt;p&gt;Nel 2023, gestisco ancora il mio mailserver. Sì, perché mi piace avere il&#xA;controllo (almeno in parte) della mia vita digitale, e mi piace avere&#xA;diversi nomi di dominio su cui tenere le mie cose. Tuttavia, stavo pagando&#xA;30€/mese ad AWS per avere in cambio 2 core, 2GiB di RAM e 40G di disco,&#xA;appena sufficienti per far girare IMAP+SMTP+MySQL+Clamd, figurarsi qualsiasi&#xA;forma di protezione antispam o ricerca full-text nel corpo delle email.&lt;/p&gt;&#xA;&lt;p&gt;Insomma, stavo pagando un botto di soldi per far girare un servizio merdoso,&#xA;e avevo persino pensato di chiudere tutto e spostare la posta e i siti web&#xA;su qualche servizio completamente managed.&lt;/p&gt;&#xA;&lt;h2 id=&#34;però-voglio-ancora-farlo&#34;&gt;Però voglio ancora farlo&lt;/h2&gt;&#xA;&lt;p&gt;Beh, per ospitare quattro domini con solo qualche redirect email più i siti&#xA;web che gestisco, avrei speso di più di quanto stavo già pagando,&#xA;incatenandomi per di più a qualche fornitore di servizi e alle sue politiche.&lt;/p&gt;&#xA;&lt;p&gt;Quindi, volevo usare FreeBSD e ho cominciato a cercare nella &lt;a href=&#34;https://www.freebsd.org/commercial/isp/&#34; target=&#34;_blank&#34;&gt;pagina degli&#xA;ISP&lt;/a&gt; fino a decidere di valutare&#xA;&lt;a href=&#34;https://www.hetzner.com/cloud&#34; target=&#34;_blank&#34;&gt;Hetzner&lt;/a&gt; e&#xA;&lt;a href=&#34;https://www.netcup.eu/vserver/vps.php&#34; target=&#34;_blank&#34;&gt;netcup&lt;/a&gt;, che offrono entrambi&#xA;prezzi aggressivi e un buon vecchio VPS senza fronzoli.&lt;/p&gt;&#xA;&lt;h2 id=&#34;scelta-del-provider&#34;&gt;Scelta del provider&lt;/h2&gt;&#xA;&lt;p&gt;Alla fine, ho scelto un netcup VPS 1000 che mi dà, a 1/3 del prezzo&#xA;che pagavo ad AWS, 4 volte le risorse: 6 core, 8GiB di RAM, 160GiB di&#xA;SSD RAID10 e un&amp;rsquo;installazione FreeBSD completamente libera e senza&#xA;limitazioni.&lt;/p&gt;&#xA;&lt;p&gt;Tuttavia, l&amp;rsquo;immagine base fornita da Netcup ha alcune limitazioni:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Gira su UFS&lt;/li&gt;&#xA;&lt;li&gt;Non ha una partizione di swap&lt;/li&gt;&#xA;&lt;li&gt;Non ha cifratura&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;fare-un-piano&#34;&gt;Fare un piano&lt;/h2&gt;&#xA;&lt;p&gt;Dato che ero già in fase di configurazione e non volevo ricominciare da zero&#xA;(questo è un server vecchio stile, gestito a mano, zero automazione) ho&#xA;deciso di:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Il vero sistemista</title>
      <link>https://sindro.me/it/posts/2014-02-28-il-vero-sistemista/</link>
      <pubDate>Fri, 28 Feb 2014 04:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2014-02-28-il-vero-sistemista/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2014-02-28-il-vero-sistemista/car.repair.hands.jpg&#34; alt=&#34;Car repair&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Il vero sistemista e&amp;rsquo; un po&amp;rsquo; come il meccanico di una volta, quello che se gli&#xA;portavi la macchina per rifare la convergenza e quando arrivavi sentiva che il&#xA;minimo non andava bene, ti faceva la convergenza, e giustamente la pagavi, ma&#xA;poi ti sistemava anche il minimo e non ti chiedeva nulla, lo faceva perche&amp;rsquo; non&#xA;sopportava di sentire una macchina che non era a punto come si deve.&lt;/p&gt;&#xA;&lt;p&gt;Era quello che da ogni minimo e impercettibile rumore indovinava subito&#xA;qualsiasi problema, anche quello di cui il cliente non si era ancora accorto.&lt;/p&gt;&#xA;&lt;p&gt;Era quello che dopo cena a casa con la famiglia, tornava in officina, dove&#xA;potevi vedere le luci accese fino a notte tarda, perche&amp;rsquo; stava lavorando al&#xA;&amp;ldquo;suo&amp;rdquo; gioiello, una qualche macchina semi d&amp;rsquo;epoca recuperata chissa&amp;rsquo; dove che&#xA;con passione piano piano sistemava fino a farla tornare nuova.&lt;/p&gt;&#xA;&lt;p&gt;Ecco, il sistemista e&amp;rsquo; come quel meccanico, e le sue auto sono i server.&lt;/p&gt;&#xA;&lt;p&gt;Fonte: &lt;a href=&#34;https://www.facebook.com/groups/VeteranUnixAdmins/permalink/662178223838934/?comment_id=662349183821838&amp;amp;offset=100&amp;amp;total_comments=178&#34; target=&#34;_blank&#34;&gt;Veteran Unix&#xA;Admins&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>goto fail;</title>
      <link>https://sindro.me/it/posts/2014-02-28-goto-fail/</link>
      <pubDate>Fri, 28 Feb 2014 03:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2014-02-28-goto-fail/</guid>
      <description>&lt;h2 id=&#34;con-le-sue-stesse-parole&#34;&gt;Con le sue stesse parole:&lt;/h2&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://sindro.me/posts/2014-02-28-goto-fail/goto-fail.png&#34;&#xA;    alt=&#34;goto fail diff&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Sorgenti:&#xA;&lt;a href=&#34;http://opensource.apple.com/source/Security/Security-55179.13/libsecurity_ssl/lib/sslKeyExchange.c?txt&#34; target=&#34;_blank&#34;&gt;55179.13.c&lt;/a&gt;,&#xA;&lt;a href=&#34;http://opensource.apple.com/source/Security/Security-55471/libsecurity_ssl/lib/sslKeyExchange.c?txt&#34; target=&#34;_blank&#34;&gt;55471.c&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Differenze nel codice sorgente tra due versioni consecutive del&#xA;Security.framework, un componente MacOS/iOS. L&amp;rsquo;apparentemente innocuo goto&#xA;fail; in più è la causa di una &lt;a href=&#34;http://nakedsecurity.sophos.com/2014/02/24/anatomy-of-a-goto-fail-apples-ssl-bug-explained-plus-an-unofficial-patch/&#34; target=&#34;_blank&#34;&gt;grave falla di sicurezza nella maggior parte dei&#xA;prodotti Apple&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Questo weekend non ho scritto codice</title>
      <link>https://sindro.me/it/posts/2013-12-01-this-weekend-i-didn-t-code/</link>
      <pubDate>Sun, 01 Dec 2013 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2013-12-01-this-weekend-i-didn-t-code/</guid>
      <description>&lt;p&gt;Perché ero impegnato a fare questo:&lt;/p&gt;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/K48C-r6XMYE?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;</description>
    </item>
    <item>
      <title>Installare node.js via APT su Debian Squeeze</title>
      <link>https://sindro.me/it/posts/2011-09-12-install-node-js-via-apt-on-debian-squeeze/</link>
      <pubDate>Mon, 12 Sep 2011 12:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2011-09-12-install-node-js-via-apt-on-debian-squeeze/</guid>
      <description>&lt;p&gt;In breve: aggiungi la sorgente APT di &lt;a href=&#34;http://www.debian.org/releases/sid/&#34; target=&#34;_blank&#34;&gt;SID&lt;/a&gt;,&#xA;configura l&amp;rsquo;&lt;a href=&#34;http://wiki.debian.org/AptPreferences&#34; target=&#34;_blank&#34;&gt;APT Pinning&lt;/a&gt; per dare&#xA;priorità ai pacchetti di &lt;code&gt;squeeze&lt;/code&gt; rispetto a quelli di &lt;code&gt;SID&lt;/code&gt;, ricompila il&#xA;pacchetto &lt;code&gt;nodejs&lt;/code&gt; sotto &lt;code&gt;squeeze&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Aggiungi la &lt;strong&gt;sorgente APT di SID&lt;/strong&gt; creando &lt;code&gt;/etc/apt/sources.list.d/sid.list&lt;/code&gt;&#xA;(usa il tuo &lt;a href=&#34;http://www.debian.org/mirror/&#34; target=&#34;_blank&#34;&gt;mirror più vicino&lt;/a&gt;):&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-plaintext&#34; data-lang=&#34;plaintext&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;deb http://ftp.us.debian.org/debian/ sid main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;deb-src http://ftp.us.debian.org/debian/ sid main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;Configura il pinning APT creando /etc/apt/preferences.d/sid:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Package: *&#xA;Pin: release a=unstable&#xA;Pin-Priority: 50&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;Installa manualmente l&amp;rsquo;ultima versione di libv8, &lt;code&gt;libv8-3.8.9.20&lt;/code&gt; al momento di questo articolo:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apt-get install libv8-3.8.9.20&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;Scarica i sorgenti del pacchetto nodejs, le dipendenze e compilali:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cd&#xA;apt-get source nodejs&#xA;apt-get build-dep nodejs&#xA;cd nodejs-*&#xA;debuild -nc -uc&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Se incontri errori di dipendenze di build, dovresti provare prima ad abbassare&#xA;la dipendenza in debian/control, sia in Build-Depends che in Depends, e&#xA;rieseguire &lt;code&gt;debuild&lt;/code&gt;. Se la compilazione fallisce (ad es. con &lt;code&gt;undefined reference to &#39;ev_run&#39;&lt;/code&gt;)&#xA;la versione precedente non ha le funzioni richieste. Quindi, devi installare le&#xA;versioni aggiornate delle dipendenze necessarie (ad es. &lt;code&gt;libev4&lt;/code&gt;) da sid, usando&#xA;&lt;code&gt;apt-get install nome=versione&lt;/code&gt; ad es. &lt;code&gt;libev4=1:4.11-1&lt;/code&gt;. Lo suggerisco perché&#xA;dovrai aggiornare manualmente i pacchetti installati da sid, quindi meno sono,&#xA;meglio è.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Installa il pacchetto generato&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;dpkg -i nodejs_*.deb nodejs-dev*.deb&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;Profit :-)&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Fare il bind della porta 80/TCP come non-root sul server di sviluppo</title>
      <link>https://sindro.me/it/posts/2011-07-07-binding-port-80-for-your-development-application-server/</link>
      <pubDate>Thu, 07 Jul 2011 14:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2011-07-07-binding-port-80-for-your-development-application-server/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2011-07-07-binding-port-80-for-your-development-application-server/neo-tux.png&#34; alt=&#34;Neo Tux&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Quindi hai una VM Linux che usi per lo sviluppo, perché vuoi replicare&#xA;l&amp;rsquo;ambiente di produzione il più fedelmente possibile. Hai molte applicazioni da&#xA;gestire, devono girare tutte contemporaneamente perché sono dei bei web service&#xA;REST JSON.&lt;/p&gt;&#xA;&lt;p&gt;Sei stanchissimo di ricordarti quale hai messo sulla porta &lt;code&gt;8081&lt;/code&gt;, e i tuoi file&#xA;di configurazione stanno diventando un vero casino. Quindi configuri degli alias&#xA;per gli indirizzi IP sull&amp;rsquo;interfaccia di rete e decidi di assegnare persino dei&#xA;nomi host — &lt;code&gt;/etc/hosts&lt;/code&gt; va benissimo — per ogni applicazione.&lt;/p&gt;&#xA;&lt;p&gt;Poi, in una configurazione del genere, perché dovresti ancora farle girare su&#xA;porte superiori a &lt;code&gt;1024&lt;/code&gt;? Non sarebbe fantastico digitare il nome&#xA;dell&amp;rsquo;applicazione nella barra degli indirizzi del browser? Sì che lo sarebbe, ma&#xA;è meglio non farle girare come &lt;code&gt;root&lt;/code&gt;, comunque.&lt;/p&gt;&#xA;&lt;p&gt;La soluzione sono le &lt;a href=&#34;http://www.kernel.org/doc/man-pages/online/pages/man7/capabilities.7.html&#34; target=&#34;_blank&#34;&gt;Linux&#xA;capabilities&lt;/a&gt;&#xA;(vedi anche &lt;a href=&#34;http://www.friedhoff.org/posixfilecaps.html&#34; target=&#34;_blank&#34;&gt;qui&lt;/a&gt;). Quella che ci&#xA;interessa è &lt;code&gt;cap_net_bind_service&lt;/code&gt;: dà a un processo il diritto di fare il bind&#xA;su porte well-known (&amp;lt; 1024). Se usi un linguaggio interpretato, ovviamente&#xA;dovrai aggiungere la capability all&amp;rsquo;interprete stesso. Ecco perché c&amp;rsquo;è&#xA;&lt;strong&gt;sviluppo&lt;/strong&gt; nel titolo di questo articolo — non dovresti configurare questo su&#xA;un server di produzione, se non sai cosa stai facendo.&lt;/p&gt;&#xA;&lt;p&gt;Un&amp;rsquo;ultima stranezza: se ti capita di fare &lt;code&gt;dlopen()&lt;/code&gt; su shared object che&#xA;linkano dinamicamente verso librerie fuori dai path canonici, non puoi caricarli&#xA;tramite &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt; (ad es. il &lt;code&gt;SYBASE.sh&lt;/code&gt;) perché viene ignorato per i&#xA;processi con &lt;code&gt;setcap&lt;/code&gt;. Meglio spostare i path delle librerie in uno snippet&#xA;dentro &lt;code&gt;/etc/ld.so.conf.d&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tldr&#34;&gt;tl;dr&lt;/h2&gt;&#xA;&lt;p&gt;Assumendo che tu sia l&amp;rsquo;ultimo e più grande sviluppatore Rails, dovresti&#xA;diventare root — o usare sudo, come preferisci — e&lt;/p&gt;</description>
    </item>
    <item>
      <title>PH-Neutral 0x7db</title>
      <link>https://sindro.me/it/posts/2011-07-02-ph-neutral-0x7db/</link>
      <pubDate>Sat, 02 Jul 2011 17:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2011-07-02-ph-neutral-0x7db/</guid>
      <description>&lt;p&gt;&amp;#8220;&lt;strong&gt;If it is good, they stop making it&lt;/strong&gt;&amp;#8221;, il&#xA;payoff stampato sui laccetti della conferenza, distribuiti a ogni partecipante,&#xA;insieme a un badge über-l33t personalizzato con il nostro nickname e l&#39;hash&#xA;della chiave.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align:center;&#34;&gt;&lt;img src=&#34;https://sindro.me/posts/2011-07-02-ph-neutral-0x7db/phneutral-badge.jpg&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Essendo la mia prima esperienza a una conferenza di sicurezza internazionale&#xA;(sono stato solo al camp ccc2k+7), ed essendo un outsider di ph dato che non&#xA;avevo mai partecipato alle edizioni precedenti, il keynote di apertura tenuto da&#xA;&lt;a href=&#34;http://twitter.com/41414141&#34;&gt;FX&lt;/a&gt;, staffer e frontman, è stato&#xA;illuminante: &amp;#8220;you ought to be here!&amp;#8221;, ha urlato indicando il palco,&#xA;indossando una camicia bianca col logo Phenoelit stampato su entrambe le&#xA;maniche.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;continue&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&amp;#8220;Questa conferenza non è mai iniziata in orario&amp;#8221;, ha continuato,&#xA;&amp;#8220;quindi non c&#39;era motivo di farlo per quest&#39;ultima&amp;#8221;. Il programma è&#xA;lineare: festa, il giorno dopo talk dalle 12:00 alle 19:30, poi festa, e&#xA;l&#39;ultimo giorno talk dalle 12:00 alle 17:30. Decisamente un setup che si sposa&#xA;bene con l&#39;alcol disponibile :-D.&lt;/p&gt;&#xA;&lt;p&gt;Subito dopo, un altro speaker ci ha informato che le chiavi di accesso wifi&#xA;ricevute alla registrazione ci permettono di usare una bestia con 6 AP/3&#xA;repeater pilotata da un box OpenBSD — vogliono che il pubblico la hacki perché,&#xA;beh, &amp;#8220;you are the Worst Case Scenario.&amp;#8221; :-)&lt;/p&gt;&#xA;&lt;p style=&#34;text-align:center;&#34;&gt;&lt;img src=&#34;https://sindro.me/posts/2011-07-02-ph-neutral-0x7db/ap-tree.jpg&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;Poi è stato presentato il divertente video Hacker Hacker:&lt;/p&gt;&#xA;&lt;p style=&#34;text-align:center;&#34;&gt;&lt;iframe width=&#34;100%&#34; height=&#34;400&#34;&#xA;src=&#34;https://www.youtube.com/embed/IZYQILfxHiw&#34; frameborder=&#34;0&#34;&#xA;allowfullscreen=&#34;yay&#34;&gt;&lt;/iframe&gt;&lt;/p&gt;&#xA;&lt;p style=&#34;text-align:center;&#34;&gt;:-D&lt;/p&gt;&#xA;&lt;p&gt;Dopo una prima serata fiacca e non troppo entusiasmante (per la stanchezza),&#xA;vedremo cosa porta il giorno dopo.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align:center;&#34;&gt;&lt;img src=&#34;https://sindro.me/posts/2011-07-02-ph-neutral-0x7db/funny-nhaima.jpg&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;&#xA;&lt;h2&gt;&lt;a href=&#34;http://ph-neutral.darklab.org/talks/sj.html&#34;&gt;Sniffjoke &amp;#8211; un&#xA;toolkit per eludere gli sniffer&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Gli sniffer ad alta capacità usati nelle grandi aziende e sui gateway di&#xA;frontiera nazionali che raccolgono traffico generato dagli utenti per trovare&#xA;pattern potenzialmente &amp;#8220;criminali&amp;#8221; sono oggi generalmente disponibili&#xA;per larghezze di banda fino a 10Gbps, e presto ci saranno appliance che&#xA;elaboreranno flussi da 100Gbps. Sniffjoke, di &lt;a&#xA;href=&#34;http://twitter.com/sniffjoke&#34;&gt;vecna&lt;/a&gt; e &lt;a&#xA;href=&#34;http://www.evilaliv3.org/&#34;&gt;evilaliv3&lt;/a&gt;, è uno strumento che può&#xA;iniettare nelle connessioni &lt;span class=&#34;caps&#34;&gt;TCP&lt;/span&gt; pacchetti estranei che&#xA;ingannano lo sniffer intercettante ma senza effetti significativi sul&#xA;destinatario. Questi pacchetti, per esempio, fanno credere allo sniffer che la&#xA;connessione sia stata resettata anche se non è vero — iniettando un &lt;span&#xA;class=&#34;caps&#34;&gt;RST&lt;/span&gt; con checksum errato o un pacchetto con &lt;span&#xA;class=&#34;caps&#34;&gt;TTL&lt;/span&gt; inferiore di 1 rispetto al conteggio degli hop — oppure&#xA;cercano di consumare la sua potenza di calcolo usando interpretazioni&#xA;vendor-specific note del &lt;span class=&#34;caps&#34;&gt;TCP RFC&lt;/span&gt;. Dettagli: &lt;a&#xA;href=&#34;http://delirandom.net/sniffjoke/&#34;&gt;sito web&lt;/a&gt;, &lt;a&#xA;href=&#34;http://www.slideshare.net/diocanaglia/sniffjoke-04&#34;&gt;slide&lt;/a&gt;, &lt;a&#xA;href=&#34;http://www.wireshark.org/lists/wireshark-dev/200904/msg00343.html&#34;&gt;thread&#xA;su Wireshark&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Roma RSC 2011</title>
      <link>https://sindro.me/it/posts/2011-03-06-rome-rsc-2011/</link>
      <pubDate>Sun, 06 Mar 2011 18:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2011-03-06-rome-rsc-2011/</guid>
      <description>&lt;p&gt;Grazie agli sforzi di &lt;a href=&#34;http://twitter.com/jodosha&#34; target=&#34;_blank&#34;&gt;@jodosha&lt;/a&gt; e sulla scia del&#xA;vecchio evento &lt;del&gt;Javaday&lt;/del&gt;, ora ribattezzato &lt;a href=&#34;http://codemotion.it/&#34; target=&#34;_blank&#34;&gt;codemotion&lt;/a&gt;&#xA;che ha portato a Roma tanti sviluppatori Ruby da Milano, Padova e altre parti&#xA;d&amp;rsquo;Italia — il primo Ruby Social Club &lt;em&gt;ufficiale&lt;/em&gt; a Roma è stato un gran&#xA;successo. Ovviamente, l&amp;rsquo;&lt;em&gt;ufficialità&lt;/em&gt; si misura &lt;strong&gt;solo&lt;/strong&gt; nella quantità di spam&#xA;su Twitter postato a riguardo! :-): i precedenti RSC a Roma &lt;a href=&#34;http://ruby-it.org/pages/Primo&amp;#43;incontro&amp;#43;del&amp;#43;Ruby&amp;#43;Social&amp;#43;Club&amp;#43;a&amp;#43;Roma&#34; target=&#34;_blank&#34;&gt;risalgono al&#xA;2006&lt;/a&gt;&#xA;organizzati dagli attuali membri di &lt;a href=&#34;http://mikamai.com/&#34; target=&#34;_blank&#34;&gt;mikamai&lt;/a&gt; e altri&#xA;meetup promossi da &lt;a href=&#34;http://twitter.com/jeko&#34; target=&#34;_blank&#34;&gt;@jeko&lt;/a&gt; &lt;a href=&#34;https://www.ruby-forum.com/search?query=ruby&amp;#43;social&amp;#43;club&amp;#43;roma&#34; target=&#34;_blank&#34;&gt;nel&#xA;2007&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Quello che conta è che c&amp;rsquo;è una community, c&amp;rsquo;è passione, e c&amp;rsquo;è voglia di&#xA;condividere conoscenza — non importa chi organizza gli incontri, l&amp;rsquo;importante è&#xA;che si facciano :-).&lt;/p&gt;&#xA;&lt;p&gt;L&amp;rsquo;evento è stato semplice e diretto — prima qualche birra, poi la mia&#xA;presentazione su RVM e gli interpreti Ruby, poi quella di Luca che ha annunciato&#xA;il suo progetto &lt;a href=&#34;http://minege.ms/&#34; target=&#34;_blank&#34;&gt;minege.ms&lt;/a&gt; e dopo il &lt;strong&gt;vero&lt;/strong&gt; social&#xA;networking :-). Ho rivisto &lt;a href=&#34;http://twitter.com/gravityblast&#34; target=&#34;_blank&#34;&gt;@gravityblast&lt;/a&gt; dopo&#xA;tanto che non ci vedevamo, ho conosciuto il gruppo&#xA;&lt;a href=&#34;http://programmersinpadua.it/&#34; target=&#34;_blank&#34;&gt;PIP&lt;/a&gt; e ho incontrato&#xA;&lt;a href=&#34;http://twitter.com/svarione&#34; target=&#34;_blank&#34;&gt;@svarione&lt;/a&gt;,&#xA;&lt;a href=&#34;http://twitter.com/punkmanit&#34; target=&#34;_blank&#34;&gt;@punkmanit&lt;/a&gt;,&#xA;&lt;a href=&#34;http://twitter.com/leonardoperna&#34; target=&#34;_blank&#34;&gt;@leonardoperna&lt;/a&gt;,&#xA;&lt;a href=&#34;http://twitter.com/riggasconi&#34; target=&#34;_blank&#34;&gt;@riggasconi&lt;/a&gt;,&#xA;&lt;a href=&#34;http://twitter.com/ogeidix&#34; target=&#34;_blank&#34;&gt;@ogeidix&lt;/a&gt; e altre persone in gamba. Inoltre,&#xA;abbiamo passato del gran bel tempo insieme, mettendo su un weekend davvero&#xA;sgangherato e divertente. Ovviamente, enormi kudos alla macchina di&#xA;&lt;a href=&#34;http://twitter.com/nhaima&#34; target=&#34;_blank&#34;&gt;@nhaima&lt;/a&gt; — che ci ha instancabilmente portato in&#xA;giro per Roma per due giorni :-)&lt;/p&gt;&#xA;&lt;p&gt;Ora, in attesa del prossimo meetup, &lt;strong&gt;grazie&lt;/strong&gt; a tutti quelli che hanno&#xA;partecipato, che mi hanno offerto birre e, ultimo ma non meno importante, grazie&#xA;a &lt;a href=&#34;http://twitter.com/etapeta&#34; target=&#34;_blank&#34;&gt;@etapeta&lt;/a&gt; per avermi portato in tempo&#xA;all&amp;rsquo;incontro — sei il vero eroe :-).&lt;/p&gt;&#xA;&lt;div style=&#34;width:100%; text-align:center;&#34;&gt; &lt;iframe&#xA;src=&#34;https://www.slideshare.net/slideshow/embed_code/key/MjVIa6uAKD9ASk&#34;&#xA;width=&#34;100%&#34; height=&#34;500&#34; frameborder=&#34;0&#34; marginwidth=&#34;0&#34; marginheight=&#34;0&#34;&#xA;scrolling=&#34;no&#34; allowfullscreen&gt;&lt;/iframe&gt; &lt;/div&gt;</description>
    </item>
    <item>
      <title>*BSD su un MacMini 4,1? Neanche per sogno. :-(</title>
      <link>https://sindro.me/it/posts/2011-01-04-bsd-onto-a-macmini-4-1-no-way/</link>
      <pubDate>Tue, 04 Jan 2011 18:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2011-01-04-bsd-onto-a-macmini-4-1-no-way/</guid>
      <description>&lt;img src=&#34;https://sindro.me/posts/2011-01-04-bsd-onto-a-macmini-4-1-no-way/mini-daemon.png&#34; style=&#34;float: right&#34; /&gt;&#xA;&lt;p&gt;Ho passato gli ultimi due giorni a cercare di configurare il Mac Mini in alluminio (rev. 4,1)&#xA;come &lt;span class=&#34;caps&#34;&gt;NAS&lt;/span&gt; server casalingo con storage crittografato, e&#xA;volevo metterci un sistema &lt;span class=&#34;caps&#34;&gt;BSD&lt;/span&gt;. C&#39;è già un&#xA;OpenBSD embedded sul gateway soekris, e un compagno sarebbe stato&#xA;carino. :-)&lt;/p&gt;&#xA;&lt;p&gt;Indovinate un po&#39;, non c&#39;è verso:&lt;/p&gt;&#xA;&lt;ul&gt; &lt;li&gt;FreeBSD 8.1 non completa il processo di boot, a causa di &lt;a&#xA;href=&#34;http://wiki.freebsd.org/AppleMacbook&#34;&gt;un bug nel chipset &lt;span&#xA;class=&#34;caps&#34;&gt;SATA&lt;/span&gt;, &lt;span class=&#34;caps&#34;&gt;NV MCP89&lt;/span&gt;&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;FreeBSD 8.2-RC1 fa il boot ma, a causa dello stesso bug, non riconosce nessun&#xA;drive &lt;span class=&#34;caps&#34;&gt;SATA&lt;/span&gt; né nessun dispositivo &lt;span class=&#34;caps&#34;&gt;USB&lt;/span&gt;&#xA;umass;&lt;/li&gt; &lt;li&gt;NetBSD 5.1 fa il boot senza problemi, gestisce i&#xA;dischi &lt;span class=&#34;caps&#34;&gt;SATA&lt;/span&gt; tramite il driver generico pciide (niente &lt;span&#xA;class=&#34;caps&#34;&gt;DMA&lt;/span&gt;, quindi piuttosto lento) ma, sfortunatamente, non gestisce&#xA;il controller ethernet &lt;span class=&#34;caps&#34;&gt;BCM57762&lt;/span&gt;. Ho provato con&#xA;patch veloci e sporche per &lt;a&#xA;href=&#34;http://code.bsd64.org/cvsweb/netbsd/src/sys/dev/pci/if_bge.c&#34;&gt;portare il&#xA;driver bge al livello di -current&lt;/a&gt;, ma niente da fare: il &lt;span&#xA;class=&#34;caps&#34;&gt;MII&lt;/span&gt; link detection funziona, la scheda trasmette ma&#xA;non riceve. Anche il controller sdmmc funziona con -current ma non&#xA;con la 5.1-RELEASE. L&#39;&lt;span class=&#34;caps&#34;&gt;ACPI&lt;/span&gt; funziona correttamente;&lt;/li&gt;&#xA;&lt;li&gt;OpenBSD 4.8 fa il boot, accede ai drive &lt;span class=&#34;caps&#34;&gt;SATA&lt;/span&gt;&#xA;senza &lt;span class=&#34;caps&#34;&gt;DMA&lt;/span&gt;, e riconosce la scheda di rete bge, ma&#xA;mostra lo stesso identico comportamento di NetBSD 5.1 col driver di -current;&lt;/li&gt;&#xA;&lt;li&gt;DragonFlyBSD 2.8.2 non entra nemmeno in kernel mode, sospetto&#xA;a causa di bug &lt;span class=&#34;caps&#34;&gt;ACPI&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;PureDarwin non mi ha&#xA;ispirato granché, a causa dei tanti &lt;a&#xA;href=&#34;http://www.puredarwin.org/blockers&#34;&gt;problemi bloccanti&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt;&#xA;&lt;p&gt;Tutti supportano lo storage crittografato, ho tirato su un disco &lt;a&#xA;href=&#34;http://netbsd.gw.com/cgi-bin/man-cgi?cgd+4+NetBSD-5.0&#34;&gt;NetBSD &lt;span&#xA;class=&#34;caps&#34;&gt;CGD&lt;/span&gt;&lt;/a&gt; senza problemi su dk wedge; FreeBSD ha gli&#xA;interessanti strumenti &lt;a&#xA;href=&#34;http://www.freebsd.org/doc/handbook/disks-encrypting.html&#34;&gt;gbde(8) e&#xA;geli(8)&lt;/a&gt; basati su GEOM che non ho potuto testare, mentre OpenBSD&#xA;supporta la crittografia tramite una &lt;a&#xA;href=&#34;http://www.openbsd.org/cgi-bin/man.cgi?query=softraid&amp;amp;sektion=4&#34;&gt;personality&#xA;softraid&lt;/a&gt;. Purtroppo, il supporto per l&#39;hardware Apple, ormai esotico, è&#xA;fuori discussione.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scoprire le culture del mondo tramite l&#39;autocompletamento di Google</title>
      <link>https://sindro.me/it/posts/2010-09-16-learning-about-world-cultures-via-google-autocomplete/</link>
      <pubDate>Thu, 16 Sep 2010 20:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2010-09-16-learning-about-world-cultures-via-google-autocomplete/</guid>
      <description>&lt;p&gt;Per curiosità, stavo guardando come un browser interagisce col backend di Google&#xA;Instant. Mentre osservavo gli scambi HTTP con Firebug, prima mi sono chiesto&#xA;perché codificano HTML e JS con sequenze di escape &lt;code&gt;\xYY&lt;/code&gt;, poi perché le&#xA;stessissime funzioni JS vengono mandate avanti e indietro ad ogni richiesta, e&#xA;poi mi sono imbattuto nel servizio JSONp &lt;code&gt;google.com/s?q=QUERY&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Dagli una query, e ti restituirà le frasi suggerite correlate che vengono usate&#xA;per costruire il menu sotto la barra di ricerca quando usi i suggerimenti e/o&#xA;Instant (non ho scavato troppo in tutti gli altri parametri).&lt;/p&gt;&#xA;&lt;p&gt;Ad ogni modo, la cosa interessante è che, ovviamente, i suggerimenti sono&#xA;personalizzati per paese. Per mostrare le differenze in modo esplicito,&#xA;chiediamo al servizio la query più semplice possibile, &lt;code&gt;a&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;p&gt;Per l&amp;rsquo;Italia otterrai:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ curl http://www.google.it/s?q=a&#xA;window.google.ac.h([&amp;#34;a&amp;#34;,[[&amp;#34;ansa&amp;#34;,&amp;#34;&amp;#34;,&amp;#34;0&amp;#34;],&#xA;[&amp;#34;alice&amp;#34;,&amp;#34;&amp;#34;,&amp;#34;1&amp;#34;],[&amp;#34;alitalia&amp;#34;,&amp;#34;&amp;#34;,&amp;#34;2&amp;#34;],[&amp;#34;alice mail&amp;#34;,&amp;#34;&amp;#34;,&amp;#34;3&amp;#34;],&#xA;[&amp;#34;apple&amp;#34;,&amp;#34;&amp;#34;,&amp;#34;4&amp;#34;],[&amp;#34;agenzia delle entrate&amp;#34;,&amp;#34;&amp;#34;,&amp;#34;5&amp;#34;],&#xA;[&amp;#34;audi&amp;#34;,&amp;#34;&amp;#34;,&amp;#34;6&amp;#34;],[&amp;#34;aci&amp;#34;,&amp;#34;&amp;#34;,&amp;#34;7&amp;#34;],[&amp;#34;autoscout&amp;#34;,&amp;#34;&amp;#34;,&amp;#34;8&amp;#34;],&#xA;[&amp;#34;atm&amp;#34;,&amp;#34;&amp;#34;,&amp;#34;9&amp;#34;]],&amp;#34;&amp;#34;,&amp;#34;&amp;#34;,&amp;#34;&amp;#34;,&amp;#34;&amp;#34;,&amp;#34;&amp;#34;,{}])&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;hmm, togliamo il JSONp e i parametri:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ curl -s http://www.google.it/s?q=a | ruby -rjson -ne &amp;#39;puts JSON($_[19..-2])[1].map(&amp;amp;:first).join(&amp;#34;, &amp;#34;)&amp;#39;            &#xA;ansa, alice, alitalia, alice mail, apple, agenzia delle entrate, audi, aci, autoscout, atm&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Per gli USA otterrai:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;amazon, aol, att, apple, american airlines, abc, ask.com, amtrak, addicting games, aim&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Regno Unito:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;argos, amazon, asda, asos, autotrader, aa route planner, aol, apple, amazon uk, aqa&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Irlanda:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;aer lingus, aib, argos, amazon.co.uk, argos.ie, asos, aa route planner, amazon, aldi, aib internet banking&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Infine, perché ci sono stato di recente ed è stata un&amp;rsquo;esperienza profonda, Cuba:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;asus, antonio maceo, amor, amigos, ain, antivirus, avira, alba, aduana, as&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sono sicuro che @nhaima sta sorridendo nel vedere queste parole, perché caspita,&#xA;laggiù cercano davvero un sacco software antivirus (avira è uno di quelli)&#xA;perché è un mondo senza Internet, quindi senza software libero: sei condannato&#xA;a usare roba Windows, e hai quello per cui paghi. Antonio Maceo è stato un eroe&#xA;della rivoluzione del XIX secolo, ed è nel cuore del popolo cubano. Amor,&#xA;Amigos! :-)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gli spin-off di Panmind presentati al Ruby Social Club Milano</title>
      <link>https://sindro.me/it/posts/2010-08-05-panmind-at-ruby-social-club/</link>
      <pubDate>Thu, 05 Aug 2010 16:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2010-08-05-panmind-at-ruby-social-club/</guid>
      <description>&lt;p&gt;Il 22 luglio 2010, &lt;a href=&#34;http://mikamai.com/&#34; target=&#34;_blank&#34;&gt;Mikamai&lt;/a&gt; ha ospitato un &lt;a href=&#34;http://blog.mikamai.com/2010/07/la-notte-del-ruby-social-club/&#34; target=&#34;_blank&#34;&gt;Ruby Social&#xA;Club a Milano&lt;/a&gt;,&#xA;dove circa 50 persone hanno assistito a cinque talk su Ruby, sviluppo web e&#xA;startup. Sono stato contento di essere uno degli speaker, e ho presentato un&#xA;insieme di plugin Rails che &lt;a href=&#34;http://mind2mind.is/&#34; target=&#34;_blank&#34;&gt;noi&lt;/a&gt; abbiamo estratto dal&#xA;nostro ultimo (e più grande) progetto:&#xA;&lt;a href=&#34;http://panmind.org/&#34; target=&#34;_blank&#34;&gt;Panmind&lt;/a&gt; (leggi di più nella &lt;a href=&#34;http://panmind.org/about&#34; target=&#34;_blank&#34;&gt;pagina&#xA;about&lt;/a&gt;), rilasciati come Open Source su&#xA;&lt;a href=&#34;http://github.com/Panmind&#34; target=&#34;_blank&#34;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;La presentazione è divisa in due parti: la prima spiega &lt;strong&gt;perché&lt;/strong&gt; dovresti&#xA;seguire il sano principio di ingegneria del software di scrivere codice modulare&#xA;e a responsabilità separate, e poi &lt;strong&gt;come&lt;/strong&gt; potresti (e dovresti) estrarlo dalla&#xA;tua applicazione Rails disaccoppiando la configurazione e preparando il rilascio&#xA;Open Source, scrivendo documentazione &lt;strong&gt;E&lt;/strong&gt; presentando a un evento Ruby così,&#xA;&lt;strong&gt;si spera, qualcun altro scriverà i test unitari! :-)&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Abbiamo rilasciato un plugin &lt;a href=&#34;http://github.com/panmind/ssl_helper&#34; target=&#34;_blank&#34;&gt;SSL helper&lt;/a&gt;&#xA;che implementa dei filtri (come &lt;code&gt;ssl_requirement&lt;/code&gt; di Rails) ma anche degli&#xA;helper per le named route: basta con &lt;code&gt;&amp;lt;%= url_for :protocol =&amp;gt; &#39;https&#39; %&amp;gt;&lt;/code&gt;!&#xA;Avrai qualcosa come &lt;code&gt;plain_root_url&lt;/code&gt; e &lt;code&gt;ssl_login_url&lt;/code&gt; — come se fossero&#xA;integrati nel framework.&lt;/p&gt;&#xA;&lt;p&gt;Poi, un plugin semplicissimo per &lt;a href=&#34;http://github.com/panmind/bigbro&#34; target=&#34;_blank&#34;&gt;Google&#xA;Analytics&lt;/a&gt;, con supporto &lt;code&gt;&amp;lt;noscript&amp;gt;&lt;/code&gt;, un&#xA;paio di helper per i test e un&#xA;&lt;a href=&#34;http://github.com/Panmind/bigbro/blob/master/js/jquery.analytics.js&#34; target=&#34;_blank&#34;&gt;embrione&lt;/a&gt;&#xA;di framework JS per Analytics — si spera che evolva in un plugin jQuery&#xA;completo. Poi, un&amp;rsquo;interfaccia&#xA;&lt;a href=&#34;http://github.com/Panmind/recaptcha&#34; target=&#34;_blank&#34;&gt;ReCaptcha&lt;/a&gt;, con supporto alla validazione&#xA;AJAX, e infine un&amp;rsquo;interfaccia &lt;a href=&#34;http://github.com/Panmind/zendesk&#34; target=&#34;_blank&#34;&gt;Zendesk&lt;/a&gt;&#xA;per Rails.&lt;/p&gt;&#xA;&lt;p&gt;Abbiamo rilasciato anche altro codice sull&amp;rsquo;&lt;a href=&#34;http://github.com/Panmind&#34; target=&#34;_blank&#34;&gt;account GitHub di&#xA;Panmind&lt;/a&gt;, incluso il bel &lt;a href=&#34;http://github.com/Panmind/jquery-ajax-nav&#34; target=&#34;_blank&#34;&gt;AJAX Navigation&#xA;Framework&lt;/a&gt; che implementa tutto il&#xA;codice boilerplate per la navigazione AJAX ultra-veloce dei&#xA;&lt;a href=&#34;http://panmind.org/search&#34; target=&#34;_blank&#34;&gt;contenuti&lt;/a&gt; e dei&#xA;&lt;a href=&#34;http://panmind.org/tour/collaborate&#34; target=&#34;_blank&#34;&gt;progetti&lt;/a&gt; di Panmind.&lt;/p&gt;&#xA;&lt;p&gt;La presentazione segue: puoi scaricarla in PDF (nessun &lt;a href=&#34;https://sindro.me/posts/2010-08-04-on-the-iphone-pdf-and-kernel-exploit&#34;&gt;exploit, lo&#xA;giuro!&lt;/a&gt;) &lt;a href=&#34;https://sindro.me/posts/2010-08-05-panmind-at-ruby-social-club/Panmind_at_Ruby_Social_Club_Milano.pdf&#34;&gt;da questo&#xA;link&lt;/a&gt;&#xA;o visualizzarla/commentarla su Slideshare&#xA;&lt;a href=&#34;http://www.slideshare.net/panmind/panmind-open-source-releases-presented&#34; target=&#34;_blank&#34;&gt;qui&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sull&#39;exploit PDF e kernel dell&#39;iPhone</title>
      <link>https://sindro.me/it/posts/2010-08-04-on-the-iphone-pdf-and-kernel-exploit/</link>
      <pubDate>Wed, 04 Aug 2010 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2010-08-04-on-the-iphone-pdf-and-kernel-exploit/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2010-08-04-on-the-iphone-pdf-and-kernel-exploit/jailbreakme.jpg&#34; alt=&#34;Jailbreak me&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Come la maggior parte di voi già sa, ci sono due &lt;a href=&#34;http://www.vupen.com/english/advisories/2010/1992&#34; target=&#34;_blank&#34;&gt;vulnerabilità aperte e&#xA;critiche&lt;/a&gt; nelle versioni di&#xA;iPhone OS dalla 3.x in su. La prima risiede nel componente Compact Font Format&#xA;del renderer PDF, la seconda è un errore nel kernel che permette agli attaccanti&#xA;di bypassare la sandbox (SeatBelt) dentro cui le applicazioni vengono eseguite&#xA;sull&amp;rsquo;iPhone.&lt;/p&gt;&#xA;&lt;p&gt;Le due vulnerabilità sono state scoperte da &lt;a href=&#34;http://twitter.com/comex&#34; target=&#34;_blank&#34;&gt;@comex&lt;/a&gt;,&#xA;&lt;a href=&#34;http://twitter.com/chpwn&#34; target=&#34;_blank&#34;&gt;@chpwn&lt;/a&gt; e altre persone.&lt;/p&gt;&#xA;&lt;p&gt;Solo poche settimane dopo il &lt;a href=&#34;http://www.kb.cert.org/vuls/id/940193&#34; target=&#34;_blank&#34;&gt;difetto di design&#xA;.lnk&lt;/a&gt; su Windows (ragazzi, usate&#xA;&lt;code&gt;LoadLibraryW&lt;/code&gt; per caricare una dannata icona!), queste vulnerabilità di iPhone&#xA;OS sono ancora più interessanti, per il modo in cui il rilascio viene gestito&#xA;dalla community e dal vendor.&lt;/p&gt;&#xA;&lt;p&gt;Ho passato 3 ore ieri notte a cercare informazioni dettagliate sul bug, e a&#xA;parte confusi (e propagandistici) &lt;em&gt;blog post&lt;/em&gt;, le uniche briciole di&#xA;informazione sono in questo&#xA;&lt;a href=&#34;http://twitter.com/chpwn/statuses/20173810590&#34; target=&#34;_blank&#34;&gt;tweet&lt;/a&gt; e nell&amp;rsquo;exploit PDF vero&#xA;e proprio su &lt;a href=&#34;http://www.jailbreakme.com/_/&#34; target=&#34;_blank&#34;&gt;jailbreakme.com&lt;/a&gt;. Dove sono i post&#xA;sulle security mailing list? Dov&amp;rsquo;è il CVE? Persino il CERT ancora non dice&#xA;niente su questa vulnerabilità.&lt;/p&gt;&#xA;&lt;p&gt;C&amp;rsquo;è qualcosa di &lt;strong&gt;terribilmente sbagliato&lt;/strong&gt; in corso: il&#xA;&lt;a href=&#34;http://en.wikipedia.org/wiki/Cat_and_mouse&#34; target=&#34;_blank&#34;&gt;gioco del gatto col topo&lt;/a&gt; che porta&#xA;i &lt;a href=&#34;http://blog.iphone-dev.org/&#34; target=&#34;_blank&#34;&gt;ricercatori dell&amp;rsquo;iphone-dev team&lt;/a&gt; a non&#xA;divulgare nessuna delle vulnerabilità che trovano è diventato molto pericoloso&#xA;per gli utenti finali: un exploit che permette l&amp;rsquo;esecuzione di codice remoto e&#xA;l&amp;rsquo;uscita dalla jail senza nessuna interazione da parte dell&amp;rsquo;utente, veicolato&#xA;tramite qualcosa che si considera &amp;ldquo;sicuro&amp;rdquo; (un file PDF) è quello che si chiama&#xA;una falla &lt;em&gt;critica&lt;/em&gt;; mentre l&amp;rsquo;exploit che la sfrutta si chiama &lt;em&gt;0-day&lt;/em&gt;. È la&#xA;prima volta nella mia vita che vedo un 0-day pacchettizzato e distribuito&#xA;esplicitamente tramite un sito web.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Oggi ho speso la giornata su Erlang-Ruby-Marshal ;-)</title>
      <link>https://sindro.me/it/posts/2010-05-11-spent-my-day-on-erlang-ruby-marshal-today/</link>
      <pubDate>Tue, 11 May 2010 19:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2010-05-11-spent-my-day-on-erlang-ruby-marshal-today/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2010-05-11-spent-my-day-on-erlang-ruby-marshal-today/erlang.png&#34; alt=&#34;Erlang logo&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;In sintesi, aggiunge il supporto per l&amp;rsquo;unmarshaling delle stringhe 1.9, e&#xA;implementa l&amp;rsquo;ultimo tipo mancante (&lt;code&gt;TYPE_LINK&lt;/code&gt;) che mancava dal codice. I test&#xA;ancora latitano, qualcuno vuole &lt;a href=&#34;http://github.com/vjt/erlang-ruby-marshal&#34; target=&#34;_blank&#34;&gt;dare una mano&lt;/a&gt;? :-)&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Added TYPE_LINK, needed because of how ruby 1.9 marshals strings.&#xA;&#xA;In 1.9, Ruby marshals the string encoding in the binary output, and&#xA;uses an Ivar construct (TYPE_IVAR) to wrap the string and adds an&#xA;&amp;#34;encoding&amp;#34; instance variable (notice: without a leading @) whose&#xA;value is the encoding itself.&#xA;&#xA;While the Ivar code worked correctly, the values of the encodings&#xA;are actually *strings*, that are being reused via the TYPE_LINK&#xA;construct, that wasn&amp;#39;t implemented.&#xA;&#xA;So, the get() and put() primitives are being used to store not&#xA;only tuples {id, sym} for symbols, but now store either&#xA;&#xA;  {{symbol, ID}, sym}&#xA;&#xA;  OR&#xA;&#xA;  {{value,  ID}, val}&#xA;&#xA;for the other types that use TYPE_LINK.&#xA;&#xA;By reading the ruby marshal.c source code, it looks like that MANY&#xA;data types save their values in the arg-&amp;gt;data hashtable, but by&#xA;inspecting the binary marshal output of, e.g, an array of floats,&#xA;links aren&amp;#39;t used.&#xA;&#xA;Thus, in this unmarshaler, links are considered, for now, only for&#xA;strings and regexes.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Forkami su GitHub: &lt;a href=&#34;http://github.com/vjt/erlang-ruby-marshal&#34; target=&#34;_blank&#34;&gt;http://github.com/vjt/erlang-ruby-marshal&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>CouchDB 0.11 Invalid UTF-8 JSON: Risolto</title>
      <link>https://sindro.me/it/posts/2010-04-03-couchdb-invalid-utf8-json/</link>
      <pubDate>Sat, 03 Apr 2010 19:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2010-04-03-couchdb-invalid-utf8-json/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2010-04-03-couchdb-invalid-utf8-json/couchdb.png&#34; alt=&#34;CouchDB logo&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Se il tuo CouchDB 0.11 ti spara l&amp;rsquo;errore &amp;ldquo;Invalid UTF-8 JSON&amp;rdquo; ad &lt;strong&gt;ogni&lt;/strong&gt; POST&#xA;o PUT che gli mandi, assicurati che nella tua&#xA;&lt;code&gt;$prefix/usr/lib/couchdb/erlang/lib&lt;/code&gt; non ci siano residui di installazioni&#xA;precedenti.&lt;/p&gt;&#xA;&lt;p&gt;Sul server di sviluppo &lt;a href=&#34;http://exelab.eu/&#34; target=&#34;_blank&#34;&gt;nostro&lt;/a&gt;, ho trovato due directory&#xA;(&amp;ldquo;couch-0.10&amp;rdquo; e &amp;ldquo;mochiweb-r97&amp;rdquo;) dalla vecchia installazione 0.10 che causavano&#xA;il problema.&lt;/p&gt;&#xA;&lt;p&gt;Questo vale se hai aggiornato da sorgenti, come probabilmente hai fatto, perché&#xA;ad aprile 2010 non è che ci fossero tutti questi pacchetti di CouchDB 0.11 :-).&lt;/p&gt;&#xA;&lt;p&gt;Un grazie enorme a &lt;a href=&#34;http://twitter.com/couchdb&#34; target=&#34;_blank&#34;&gt;@couchdb&lt;/a&gt; per &lt;a href=&#34;http://twitter.com/CouchDB/status/11495632471&#34; target=&#34;_blank&#34;&gt;avermi indicato&#xA;la direzione giusta&lt;/a&gt; dopo &lt;a href=&#34;http://mail-archives.apache.org/mod_mbox/couchdb-dev/201002.mbox/%3c112036548.3241265012630999.JavaMail.jira@brutus.apache.org%3e&#34; target=&#34;_blank&#34;&gt;aver&#xA;letto una segnalazione sulla mailing list&#xA;dev&lt;/a&gt;&#xA;— ma non volevo fare &amp;ldquo;rimuovi e reinstalla&amp;rdquo; perché mi piace capire cosa sta&#xA;succedendo ;-).&lt;/p&gt;&#xA;&lt;p&gt;&lt;small&gt;Nota a margine: che sia la fine dell&amp;rsquo;Hiatus? Spero di sì ;-p&lt;/small&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fare qualcosa è sempre meglio che non fare niente</title>
      <link>https://sindro.me/it/posts/2009-06-12-doing-something-is-always-better-than-doing-nothing/</link>
      <pubDate>Fri, 12 Jun 2009 15:32:20 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-06-12-doing-something-is-always-better-than-doing-nothing/</guid>
      <description>&lt;p&gt;Dal palco del web2.0 Expo 2008 a San Francisco, &lt;a href=&#34;http://www.shirky.com/&#34; target=&#34;_blank&#34;&gt;Clay&#xA;Shirky&lt;/a&gt; parla della rivoluzione sociale portata dal&#xA;web2.0 nella società contemporanea, dalla TV a Wikipedia e World of Warcraft.&#xA;E Twitter doveva ancora essere riconosciuto a livello globale, nel 2008.&lt;/p&gt;&#xA;&lt;p&gt;Il video originale e la relativa discussione &lt;a href=&#34;http://blip.tv/file/855937/&#34; target=&#34;_blank&#34;&gt;qui&lt;/a&gt;&#xA;(per gentile concessione di blip.tv). &lt;strong&gt;Voto: 5 (perspicace)&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/gshVtNIUhrwN?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;</description>
    </item>
    <item>
      <title>Rails3: Better, Faster, Stronger</title>
      <link>https://sindro.me/it/posts/2009-06-04-rails3-better-faster-stronger/</link>
      <pubDate>Thu, 04 Jun 2009 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-06-04-rails3-better-faster-stronger/</guid>
      <description>&lt;div style=&#34;float:left; margin:5px 10px 0 0;&#34;&gt;&lt;img style=&#34;display:inline-block&#34;&#xA;src=&#34;https://sindro.me/posts/2009-06-04-rails3-better-faster-stronger/rails3-harder-better-faster-stronger.png&#34;&#xA;/&gt;&lt;/div&gt;&#xA;&lt;p&gt;Per chi capisce l&#39;italiano (e se stai leggendo questa versione, direi di sì), ho appena &lt;a&#xA;href=&#34;http://therubymine.com/2009/06/04/rails3-better-faster-stronger/&#34;&gt;pubblicato&#xA;un articolo&lt;/a&gt; su &lt;a href=&#34;http://therubymine.com/&#34;&gt;therubymine.com&lt;/a&gt; sulla&#xA;prossima release del framework &lt;a href=&#34;http://rubyonrails.com/&#34;&gt;Ruby on Rails&lt;/a&gt;,&#xA;la versione 3.0: la grande novità è la fusione con un altro web framework Ruby, &lt;a&#xA;href=&#34;http://merbivore.com/&#34;&gt;merb&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Buona lettura! :-)&lt;/p&gt;&#xA;&lt;p&gt;&lt;big&gt;&lt;a href=&#34;http://web.archive.org/web/20100125191434/http://therubymine.com/2009/06/04/rails3-better-faster-stronger/&#34;&gt;http://therubymine.com/2009/06/04/rails3-better-faster-stronger/&lt;/a&gt;&lt;/big&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Basta una sola persona per far partire la festa</title>
      <link>https://sindro.me/it/posts/2009-05-31-it-just-takes-one-person-to-get-the-party-started/</link>
      <pubDate>Sun, 31 May 2009 10:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-05-31-it-just-takes-one-person-to-get-the-party-started/</guid>
      <description>&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/Frd0CPYuZgU?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;La conclusione &lt;strong&gt;triste&lt;/strong&gt;: &amp;ldquo;gli esseri umani sono animali da branco&amp;rdquo;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;La conclusione &lt;strong&gt;buona&lt;/strong&gt;: &amp;ldquo;la viralita&amp;rsquo; e&amp;rsquo; sempre esistita, non e&#39;&#xA;un&amp;rsquo;invenzione del Web2.0. Il social networking e&amp;rsquo; semplicemente uno strumento&#xA;potente per chiunque voglia cambiare il mondo&amp;rdquo;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;La conclusione &lt;strong&gt;cattiva&lt;/strong&gt;: &amp;ldquo;quanto ci vuole per portare la gente dai propri&#xA;computer al mondo reale dopo un avviso virtuale da qualche &amp;lsquo;uomo che balla&amp;rsquo;?&amp;rdquo;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Altre conclusioni: leggete i commenti su questo video &lt;a href=&#34;http://www.reddit.com/r/videos/comments/8ol48/one_crazy_guy_dancing_alone_starts_a_huge_party/&#34; target=&#34;_blank&#34;&gt;su&#xA;reddit&lt;/a&gt;&#xA;e &lt;a href=&#34;http://www.youtube.com/watch?v=Frd0CPYuZgU&#34; target=&#34;_blank&#34;&gt;su youtube&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>E-Privacy 2009: Verso il Controllo Globale</title>
      <link>https://sindro.me/it/posts/2009-05-28-e-privacy-2009-towards-global-control/</link>
      <pubDate>Thu, 28 May 2009 13:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-05-28-e-privacy-2009-towards-global-control/</guid>
      <description>&lt;p&gt;&lt;a name=&#34;top&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Indice&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#recipe&#34;&gt;La Ricetta&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#scenario&#34;&gt;Lo Scenario&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#arguments&#34;&gt;Le Argomentazioni&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#why-bother&#34;&gt;Perche&#39; preoccuparsi&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#business-side&#34;&gt;Il lato business&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#identity-side&#34;&gt;Il lato identita&#39;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#google-side&#34;&gt;Il lato Google&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#protection-side&#34;&gt;Il lato protezione&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#communication-side&#34;&gt;Il lato comunicazione&lt;/a&gt;:&#xA; &lt;a href=&#34;#communication-tapping&#34;&gt;intercettare&lt;/a&gt; e &lt;a href=&#34;#communication-protection&#34;&gt;proteggere&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#final-words&#34;&gt;Parole finali&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;a name=&#34;recipe&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;La Ricetta&lt;/h2&gt;&#xA;&lt;div style=&#34;float:right;text-align:center;position:relative;right:40px;&#34;&gt;&#xA;&lt;a href=&#34;http://winstonsmith.info/&#34;&gt;&lt;img src=&#34;https://sindro.me/posts/2009-05-28-e-privacy-2009-towards-global-control/pws-logo.png&#34; alt=&#34;&#34; /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&#xA;&lt;a href=&#34;http://e-privacy.winstonsmith.info/&#34;&gt;&lt;img src=&#34;https://sindro.me/posts/2009-05-28-e-privacy-2009-towards-global-control/pe2009small.png&#34; alt=&#34;&#34; /&gt;&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3&gt;Ingredienti&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;L&#39;ambiente sociale del 2009&lt;/li&gt;&#xA;&lt;li&gt;Un mucchio di &lt;a href=&#34;http://www.delirandom.net/category/en/&#34;&gt;ha&lt;/a&gt;&lt;a href=&#34;http://recursiva.org/&#34;&gt;ck&lt;/a&gt;&lt;a href=&#34;http://fabio.pietrosanti.it/Who am i.html&#34;&gt;er&lt;/a&gt;&lt;a href=&#34;http://tramaci.org/&#34;&gt;s&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://studiomazzolari.wordpress.com/&#34;&gt;Qualche&lt;/a&gt; &lt;a href=&#34;http://www.studiozallone.it/Italian/ChiSiamo.asp&#34;&gt;avvocato&lt;/a&gt; &lt;a href=&#34;http://www.guidoscorza.it/&#34;&gt;competente&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Un &lt;a href=&#34;http://www.linkedin.com/in/marcopancini&#34;&gt;portavoce&lt;/a&gt; di Google&lt;/li&gt;&#xA;&lt;li&gt;I &lt;a href=&#34;http://bba.winstonsmith.com/&#34;&gt;Big Brother Awards&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Una consistente dose di paranoia&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;Preparazione&lt;/h3&gt;&#xA;&lt;p&gt;Prendete l&#39;intero ambiente sociale, completamente impreparato alla (r)evoluzione mediatica avvenuta negli ultimi anni, e lasciate che gli &lt;a href=&#34;http://catb.org/jargon/&#34;&gt;hacker&lt;/a&gt; osservino e ne parlino/scrivano. Portate gli avvocati, e lasciate che riconoscano &amp;#8220;Houston! Abbiamo un problema!&amp;#8221;, definendolo al contempo in legalese. Fate domande e partecipate a dibattiti interessanti.&lt;/p&gt;&#xA;&lt;p&gt;Ora, consegnate il Big Brother Award 2007 al &lt;a href=&#34;http://twitter.com/vjt/status/1881013015&#34;&gt;rappresentante di Google&lt;/a&gt;, lasciate che il sole si tuffi &lt;a href=&#34;http://www.flickr.com/photos/23589794@N08/3427669764/&#34;&gt;nelle colline&lt;/a&gt;, aggiungete una notevole quantita&#39; di &lt;a href=&#34;http://en.wikipedia.org/wiki/Chianti&#34;&gt;vino rosso toscano&lt;/a&gt;, e preparatevi per il giorno dopo. Lasciate fluire la paranoia, mentre gli hacker mostrano come si puo&#39; essere tracciati e trovati tramite la rete cellulare e spiati tramite telecamere collegate via wifi piazzate li&#39; &lt;em&gt;per la vostra sicurezza&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Guardate i Big Brother Awards 2009 non consegnati restare sulla scrivania dei relatori e improvvisamente &lt;a href=&#34;http://cgi.ebay.it/ws/eBayISAPI.dll?ViewItem&amp;amp;item=120425399453&#34;&gt;messi in vendita&lt;/a&gt; &lt;a href=&#34;http://cgi.ebay.it/ws/eBayISAPI.dll?ViewItem&amp;amp;item=120425394215&#34;&gt;su eBay&lt;/a&gt;, e tornate a casa, dove leggete e guardate un&#39;&lt;a href=&#34;http://tv.repubblica.it/copertina/berlusconi-nei-tg-appare-il-logo/33161?video&#34;&gt;intervista video-editata al premier italiano&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;continue&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Mettete tutto in frigo e date al vostro cervello due giorni per metabolizzarlo. Poi scrivetelo tutto &lt;strong&gt;&lt;span class=&#34;caps&#34;&gt;A VOCE ALTA&lt;/span&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align:center;&#34;&gt;&lt;img src=&#34;https://sindro.me/posts/2009-05-28-e-privacy-2009-towards-global-control/brain.jpg&#34; alt=&#34;&#34; /&gt;&lt;br/&gt;&lt;cite&gt;Foto di &lt;a href=&#34;http://www.flickr.com/photos/lorelei-ranveig/2294885580/&#34;&gt;lorelei-ranveig&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;&#xA;&lt;p style=&#34;text-align:right;&#34;&gt;&lt;small class=&#34;noprint&#34;&gt;&lt;a href=&#34;#top&#34;&gt;#top&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;scenario&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Lo scenario&lt;/h2&gt;&#xA;&lt;p&gt;Siamo connessi. Siamo &lt;strong&gt;completamente&lt;/strong&gt; connessi. Stiamo condividendo, stiamo creando identita&#39; multiple, stiamo esagerando e diventando dipendenti, stiamo guadagnando soldi (forse) da tutto cio&#39;, e se da un lato ci stiamo aprendo la mente a culture e punti di vista diversi, dall&#39;altro stiamo solo restringendo le nostre visioni perche&#39; troviamo solo le informazioni che cerchiamo, trattando Internet come un surrogato morbido della TV, annichilendo il pensiero critico, e ancora peggio, demonizzando la rete (non nel &lt;a href=&#34;http://wikipedia.org.twi.bz/C&#34;&gt;significato unix del termine&lt;/a&gt;) &lt;a href=&#34;http://www.gabriellacarlucci.it/2009/03/03/pedofilia-e-internet/&#34;&gt;a causa delle dichiarazioni di alcuni &amp;laquo;politici&amp;raquo;&lt;/a&gt;, dimenticando che tutto cio&#39; che gli uomini hanno costruito nella storia sono &lt;strong&gt;strumenti&lt;/strong&gt;, e qualsiasi problema causato dagli strumenti e&#39; solo questione di come &lt;strong&gt;altri uomini li usano effettivamente&lt;/strong&gt;, non degli strumenti stessi.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Il modo migliore per iniziare una nuova giornata</title>
      <link>https://sindro.me/it/posts/2009-05-26-the-best-way-to-begin-a-new-day/</link>
      <pubDate>Tue, 26 May 2009 10:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-05-26-the-best-way-to-begin-a-new-day/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;XFS internal error XFS_WANT_CORRUPTED_RETURN at line 295 of file fs/xfs/xfs_alloc.c.  Caller 0xc018066c&#xA; [&amp;lt;c017fed0&amp;gt;] xfs_alloc_fixup_trees+0x1b0/0x2e0&#xA; [&amp;lt;c018066c&amp;gt;] xfs_alloc_ag_vextent_near+0x31c/0x9c0&#xA; [&amp;lt;c018066c&amp;gt;] xfs_alloc_ag_vextent_near+0x31c/0x9c0&#xA; [&amp;lt;c0180187&amp;gt;] xfs_alloc_ag_vextent+0xf7/0x100&#xA; [&amp;lt;c01824fe&amp;gt;] xfs_alloc_vextent+0x35e/0x420&#xA; [&amp;lt;c019015d&amp;gt;] xfs_bmap_alloc+0x80d/0x12b0&#xA; [&amp;lt;c0111254&amp;gt;] try_to_wake_up+0xa4/0xc0&#xA; [&amp;lt;c02cf248&amp;gt;] schedule+0x308/0x5c0&#xA; [&amp;lt;c01939c4&amp;gt;] xfs_bmapi+0x514/0x1470&#xA; [&amp;lt;c0130069&amp;gt;] find_lock_page+0x29/0xe0&#xA; [&amp;lt;c013013c&amp;gt;] find_or_create_page+0x1c/0xb0&#xA; [&amp;lt;c01d9116&amp;gt;] kmem_zone_zalloc+0x26/0x50&#xA; [&amp;lt;c01a2296&amp;gt;] xfs_dir2_grow_inode+0xf6/0x3c0&#xA; [&amp;lt;c01b57a6&amp;gt;] xfs_iget_core+0x326/0x5a0&#xA; [&amp;lt;c0163315&amp;gt;] alloc_inode+0xd5/0x170&#xA; [&amp;lt;c01b978b&amp;gt;] xfs_idata_realloc+0x3b/0x160&#xA; [&amp;lt;c01a3e2d&amp;gt;] xfs_dir2_sf_to_block+0xad/0x680&#xA; [&amp;lt;c0137882&amp;gt;] cache_grow+0xe2/0x150&#xA; [&amp;lt;c01aa27b&amp;gt;] xfs_dir2_sf_addname+0x9b/0x110&#xA; [&amp;lt;c01a1c51&amp;gt;] xfs_dir2_createname+0x131/0x140&#xA; [&amp;lt;c01d9116&amp;gt;] kmem_zone_zalloc+0x26/0x50&#xA; [&amp;lt;c01cebcb&amp;gt;] xfs_trans_ijoin+0x2b/0x80&#xA; [&amp;lt;c01d4967&amp;gt;] xfs_create+0x407/0x6c0&#xA; [&amp;lt;c017e766&amp;gt;] xfs_acl_vhasacl_default+0x36/0x50&#xA; [&amp;lt;c01df8f4&amp;gt;] linvfs_mknod+0x2c4/0x390&#xA; [&amp;lt;c01a1d62&amp;gt;] xfs_dir2_lookup+0x102/0x110&#xA; [&amp;lt;c01228b8&amp;gt;] in_group_p+0x38/0x70&#xA; [&amp;lt;c01ba9a6&amp;gt;] xfs_iaccess+0xc6/0x1a0&#xA; [&amp;lt;c0157cb7&amp;gt;] permission+0x97/0xd0&#xA; [&amp;lt;c0158f94&amp;gt;] __link_path_walk+0xda4/0xe90&#xA; [&amp;lt;c0157cb7&amp;gt;] permission+0x97/0xd0&#xA; [&amp;lt;c015984c&amp;gt;] vfs_create+0x9c/0x120&#xA; [&amp;lt;c015a00b&amp;gt;] open_namei+0x58b/0x5e0&#xA; [&amp;lt;c014aa9d&amp;gt;] filp_open+0x2d/0x50&#xA; [&amp;lt;c014ac70&amp;gt;] get_unused_fd+0x50/0xc0&#xA; [&amp;lt;c0157ae7&amp;gt;] getname+0x67/0xb0&#xA; [&amp;lt;c014ad9c&amp;gt;] sys_open+0x3c/0x80&#xA; [&amp;lt;c0102867&amp;gt;] sysenter_past_esp+0x54/0x75&#xA;&#xA;xfs_force_shutdown(hda8,0x8) called from line 1091 of file fs/xfs/xfs_trans.c.  Return address = 0xc01e2c5c&#xA;Filesystem &amp;#34;hda8&amp;#34;: Corruption of in-memory data detected.  Shutting down filesystem: hda8&#xA;Please umount the filesystem, and rectify the problem(s)&#xA;xfs_force_shutdown(hda8,0x1) called from line 353 of file fs/xfs/xfs_rw.c.  Return address = 0xc01e2c5c&#xA;printk: 12 messages suppressed.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Gia&amp;rsquo;, farei l&amp;rsquo;umount di &lt;code&gt;/var&lt;/code&gt;, se questa macchina non facesse da &lt;code&gt;act_as_router&lt;/code&gt; e non avesse &lt;code&gt;pppd&lt;/code&gt; che non molla il lock su &lt;code&gt;/var/run/pppd2.tdb&lt;/code&gt;&amp;hellip;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;pppd   222 root  mem   REG    3,8    88080525 /var/run/pppd2.tdb (path dev=0,0 inode=34)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ovviamente &lt;code&gt;kill 222 ; pppd call dsl-provider&lt;/code&gt; non funziona. &lt;strong&gt;BLEAH&lt;/strong&gt;. Mettiamoci un router davanti&amp;hellip; configura, port forward, e si ricomincia&amp;hellip; poi &lt;code&gt;fdisk /dev/hdc&lt;/code&gt; per ricreare la struttura delle partizioni sul nuovo hard disk, &lt;code&gt;mkfs.xfs&lt;/code&gt; su tutte le nuove partizioni, &lt;code&gt;mount /dev/hdcX /target&lt;/code&gt;, &lt;code&gt;pax -r -w -p e /{bin,boot,dev,etc,home,initrd,lib,media,root,sbin,srv,tmp,usr,var} /target&lt;/code&gt;&amp;hellip; aspetta un sacco per la copia perche&amp;rsquo; ci sono settori danneggiati sul disco sorgente, &lt;code&gt;chroot /target&lt;/code&gt;, &lt;code&gt;vi /etc/lilo.conf&lt;/code&gt; e sostituisci &lt;code&gt;boot=/dev/hda&lt;/code&gt; con &lt;code&gt;boot=/dev/hdc&lt;/code&gt;, lancia &lt;code&gt;lilo -v&lt;/code&gt; mentre sei nel chroot, verifica &lt;code&gt;/etc/fstab&lt;/code&gt;, e finalmente &lt;code&gt;shutdown&lt;/code&gt; per rimuovere il disco guasto e riavviare&amp;hellip; ripristinando &lt;code&gt;lilo.conf&lt;/code&gt;. evvai!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Workshop Girl Geek Dinners @Apple Store, 16 maggio 2009, Roma</title>
      <link>https://sindro.me/it/posts/2009-05-18-girl-geeks-dinner-workshop-apple-store-rome/</link>
      <pubDate>Mon, 18 May 2009 15:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-05-18-girl-geeks-dinner-workshop-apple-store-rome/</guid>
      <description>&lt;p&gt;&amp;laquo;&lt;cite&gt;Donne! E&#39; arrivato l&#39;&lt;a href=&#34;http://www.flickr.com/photos/matteorocchi/3401964231/&#34;&gt;arrotino&lt;/a&gt;!&lt;/cite&gt;&amp;raquo; &amp;#8211; A parte gli scherzi ;) l&#39;&lt;a href=&#34;http://www.apple.com/it/retail/romaest/&#34;&gt;Apple Store&lt;/a&gt; italiano insieme a &lt;a href=&#34;http://www.girlgeekdinnersroma.com/&#34;&gt;Girl Geek Dinners Roma&lt;/a&gt; ha organizzato il 16 maggio 2009 un workshop sul mobile lifestyle (incentrato sull&#39;&lt;a href=&#34;http://www.apple.com/iphone&#34;&gt;iPhone&lt;/a&gt;, ovviamente).&lt;/p&gt;&#xA;&lt;div style=&#34;float:left; margin:6px 10px 0 0;&#34;&gt;&lt;a href=&#34;http://www.girlgeekdinnersroma.com/&#34;&gt;&lt;img style=&#34;display:inline-block&#34; src=&#34;https://sindro.me/posts/2009-05-18-girl-geeks-dinner-workshop-apple-store-rome/ggd-roma.jpg&#34; alt=&#34;&#34; /&gt;&lt;/a&gt;&lt;/div&gt;&#xA;&lt;p&gt;Partiamo dall&#39;inizio: cosa sono le &lt;a href=&#34;http://girlgeekdinners.com/&#34;&gt;Girl Geek Dinners&lt;/a&gt;? &lt;a href=&#34;http://www.linkedin.com/pub/linda-serra/9/461/756&#34;&gt;Linda&lt;/a&gt; ha spiegato al pubblico (circa 20 persone) che un &lt;a href=&#34;http://en.wikipedia.org/wiki/Geek&#34;&gt;geek&lt;/a&gt; e&#39; una persona appassionata di tecnologia in senso ampio: il &lt;span class=&#34;caps&#34;&gt;GGD&lt;/span&gt; e&#39; un gruppo dedicato ad aggregare donne interessate a internet, ai nuovi media e agli stili di vita tecnologici. Le donne sono spesso &lt;a href=&#34;http://www.girlgeekdinnersitalia.com/2009/04/donne-e-mondo-del-lavoro-qualcosa-sta-cambiando-lo-stato-dell&#39;arte/&#34;&gt;sottovalutate&lt;/a&gt; nelle &lt;a href=&#34;http://wooga.drbacchus.com/geek-arrogance-and-chauvinism&#34;&gt;comunita&#39; geek&lt;/a&gt;, e questo imbarazzante &lt;a href=&#34;http://www.cs.toronto.edu/~gvwilson/articles/open-source-cold-shoulder-2004.pdf&#34;&gt;cliche&#39;&lt;/a&gt; ha generato &lt;a href=&#34;http://groups.google.com/group/boston-rubygroup/browse_thread/thread/9bae949476720e32/8f5750437981806b?hl=en&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&amp;amp;q=women+ruby+community&#34;&gt;molte&lt;/a&gt; &lt;a href=&#34;http://stackoverflow.com/questions/305175/what-can-we-do-to-encourage-more-women-to-join-the-programming-field&#34;&gt;discussioni&lt;/a&gt; in passato, e la questione e&#39; ancora irrisolta (secondo me).&lt;/p&gt;&#xA;&lt;div style=&#34;clear:left&#34;&gt;&lt;/div&gt;&#xA;&lt;p&gt;&lt;a name=&#34;continue&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Il &lt;a href=&#34;http://www.girlgeekdinnersitalia.com/&#34;&gt;gruppo italiano &lt;span class=&#34;caps&#34;&gt;GGD&lt;/span&gt;&lt;/a&gt; e&#39; nato nel 2007 a Milano, poi e&#39; arrivato a Roma nel 2008, ed e&#39; presente anche a Bologna e nelle &lt;a href=&#34;http://en.wikipedia.org/wiki/Marche&#34;&gt;Marche&lt;/a&gt; e in &lt;a href=&#34;http://en.wikipedia.org/wiki/Emilia-Romagna&#34;&gt;Emilia-Romagna&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Quindi, il gruppo &lt;span class=&#34;caps&#34;&gt;GGD&lt;/span&gt; cerca di generare una &amp;#8220;massa critica&amp;#8221; di donne geek, per abolire lo stereotipo che &amp;#8220;programmatori / utenti esperti&amp;#8221; siano solo uomini: negli eventi &lt;span class=&#34;caps&#34;&gt;GGD&lt;/span&gt; i ragazzi ascoltano e le ragazze parlano, poi bloggano, si scambiano biglietti da visita (e chiavi &lt;span class=&#34;caps&#34;&gt;PGP&lt;/span&gt;, immagino ;) e in generale cercano di valorizzare il potere e le competenze delle donne nel campo dell&#39;industria informatica. Il networking e un tuffo nei social media sono il modo piu&#39; efficiente al giorno d&#39;oggi per raggiungere un grande pubblico e costruire rapidamente la suddetta massa critica: ecco perche&#39; l&#39;evento GGD era incentrato sulle applicazioni mobile social e di produttivita&#39; in generale. Presentato da due Apple Trainer ufficiali (&lt;a href=&#34;http://nhaima.org/&#34;&gt;Simona&lt;/a&gt; e &lt;a href=&#34;http://www.facebook.com/people/Riccardo-Zurlo/703403702&#34;&gt;Riccardo&lt;/a&gt;), il workshop e&#39; iniziato alle 11:30 e e&#39; durato circa un&#39;ora.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Le basi concettuali e l&#39;economia della neutralita&#39; della rete [Parte 2] - 14 maggio 2009, Roma</title>
      <link>https://sindro.me/it/posts/2009-05-16-the-conceptual-foundations-and-the-economics-network-neutrality-part-2/</link>
      <pubDate>Sat, 16 May 2009 04:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-05-16-the-conceptual-foundations-and-the-economics-network-neutrality-part-2/</guid>
      <description>&lt;p&gt;Questa e&#39; la seconda parte del mio resoconto del convegno &lt;a&#xA;href=&#34;http://www.nnsquad.it/&#34;&gt;nnsquad.it&lt;/a&gt; tenutosi a Roma il 14 maggio 2009,&#xA;ospitato dalla fondazione di consulenti &lt;span class=&#34;caps&#34;&gt;ICT&lt;/span&gt; &lt;a&#xA;href=&#34;http://www.fub.it/&#34;&gt;Fondazione Ugo Bordoni&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Nella &lt;a&#xA;href=&#34;https://sindro.me/posts/2009-05-16-the-conceptual-foundations-and-the-economics-network-neutrality-rome&#34;&gt;prima&#xA;parte&lt;/a&gt; ho descritto la sessione mattutina, dedicata alla definizione della&#xA;neutralita&#39; della rete e a come l&#39;economia globale possa conciliarsi con essa.&#xA;Il pomeriggio e&#39; stato dedicato a interventi piu&#39; tecnici, e ho avuto&#xA;l&#39;occasione di sentire le osservazioni dei portavoce delle telco sulla&#xA;situazione attuale e sui possibili sviluppi futuri.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align:center;&#34;&gt;&lt;img&#xA;src=&#34;https://sindro.me/posts/2009-05-16-the-conceptual-foundations-and-the-economics-network-neutrality-part-2/rospigliosi-palace-statues-room-nnsquad-convention.jpg&#34;&#xA;alt=&#34;&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;continue&#34;&gt;&lt;/a&gt; Il primo intervento e&#39; iniziato alle 14:15 ed e&#39;&#xA;stato tenuto dal prof. &lt;a&#xA;href=&#34;http://www.sede-cremona.polimi.it/organizzazione/dettagli_docente.php?id_nav=6582&amp;amp;aa=2008&amp;amp;sede_cds=cr&amp;amp;k_docente=176618&amp;amp;n_docente=TRECORDI%20VITTORIO&#34;&gt;Vittorio&#xA;Trecordi&lt;/a&gt; (slide disponibili &lt;a&#xA;href=&#34;http://www.fub.it/files/Slide_Trecordi_14_05_09.pdf&#34;&gt;qui&lt;/a&gt;). Lo ha&#xA;introdotto affermando che la net neutrality potrebbe potenzialmente contrastare&#xA;con lo sviluppo economico e le esigenze di sicurezza, a causa delle&#xA;intercettazioni necessarie per queste ultime, intercettazioni che sono&#xA;fortemente contrarie alla liberta&#39; individuale di comunicare.&lt;/p&gt;&#xA;&lt;p&gt;Stranamente (o forse no), non e&#39; stato fatto alcun cenno ai modi attuali per&#xA;aggirare sia le intercettazioni che la localizzazione dei comunicanti: mi&#xA;riferisco al &lt;a href=&#34;http://tor.eff.org/&#34;&gt;progetto Tor&lt;/a&gt;, il piu&#39; noto&#xA;bastione che garantisce la privacy ed e&#39; &lt;a&#xA;href=&#34;https://www.torproject.org/about/overview.html.en&#34;&gt;attualmente usato da&#xA;giornalisti che lavorano in zone &amp;quot;calde&amp;quot;&lt;/a&gt;, tra molti altri.&lt;/p&gt;&#xA;&lt;p&gt;Un altro punto sulla legislazione e&#39; che non e&#39; uguale in tutti i paesi,&#xA;sebbene Internet sia diffuso in tutto il mondo; inoltre dovremmo definire su&#xA;quali reti valutare la neutralita&#39;, perche&#39; non necessariamente una rete IP e&#39;&#xA;connessa a Internet (pensate ai walled garden di proprieta&#39; degli &lt;span&#xA;class=&#34;caps&#34;&gt;ISP&lt;/span&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Inoltre, di nuovo sulla Quality of Service: Trecordi ha affermato che&#xA;Internet ha avuto successo grazie al suo &amp;quot;modello a clessidra&amp;quot; e alla&#xA;&amp;#8220;capacita&#39; di disaccoppiare i servizi di comunicazione dall&#39;infrastruttura&#xA;di rete&amp;#8221;, ma i requisiti di QoS (ad es. per il VoIP) stressano la pila&#xA;protocollare, soprattutto dove i condotti di rete sono &amp;#8220;in&#xA;overbooking&amp;#8221;. Inoltre, anche l&#39;overprovisioning fallisce, a causa&#xA;dell&#39;architettura decentralizzata di Internet, e i colli di bottiglia si&#xA;trovano principalmente nei &lt;a href=&#34;http://www.mix-it.net/&#34;&gt;punti di&#xA;interconnessione tra ISP&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Le basi concettuali e l&#39;economia della neutralita&#39; della rete [Parte 1] - 14 maggio 2009, Roma</title>
      <link>https://sindro.me/it/posts/2009-05-16-the-conceptual-foundations-and-the-economics-network-neutrality-rome/</link>
      <pubDate>Sat, 16 May 2009 02:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-05-16-the-conceptual-foundations-and-the-economics-network-neutrality-rome/</guid>
      <description>&lt;p&gt;&lt;a&#xA;href=&#34;http://www.fub.it/events/seminari/neutralitadellareteeaspettisocioeconomici&#34;&gt;http://www.fub.it/events/seminari/neutralitadellareteeaspettisocioeconomici&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.nnsquad.it/&#34;&gt;http://www.nnsquad.it/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2&gt;Neutralita&#39; &amp;#8211; &lt;em&gt;&amp;#8220;L&#39;economia si sta dematerializzando&amp;#8221;&lt;/em&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Sollecitato da un messaggio Facebook inviato il 6 maggio 2009 a tutti i&#xA;membri del gruppo &lt;a&#xA;href=&#34;http://www.facebook.com/group.php?gid=56353912528&#34;&gt;nnsquad.it &amp;#8211; per&#xA;un Internet neutrale&lt;/a&gt;, mi sono imbattuto in questo evento interessante a cui&#xA;ho avuto l&#39;occasione di partecipare, tenutosi nel &lt;a&#xA;href=&#34;http://en.wikipedia.org/wiki/Palazzo_Pallavicini-Rospigliosi&#34;&gt;seicentesco&#xA;palazzo Rospigliosi&lt;/a&gt; nel cuore di &lt;a&#xA;href=&#34;http://en.wikipedia.org/wiki/Rome&#34;&gt;Roma&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align:center;&#34;&gt;&lt;img src=&#34;https://sindro.me/posts/2009-05-16-the-conceptual-foundations-and-the-economics-network-neutrality-rome/IMG_0261.jpg&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;&#xA;&lt;p style=&#34;text-align:right;&#34;&gt;&lt;em&gt;Nella foto: &lt;a&#xA;href=&#34;http://kennethrcarter.com/vita/&#34;&gt;Kenneth Carter&lt;/a&gt; e &lt;a&#xA;href=&#34;http://blog.quintarelli.it/&#34;&gt;Stefano Quintarelli&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;continue&#34;&gt;&lt;/a&gt; La premessa era promettente: tecnici, dottori di&#xA;ricerca, portavoce delle telco e politici che parlano di internet, della sua&#xA;liberta&#39; innata, e di come conciliarla in una societa&#39; dove le misure di&#xA;sicurezza &lt;a href=&#34;http://sniffo.org/node/22&#34;&gt;aumentano costantemente&lt;/a&gt;, e&#xA;come tali contrastano con un mondo virtuale senza barriere di sorta. Inoltre,&#xA;e&#39; un&#39;arena virtuale in cui tutto puo&#39; essere gratuito, &lt;a&#xA;href=&#34;http://thepiratebay.org/&#34;&gt;non solo le informazioni&lt;/a&gt;, e le persone ci&#xA;si stanno abituando.&lt;/p&gt;&#xA;&lt;p&gt;Il primo intervento e&#39; stato tenuto dal prof. &lt;a&#xA;href=&#34;http://kennethrcarter.com/vita/&#34;&gt;Kenneth Carter&lt;/a&gt;, direttamente dalla&#xA;Columbia University, e ha fatto da ampia introduzione alle tematiche esplorate&#xA;(e talvolta ripetute) durante la giornata. In breve, la grande domanda e&#39;: gli&#xA;ISP possono offrire diversi gradi di performance su diversi siti (o far pagare&#xA;per performance migliori), permettere/bloccare/sovraccaricare l&#39;accesso a certi&#xA;siti o da certi dispositivi?&lt;/p&gt;&#xA;&lt;p&gt;Filtrare l&#39;accesso ai servizi di rete e&#39; una pratica comune su internet,&#xA;come lo e&#39; filtrare i contenuti, e non necessariamente cattiva: pensate ai&#xA;filtri antispam per prevenire &lt;span class=&#34;caps&#34;&gt;UCE&lt;/span&gt; e ai filtri dei&#xA;&lt;span class=&#34;caps&#34;&gt;NAP&lt;/span&gt; per prevenire e mitigare attacchi &lt;span&#xA;class=&#34;caps&#34;&gt;DDOS&lt;/span&gt;, o ai sistemi antivirus/IDS. Anche i piani di&#xA;servizio differenziati, dove ottieni latenza piu&#39; bassa o maggiore banda in&#xA;upload pagando di piu&#39;, sono accettabili, perche&#39; la &amp;#8220;qualita&#39; del&#xA;servizio&amp;#8221; non e&#39; un valore assoluto: dipende dal tipo di servizi che&#xA;l&#39;utente usa. E nella maggior parte dei casi, l&#39;utente non coglie (e nemmeno&#xA;ha bisogno di cogliere) i concetti che ci stanno dietro.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Facebook Developer Garage 2009, Milano (Italia)</title>
      <link>https://sindro.me/it/posts/2009-04-26-facebook-developers-garage-2009-milan-italy/</link>
      <pubDate>Sun, 26 Apr 2009 23:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-04-26-facebook-developers-garage-2009-milan-italy/</guid>
      <description>&lt;div style=&#34;float:left; margin:8px 10px 4px 0;&#34;&gt;&lt;img src=&#34;https://sindro.me/posts/2009-04-26-facebook-developers-garage-2009-milan-italy/logofb.jpg&#34;/&gt;&lt;/div&gt;&#xA;&lt;p&gt;Questo e&#39; il mio resoconto del primo &lt;a&#xA;href=&#34;http://fb.mikamai.com/programma/&#34;&gt;facebook developer garage&#xA;italiano&lt;/a&gt;, tenutosi a Milano il &lt;a&#xA;href=&#34;http://www.facebook.com/event.php?eid=70473476888&#34;&gt;23 aprile 2009&lt;/a&gt;,&#xA;e ospitato da &lt;a href=&#34;http://mikamai.com/&#34;&gt;mikamai&lt;/a&gt;. La mattina e&#39; stata&#xA;dedicata alle sessioni per sviluppatori, il pomeriggio a quelle di marketing&#xA;&amp;#38; comunicazione. Alcuni video dell&#39;evento sono disponibili &lt;a&#xA;href=&#34;http://qik.com/istintoweb&#34;&gt;qui&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h1&gt;Mattina: sessione sviluppatori&lt;/h1&gt;&#xA;&lt;p&gt;Il primo talk e&#39; stato tenuto da &lt;a&#xA;href=&#34;http://www.facebook.com/people/James-Leszczenski/4800348&#34;&gt;James&#xA;Leszczenski&lt;/a&gt;, ingegnere di Facebook, che ha presentato la visione, la&#xA;missione e i valori della &lt;a&#xA;href=&#34;http://developers.facebook.com/connect.php&#34;&gt;piattaforma connect&lt;/a&gt;.&#xA;Interessante, oltre al talk in se&#39;, per la partecipazione del pubblico: la&#xA;platea era profondamente interessata a sapere &lt;a&#xA;href=&#34;http://wiki.developers.facebook.com/index.php/Authenticating_Users_with_Facebook_Connect&#34;&gt;quali&#xA;informazioni si ottengono&lt;/a&gt; da Facebook, &lt;a&#xA;href=&#34;http://wiki.developers.facebook.com/index.php/Facebook_Connect_Policies&#34;&gt;come&#xA;gestirle&lt;/a&gt;, e quali strumenti connect fornisce per &lt;a&#xA;href=&#34;http://wiki.developers.facebook.com/index.php/Linking_Accounts_and_Finding_Friends&#34;&gt;collegare&#xA;identita&#39; e trovare amici&lt;/a&gt; su un sito web abilitato.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a name=&#34;continue&#34;&gt;&lt;/a&gt; Piu&#39; tardi ho avuto occasione di chiedere a &lt;a&#xA;href=&#34;http://www.facebook.com/people/James-Leszczenski/4800348&#34;&gt;James&lt;/a&gt; se&#xA;FB fosse incline o meno ad adottare &lt;a href=&#34;http://openid.net/&#34;&gt;OpenID&lt;/a&gt;&#xA;come metodo di autenticazione: ha detto che connect e OpenID permettono&#xA;entrambi agli utenti di avere credenziali di login uniche per accedere a piu&#39;&#xA;siti, ma connect permette anche di sfruttare la potenza del social graph di&#xA;Facebook per consentire agli utenti di comunicare e condividere informazioni.&#xA;Quindi, la risposta breve e&#39; &amp;#8220;no&amp;#8221;. Allora gli ho proposto di&#xA;implementare OpenID su FB stesso, cosi&#39; che connect potesse diventare davvero&#xA;un superset di OpenID, ma ha risposto che &amp;#8220;come azienda, queste sono&#xA;decisioni difficili e non posso dare una risposta adesso&amp;#8221;. Comprensibile&#xA;:).&lt;/p&gt;&#xA;&lt;blockquote&gt; &lt;strong&gt;&lt;span class=&#34;caps&#34;&gt;AGGIORNAMENTO&lt;/span&gt;&lt;/strong&gt;: il 27&#xA;aprile 2009, TechCrunch riporta di &lt;em&gt;aver sentito&lt;/em&gt; che Facebook &lt;a&#xA;href=&#34;http://www.techcrunch.com/2009/04/27/facebook-first-big-site-to-really-embrace-openid/&#34;&gt;abbraccera&#39;&#xA;OpenID&lt;/a&gt; come mezzo per autenticare gli utenti. Ottime notizie, in attesa di&#xA;una dichiarazione ufficiale da Facebook! :) &lt;/blockquote&gt;&#xA;&lt;p&gt;Il secondo talk e&#39; stato tenuto da &lt;a href=&#34;http://acinapura.com/&#34;&gt;Vincenzo&#xA;Acinapura&lt;/a&gt;, che ha descritto gli strumenti di base per creare&#xA;un&#39;applicazione sulla piattaforma Facebook. Ha esplorato le tecnologie che ci&#xA;stanno dietro (&lt;a&#xA;href=&#34;http://wiki.developers.facebook.com/index.php/XFBML&#34;&gt;&lt;span&#xA;class=&#34;caps&#34;&gt;XFBML&lt;/span&gt;&lt;/a&gt;, &lt;a&#xA;href=&#34;http://wiki.developers.facebook.com/index.php/FQL&#34;&gt;&lt;span&#xA;class=&#34;caps&#34;&gt;FQL&lt;/span&gt;&lt;/a&gt;, &lt;a&#xA;href=&#34;http://wiki.developers.facebook.com/index.php/FBJS&#34;&gt;&lt;span&#xA;class=&#34;caps&#34;&gt;FBJS&lt;/span&gt;&lt;/a&gt;), i principali &lt;a&#xA;href=&#34;http://wiki.developers.facebook.com/index.php/Anatomy_of_a_Facebook_App&#34;&gt;punti&#xA;di integrazione&lt;/a&gt; all&#39;interno della piattaforma (notifiche, publisher, ...) e&#xA;ha mostrato codice d&#39;esempio per implementare alcuni dei tag &lt;span&#xA;class=&#34;caps&#34;&gt;FBML&lt;/span&gt; piu&#39; usati (&lt;code&gt;fb:comments&lt;/code&gt;,&#xA;&lt;code&gt;fb:share&lt;/code&gt;, &lt;code&gt;fb:feed&lt;/code&gt;, &lt;a&#xA;href=&#34;http://wiki.developers.facebook.com/wiki/FBML&#34;&gt;e cosi&#39; via&lt;/a&gt;).&#xA;Infine ha ricordato l&#39;importanza di automatizzare il deploy delle applicazioni,&#xA;e ha suggerito di usare &lt;a href=&#34;http://www.capify.org/&#34;&gt;capistrano&lt;/a&gt; per&#xA;farlo.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Un pappagallo geek che twitta</title>
      <link>https://sindro.me/it/posts/2009-04-21-a-tweeting-geeky-parrot/</link>
      <pubDate>Tue, 21 Apr 2009 23:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-04-21-a-tweeting-geeky-parrot/</guid>
      <description>&lt;p&gt;Sto cercando un nuovo animale domestico. &lt;a href=&#34;https://nhaima.org/&#34; target=&#34;_blank&#34;&gt;Noi&lt;/a&gt; abbiamo&#xA;gia&amp;rsquo; due &lt;a href=&#34;http://www.vimeo.com/3562500&#34; target=&#34;_blank&#34;&gt;gatti adorabili&lt;/a&gt;, ma dopo aver sentito&#xA;quanto puo&amp;rsquo; essere viva una casa con tanti animali (dopo una bella serata al&#xA;maniero de &lt;a href=&#34;http://www.2spaghi.it/ristoranti/lazio/lt/latina/il-quadrato/&#34; target=&#34;_blank&#34;&gt;il&#xA;quadrato&lt;/a&gt;),&#xA;sto pensando di prenderne un altro da crescere e amare.&lt;/p&gt;&#xA;&lt;p&gt;Ma che razza di geek sarei, se non ci aggiungessi un tocco nerd? Quindi, dopo&#xA;l&amp;rsquo;&lt;a href=&#34;http://www.youtube.com/watch?v=205dHV55XWQ&#34; target=&#34;_blank&#34;&gt;interfaccia cervello-twitter&lt;/a&gt; di&#xA;cui si e&amp;rsquo; &lt;a href=&#34;http://blog.wired.com/wiredscience/2009/04/braintweet.html&#34; target=&#34;_blank&#34;&gt;parlato&#xA;tanto&lt;/a&gt; &lt;a href=&#34;http://search.twitter.com/search?max_id=1578807214&amp;amp;page=1&amp;amp;q=brain&amp;#43;twitter&amp;#43;interface&#34; target=&#34;_blank&#34;&gt;negli&#xA;ultimi&#xA;giorni&lt;/a&gt;,&#xA;stasera un pensiero abbastanza casuale e divertente mi e&amp;rsquo; balenato in testa:&#xA;che ne dite di prendere un &lt;a href=&#34;http://en.wikipedia.org/wiki/African_Grey_Parrot&#34; target=&#34;_blank&#34;&gt;pappagallo&#xA;cenerino&lt;/a&gt;, crescerlo,&#xA;insegnargli a parlare, e lasciarlo&amp;hellip; be&amp;rsquo;, &lt;strong&gt;twittare&lt;/strong&gt; le sue parole usando un&#xA;sistema di riconoscimento vocale piazzato accanto alla sua gabbia e collegato a&#xA;un account twitter? Quanto sarebbe assurdo? :D&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://sindro.me/posts/2009-04-21-a-tweeting-geeky-parrot/tweeting_parrot.jpg&#34;&#xA;    alt=&#34;Tweeting parrot&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;A pensarci bene, la cosa piu&amp;rsquo; strana e&amp;rsquo; che nel 2009, un pappagallo che twitta&#xA;mi fa pensare a un &amp;ldquo;pappagallo con accesso a twitter&amp;rdquo;&amp;hellip; e non a un uccello&#xA;che emette il suo verso naturale. Sono troppo sovraccaricato da questa storia&#xA;dei social media? Dovrei prendermi una vacanza?&lt;/p&gt;&#xA;&lt;p&gt;Direi di si&amp;rsquo;. Ma non adesso. Il primo &lt;a href=&#34;http://fb.mikamai.com/&#34; target=&#34;_blank&#34;&gt;Facebook Developer Garage&#xA;italiano&lt;/a&gt; e&amp;rsquo; tra appena due giorni&amp;hellip; :)&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Immagine per gentile concessione di&#xA;&lt;a href=&#34;http://www.flickr.com/photos/ozjulian/2933796654/&#34; target=&#34;_blank&#34;&gt;@ozjulian&lt;/a&gt; su&#xA;&lt;a href=&#34;http://flickr.com/&#34; target=&#34;_blank&#34;&gt;flickr&lt;/a&gt;, CC BY-NC-SA&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Avviso a tutti i dipendenti</title>
      <link>https://sindro.me/it/posts/2009-03-02-notice-to-all-employees/</link>
      <pubDate>Tue, 24 Feb 2009 13:06:14 -0500</pubDate>
      <guid>https://sindro.me/it/posts/2009-03-02-notice-to-all-employees/</guid>
      <description>&lt;p&gt;(Letto su &lt;a href=&#34;http://lists.grok.org.uk/pipermail/full-disclosure/2009-February/068153.html&#34; target=&#34;_blank&#34;&gt;full-disclosure&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Subject: Notice to all employees&#xA;Date: Tue, 24 Feb 2009 13:06:14 -0500&#xA;&#xA;Dear employees,&#xA;&#xA;Due to the current financial situation caused by the slowdown&#xA;of the economy, Management has decided to implement a scheme&#xA;to put workers of 40 years of age and above on early retirement.&#xA;&#xA;This scheme will be known as RAPE (Retire Aged People Early).&#xA;&#xA;Persons selected to be RAPED can apply to management to be eligible&#xA;for the SHAFT scheme (Special Help After Forced Termination).&#xA;Persons who have been RAPED and SHAFTED will be reviewed under the&#xA;SCREW programme (Scheme Covering Retired Early Workers). A person&#xA;may be RAPED once, SHAFTED twice and SCREWED as many times as&#xA;Management deems appropriate.&#xA;&#xA;Persons who have been RAPED can only get AIDS (Additional Income&#xA;for Dependents &amp;amp; Spouse) or HERPES (Half Earnings for Retired&#xA;Personnel Early Severance).&#xA;&#xA;Obviously, persons who have AIDS or HERPES will not be SHAFTED or&#xA;SCREWED any further by Management.&#xA;&#xA;Persons who are not RAPED and are staying on will receive as much&#xA;SHIT (Special High-Intensity Training) as possible. Management&#xA;has always prided itself on the amount of SHIT it gives employees.&#xA;&#xA;Sincerely,&#xA;The Management&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(Spero vi siate divertiti :D C&amp;rsquo;e&amp;rsquo; anche una &lt;a href=&#34;http://seclists.org/fulldisclosure/2009/Mar/1&#34; target=&#34;_blank&#34;&gt;versione USAF&lt;/a&gt; del 1997).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Implementare una galleria immagini con facebox e will_paginate</title>
      <link>https://sindro.me/it/posts/2009-02-21-implementing-an-image-gallery-using-facebox-and-will_paginate/</link>
      <pubDate>Sat, 21 Feb 2009 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-02-21-implementing-an-image-gallery-using-facebox-and-will_paginate/</guid>
      <description>&lt;p&gt;Su &lt;a href=&#34;http://www.visitacsa.it/&#34; target=&#34;_blank&#34;&gt;VisitaCSA&lt;/a&gt; stiamo usando&#xA;&lt;a href=&#34;http://famspam.com/facebox&#34; target=&#34;_blank&#34;&gt;facebox&lt;/a&gt; di&#xA;&lt;a href=&#34;http://errtheblog.com/&#34; target=&#34;_blank&#34;&gt;defunkt&lt;/a&gt; per mostrare le &lt;a href=&#34;http://www.visitacsa.it/luoghi/chiesa-di-santantonio&#34; target=&#34;_blank&#34;&gt;immagini dei&#xA;luoghi&lt;/a&gt; in grande.&#xA;Facebox e&amp;rsquo; un ottimo lightbox generico, perche&amp;rsquo; e&amp;rsquo; veloce, stabile, si basa su&#xA;&lt;a href=&#34;http://jquery.com/&#34; target=&#34;_blank&#34;&gt;jQuery&lt;/a&gt; e ha un&amp;rsquo;API davvero pulita.&lt;/p&gt;&#xA;&lt;p&gt;Ma avevamo bisogno di qualcosa in piu&amp;rsquo; di un semplice lightbox di&#xA;visualizzazione, perche&amp;rsquo; volevamo che i nostri utenti potessero navigare&#xA;facilmente tra tutte le immagini, possibilmente senza modificare facebox. La&#xA;soluzione si e&amp;rsquo; rivelata piuttosto semplice, grazie anche al plugin&#xA;&lt;a href=&#34;http://github.com/mislav/will_paginate/wikis&#34; target=&#34;_blank&#34;&gt;&lt;code&gt;will_paginate&lt;/code&gt;&lt;/a&gt; che stavamo&#xA;gia&amp;rsquo; usando. In sostanza si tratta di avere:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Un model Photo, attrezzato con il metodo &lt;code&gt;has_attachment&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Route per le risorse photos (&lt;code&gt;map.resources :photos, :only =&amp;gt; :show&lt;/code&gt; in&#xA;&lt;code&gt;config/routes.rb&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Un metodo &lt;code&gt;show&lt;/code&gt; nel controller &lt;code&gt;PhotosController&lt;/code&gt; che chiama &lt;code&gt;.paginate&lt;/code&gt;&#xA;con un argomento &lt;code&gt;:per_page&lt;/code&gt; di 1&lt;/li&gt;&#xA;&lt;li&gt;Una vista HTML per la risorsa photo, con i controlli di paginazione usando&#xA;l&amp;rsquo;helper &lt;code&gt;will_paginate&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Del codice jQuery che si aggancia ai link di paginazione e fa caricare al&#xA;browser via AJAX la foto successiva direttamente nel facebox.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Ecco il codice rilevante, semplificato rispetto a quello effettivamente&#xA;online, perche&amp;rsquo; il model photo e&amp;rsquo; in realta&amp;rsquo; polimorfico (usa STI) e diverse&#xA;collezioni sono gestite dal photos controller (foto, volantini, ecc.) per&#xA;diversi model, con miniature diverse :P.&lt;/p&gt;&#xA;&lt;h3 id=&#34;model-appmodelsphotorb&#34;&gt;Model [app/models/photo.rb]&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Photo&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ActiveRecord&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;Base&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  has_attachment &lt;span style=&#34;color:#e6db74&#34;&gt;:storage&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;:file_system&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;:path_prefix&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;public/photos&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;:processor&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ImageScience&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;:thumbs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; { &lt;span style=&#34;color:#e6db74&#34;&gt;:thumb&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;600x800&amp;#39;&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;controller-appcontrollersphotos_controllerrb&#34;&gt;Controller [app/controllers/photos_controller.rb]&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PhotosController&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ApplicationController&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  layout &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  before_filter &lt;span style=&#34;color:#e6db74&#34;&gt;:find_place&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# The photo gallery core is here&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;show&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    photo &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;Photo&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;find(params&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;:id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    page &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; params&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;:page&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; @place&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;photos&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;index(photo) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @photos &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; @place&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;photos&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;paginate(&lt;span style=&#34;color:#e6db74&#34;&gt;:per_page&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;:page&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; page)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @photo &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; @photos&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;first&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;find_place&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @place &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;Place&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;find(params&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;:place_id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;vista-appviewsphotosshowhtmlerb&#34;&gt;Vista [app/views/photos/show.html.erb]&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;photo&amp;#34;&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;style&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;width: &amp;lt;%= photo_width(@photo) %&amp;gt;px; text-align: center;&amp;#34;&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;lt;&lt;/span&gt;%= next_photo_link_for @photo, :in =&amp;gt; @photos %&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;lt;&lt;/span&gt;%=h @photo.title %&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;lt;&lt;/span&gt;%= will_paginate @photos, :prev_label =&amp;gt; &amp;#39;&amp;amp;nbsp;&amp;#39;, :next_label =&amp;gt; &amp;#39;&amp;amp;nbsp;&amp;#39; %&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La gem &lt;a href=&#34;http://imagesize.rubyforge.org/&#34; target=&#34;_blank&#34;&gt;&lt;code&gt;image_size&lt;/code&gt;&lt;/a&gt; e&amp;rsquo; necessaria per&#xA;consentire a facebox di allinearsi correttamente al centro della finestra.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Il bordo lampeggiante offuscato</title>
      <link>https://sindro.me/it/posts/2009-02-20-the-blinking-border/</link>
      <pubDate>Fri, 20 Feb 2009 04:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-02-20-the-blinking-border/</guid>
      <description>&lt;p&gt;Questo e&amp;rsquo; il pezzo di codice Javascript offuscato che implementa il bordo rosso&#xA;e carica &lt;a href=&#34;https://www.google.com/analytics&#34; target=&#34;_blank&#34;&gt;Google Analytics&lt;/a&gt; sul &lt;a href=&#34;https://segmentation-fault.core-dumped.info/&#34; target=&#34;_blank&#34;&gt;sito&#xA;Segmentation Fault&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;theLoadSequenceToRunAfterTheDocumentHasBeenLoaded&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// The blinking border&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;//&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt;){&lt;span style=&#34;color:#75715e&#34;&gt;// (C) 2009 vjt &amp;lt;segmentation-fault@core-dumped.info&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;){&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;(document.&lt;span style=&#34;color:#a6e22e&#34;&gt;getElementById&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;));};&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ee&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;n&amp;#39;&lt;/span&gt;),&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s&amp;#39;&lt;/span&gt;),&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;),&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;e&amp;#39;&lt;/span&gt;)],&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;;&lt;span style=&#34;color:#a6e22e&#34;&gt;setInterval&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(){&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ee&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;;&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ee&lt;/span&gt;[&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;]) ;&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;) {&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;className&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;className&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;;}},&lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;08&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;/* .oOo.oOo.oOo. ^^^^^ -*** * *** *** *******- **/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  })((&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;23&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;42&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;PI&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; Math.&lt;span style=&#34;color:#a6e22e&#34;&gt;E&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;42&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/*166.81*/&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// Google analytics&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;//&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt;{&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pt&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;_gat&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;_getTracker&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;UA-1123581-3&amp;#34;&lt;/span&gt;); &lt;span style=&#34;color:#a6e22e&#34;&gt;pt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;_trackPageview&lt;/span&gt;();}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;catch&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;$aMarvellousErrorThatWontBeDisplayedOnTheUserBrowserAtAll&lt;/span&gt;){}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&lt;span style=&#34;color:#75715e&#34;&gt;// end of theLoadSequenceToRunAfterTheDocumentHasBeenLoaded routine&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Per me sembra una melodia contorta, o una poesia complicata. E&amp;rsquo; ingegneria&#xA;malvagia, lo so. Ma mentre lo scrivevo, provavo esattamente la stessa&#xA;sensazione di quando scrivevo versi in rima. Le parole di&#xA;&lt;a href=&#34;http://whytheluckystiff.net/&#34; target=&#34;_blank&#34;&gt;_why&lt;/a&gt; sono assolutamente pertinenti qui:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;finche&amp;rsquo; i programmatori non smetteranno di comportarsi come se l&amp;rsquo;offuscamento&#xA;fosse moralmente pericoloso, non saranno artisti, solo ragazzini che non&#xA;vogliono che il loro cibo si tocchi.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Puoi vedere il codice con l&amp;rsquo;evidenziazione della sintassi su&#xA;&lt;a href=&#34;https://gist.github.com/vjt/67277&#34; target=&#34;_blank&#34;&gt;github&lt;/a&gt;, oppure con la funzione &amp;ldquo;Visualizza&#xA;sorgente&amp;rdquo; del tuo browser mentre sei sul &lt;a href=&#34;https://segmentation-fault.core-dumped.info/&#34; target=&#34;_blank&#34;&gt;sito&#xA;segfault&lt;/a&gt;. :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Come creare un mirror statico del sito opensource.org</title>
      <link>https://sindro.me/it/posts/2009-02-10-how-to-mirror-a-static-copy-of-the-opensource-org-website/</link>
      <pubDate>Tue, 10 Feb 2009 18:08:34 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-02-10-how-to-mirror-a-static-copy-of-the-opensource-org-website/</guid>
      <description>&lt;p&gt;Attualmente mantengo il &lt;a href=&#34;http://opensource.antifork.org/&#34; target=&#34;_blank&#34;&gt;mirror italiano&lt;/a&gt; del&#xA;sito web della &lt;a href=&#34;http://opensource.org/&#34; target=&#34;_blank&#34;&gt;Open Source Initiative&lt;/a&gt;, e oggi mi sono&#xA;reso conto che lo script che avevo scritto qualche mese fa non stava facendo&#xA;bene il suo lavoro&amp;hellip; perche&amp;rsquo; i file CSS non venivano scaricati affatto,&#xA;causando un rendering del sito piuttosto sgradevole.&lt;/p&gt;&#xA;&lt;p&gt;Per fare il mirror di opensource.org sto usando il caro vecchio &lt;a href=&#34;http://www.gnu.org/software/wget/&#34; target=&#34;_blank&#34;&gt;GNU&#xA;Wget&lt;/a&gt; con -r &amp;ndash;mirror e compagnia bella.&#xA;Mentre il buon vecchio &lt;strong&gt;wget&lt;/strong&gt; scarica tutti i prerequisiti di ogni pagina&#xA;definiti nel sorgente HTML, non supporta le regole CSS @import e non scarica le&#xA;immagini referenziate nei CSS con le regole url().&lt;/p&gt;&#xA;&lt;p&gt;Comunque, niente che non si possa risolvere con un po&amp;rsquo; di regex-fu: ecco&#xA;perche&amp;rsquo; &lt;a href=&#34;http://gist.github.com/61474&#34; target=&#34;_blank&#34;&gt;condivido lo script&lt;/a&gt; che sto usando&#xA;attualmente per fare il mirror del sito opensource.org, sperando che generi un&#xA;nuovo mirror o qualche spunto su come fare meglio questo lavoro :).&lt;/p&gt;&#xA;&lt;p&gt;Lo script: &lt;a href=&#34;http://gist.github.com/61474&#34; target=&#34;_blank&#34;&gt;&lt;code&gt;update_opensource_mirror.sh&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Buon divertimento! :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Evoluzione continua</title>
      <link>https://sindro.me/it/posts/2009-02-03-continuous-evolution/</link>
      <pubDate>Tue, 03 Feb 2009 14:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-02-03-continuous-evolution/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;releases$ du -sch *&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;7.6M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081209132347&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;7.0M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081209133350&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;7.6M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081209144343&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;7.1M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081209145133&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;7.1M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081209151843&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;7.1M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081209163013&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;7.1M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081209175506&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;7.1M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081209183553&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;7.1M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081211122939&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.6M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081212190026&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.3M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081212201852&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.3M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081212203943&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.3M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081212205430&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.3M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081213014847&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.3M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081213020357&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.4M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081213163428&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.4M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081213173633&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.4M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081213184749&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.5M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081214171239&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.5M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081214174058&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.5M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081215122638&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.5M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081215152408&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.5M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081215171627&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.5M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081215200430&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.5M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081215205042&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.5M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081215235659&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.5M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081216000247&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.5M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081216164820&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.6M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081216200524&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.6M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081216203210&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.6M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081216210540&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.6M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081217193227&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.6M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081218174354&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.6M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081218191803&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.6M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081219152005&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.6M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081219152907&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.6M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081219155519&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;9.0M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081219193433&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.6M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081221173121&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;8.6M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081221174616&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;19M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081222035552&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;17M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081222040347&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;17M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081222055349&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081222055633&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;14M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081222055923&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;16M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081222142851&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081228152551&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;60M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20081228163752&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090105191748&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090106064448&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090106184425&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090106185528&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090106204053&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090106230526&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;14M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090107001206&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090107175246&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090107175846&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090107193832&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090107194313&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090107204045&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090107204438&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090109164048&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090109185118&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090112031351&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;11M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090113104259&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090113152213&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090113171628&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090113194223&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090113194415&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;20M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090113201919&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090114180311&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090114185735&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090115071510&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090115102500&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090115131810&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090115155944&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090115183612&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090116121148&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090116125514&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090116131343&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090116170318&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090116171428&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;24M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090116173349&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;16M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090118204113&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;14M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090120151836&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090122150700&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090122155359&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;18M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090122160455&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;78M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090125055603&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;48M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090126114022&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;14M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090126143048&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090126160105&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090126160400&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090126165339&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;22M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090126170159&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090126193506&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090126194637&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090126194859&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090127142057&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;14M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090127155906&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;52M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090127180739&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;13M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090129144356&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090201141300&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090201151016&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;13M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090202114805&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;12M    &lt;span style=&#34;color:#ae81ff&#34;&gt;20090203113750&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Affascinante, nondimeno.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Un miglioramento a permalink_fu: permettere la modifica dei permalink e inviare redirect HTTP al volo</title>
      <link>https://sindro.me/it/posts/2009-01-29-a-permalink_fu-improvement-allow-modification-of-permalinks-and-create-redirects-on-the-fly/</link>
      <pubDate>Thu, 29 Jan 2009 19:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-01-29-a-permalink_fu-improvement-allow-modification-of-permalinks-and-create-redirects-on-the-fly/</guid>
      <description>&lt;p&gt;Un altro spin-off dal sito &lt;a href=&#34;http://www.visitacsa.it/&#34; target=&#34;_blank&#34;&gt;www.visitacsa.it&lt;/a&gt;: un&#xA;miglioramento a&#xA;&lt;a href=&#34;http://github.com/technoweenie/permalink_fu/tree/master&#34; target=&#34;_blank&#34;&gt;permalink_fu&lt;/a&gt; che&#xA;permette &lt;strong&gt;permalink dinamici&lt;/strong&gt;. Lo so che è un&#xA;&lt;a href=&#34;http://en.wikipedia.org/wiki/Oxymoron&#34; target=&#34;_blank&#34;&gt;ossimoro&lt;/a&gt;, perché i permalink dovrebbero&#xA;essere&amp;hellip; beh&amp;hellip; permanenti! E siccome i &lt;a href=&#34;http://www.searchlores.org/main.htm&#34; target=&#34;_blank&#34;&gt;motori di&#xA;ricerca&lt;/a&gt; li indicizzano, non dovrebbero&#xA;mai cambiare. Ma cosa succede quando pubblichi &lt;em&gt;qualcosa&lt;/em&gt;, il tuo permalink&#xA;viene generato con permalink_fu usando il &lt;em&gt;titolo&lt;/em&gt; del tuo post, e dopo un&#xA;paio di giorni vuoi cambiare il titolo, e anche il permalink sotto il quale il&#xA;post è accessibile?&lt;/p&gt;&#xA;&lt;p&gt;Seguendo la&#xA;&lt;a href=&#34;http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html&#34; target=&#34;_blank&#34;&gt;specifica&lt;/a&gt;, la tua&#xA;applicazione dovrebbe inviare uno status HTTP &lt;em&gt;301 moved permanently&lt;/em&gt; quando si&#xA;accede al vecchio permalink e fare redirect del client verso il nuovo Uniform&#xA;Resource Locator. Questo è più o meno quello che fa la mia modifica a&#xA;&lt;em&gt;permalink_fu&lt;/em&gt;: ogni volta che gli attributi del tuo post vengono modificati, il&#xA;permalink precedente e quello nuovo vengono salvati nel database, e puoi&#xA;abilitare il tuo controller a generare redirect &lt;em&gt;302 moved temporarily&lt;/em&gt; quando&#xA;necessario. In altre parole, controlla se l&amp;rsquo;URL richiesto è un vecchio&#xA;permalink e reindirizza automagicamente il client verso quello nuovo.&lt;/p&gt;&#xA;&lt;p&gt;Tutto avviene dietro le quinte, e il plugin ha anche dei comodi task rake per&#xA;impostare il model Redirect e le migration associate. E puoi anche cambiarne&#xA;il nome, ovviamente! :)&lt;/p&gt;&#xA;&lt;p&gt;Il codice &lt;em&gt;302&lt;/em&gt; è stato scelto perché lo status code &lt;em&gt;301 permanent&lt;/em&gt; &lt;a href=&#34;http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;amp;amp;answer=40132&#34; target=&#34;_blank&#34;&gt;ha&#xA;effetti piuttosto dirompenti sui motori di&#xA;ricerca&lt;/a&gt;,&#xA;ma ulteriori discussioni sono benvenute.&lt;/p&gt;&#xA;&lt;p&gt;Dai un&amp;rsquo;occhiata al &lt;a href=&#34;http://github.com/vjt/permalink_fu/tree/master&#34; target=&#34;_blank&#34;&gt;mio repository su&#xA;GitHub&lt;/a&gt;, leggi il&#xA;&lt;a href=&#34;http://github.com/vjt/permalink_fu/blob/b8d979f28c9795389cc65e9670a3529f805618dc/README&#34; target=&#34;_blank&#34;&gt;README&lt;/a&gt;&#xA;che contiene la documentazione delle funzionalità aggiunte, e guarda il codice!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Il plugin jQuery ajax-upload-fu</title>
      <link>https://sindro.me/it/posts/2009-01-29-the-jquery-ajax-upload-fu-plugin-2/</link>
      <pubDate>Thu, 29 Jan 2009 09:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-01-29-the-jquery-ajax-upload-fu-plugin-2/</guid>
      <description>&lt;p&gt;Di recente ho scritto un &lt;a href=&#34;http://gist.github.com/54441&#34; target=&#34;_blank&#34;&gt;plug-in jQuery&lt;/a&gt; che&#xA;permette l&amp;rsquo;upload di file via &lt;strong&gt;AJAX&lt;/strong&gt; senza usare un pulsante file input&#xA;fisso. Raggiunge il suo scopo installando un handler OnMouseMove sugli elementi&#xA;selezionati e spostando il pulsante input sotto il cursore del mouse.&lt;/p&gt;&#xA;&lt;p&gt;La citazione che ha ispirato questo codice e&amp;rsquo;: &amp;ldquo;Se Maometto non va alla&#xA;montagna, la montagna va da Maometto&amp;rdquo;, il contrario del &lt;a href=&#34;http://en.wikipedia.org/wiki/If_the_mountain_won%27t_come_to_Muhammad&#34; target=&#34;_blank&#34;&gt;proverbio piu&#39;&#xA;noto&lt;/a&gt; :).&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;EDIT 2023: ATTENZIONE: questi link sono scaduti :-(&lt;/em&gt;&#xA;E&amp;rsquo; stato estratto dalla codebase JavaScript dell&amp;rsquo;&lt;a href=&#34;http://www.visitacsa.it/&#34; target=&#34;_blank&#34;&gt;applicazione Visita&#xA;CSA&lt;/a&gt;, guarda il&#xA;&lt;a href=&#34;http://gist.github.com/54441&#34; target=&#34;_blank&#34;&gt;gist&lt;/a&gt; per maggiori informazioni, e dai&#xA;un&amp;rsquo;occhiata &lt;a href=&#34;http://www.visitacsa.it/javascripts/business-registration.js&#34; target=&#34;_blank&#34;&gt;al codice dell&amp;rsquo;app live per un esempio di&#xA;utilizzo&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Ecco il codice sorgente:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//  ~ JavaScript Kung-FU, with an excess chunky bacon dose! ~&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// This plugin allows seamless ajax file uploads without having&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// a fixed file input button. It achieves this by installing an&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// OnMouseMove handler over the interested elements, and moving&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// the input button under the cursor. &amp;lt;&amp;lt;If Muhammad won&amp;#39;t go to&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// the the mountain, the mountain will come to Muhammad.&amp;gt;&amp;gt; :-).&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// This approach is needed on the majority of browser, except&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Safari, on which the coder is allowed to trigger a &amp;#34;click&amp;#34; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// event onto an input type=file element. On other browsers,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// you can not, that&amp;#39;s why the complicated mousemove approach&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// was chosen.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Either way, when the value of the input type=file changes,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// handlers are disabled, and a user-provided callback is then&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// called (passed via the &amp;#34;upload&amp;#34; option). Handlers are then&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// re-enabled again when the upload succeeds or fails.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// IE has additional problems, because, quite unexplicably,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// when submitting a form that causes a page load, the change&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// event on the file input is triggered AGAIN, thus triggering&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// a new file upload. To circumvent this, you can pass a &amp;#34;linked&amp;#34; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// option, that contains the jQuery selector of the form, and&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// whenever an input under this form is hovered, ajax upload&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// handlers are temporarily cleared and thus the spurious form&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// submission.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// The jquery Form plugin is a perfect companion of this one,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// because of its .ajaxSubmit method. Have a look at its home&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// page: http://malsup.com/jquery/form/.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Have fun!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// - vjt@openssl.it&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fn&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ajaxFormUpload&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;positioning&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;top&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;left&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;position&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;absolute&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;cursor&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;pointer&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;z-index&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#ajax_upload&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;css&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;positioning&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;input[type=file]&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;input&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;css&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;extend&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;positioning&lt;/span&gt;, { &lt;span style=&#34;color:#a6e22e&#34;&gt;width&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;10px&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;opacity&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;font-size&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0px&amp;#39;&lt;/span&gt; }));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;hovering_element&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;elements&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;handler&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;event_&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;browser&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;safari&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;event_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;click&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;handler&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;hovering_element&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;input&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;click&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;event_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;mousemove&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;handler&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;event&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;hovering_element&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;css&lt;/span&gt;({ &lt;span style=&#34;color:#a6e22e&#34;&gt;left&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;event&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pageX&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;top&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;event&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pageY&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;enable&lt;/span&gt;()  { &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;elements&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;bind&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;event_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;handler&lt;/span&gt;);   }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;disable&lt;/span&gt;() { &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;elements&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;unbind&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;event_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;handler&lt;/span&gt;); }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;input&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;change&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;element&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;hovering_element&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;!&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;element&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;disable&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;upload&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;element&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;form&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;enable&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;enable&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;linked&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(document).&lt;span style=&#34;color:#a6e22e&#34;&gt;ready&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;linked&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;input&amp;#39;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;mouseover&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;() { &lt;span style=&#34;color:#a6e22e&#34;&gt;hovering_element&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;; });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Puoi trovarlo su &lt;a href=&#34;http://gist.github.com/54441&#34; target=&#34;_blank&#34;&gt;github&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Il significato dello sfondo predefinito di Windows 7.</title>
      <link>https://sindro.me/it/posts/2009-01-28-the-windows-7-default-wallpaper-meaning/</link>
      <pubDate>Wed, 28 Jan 2009 15:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2009-01-28-the-windows-7-default-wallpaper-meaning/</guid>
      <description>&lt;p&gt;Quando installi la &lt;a href=&#34;http://www.microsoft.com/windows/windows-7/beta-download.aspx&#34; target=&#34;_blank&#34;&gt;beta per sviluppatori di Windows&#xA;7&lt;/a&gt;, dopo il&#xA;solito ciclo di 3 riavvii, vieni accolto dalla seguente immagine:&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://sindro.me/posts/2009-01-28-the-windows-7-default-wallpaper-meaning/win7_siamese_fight_fish.png&#34;&#xA;    alt=&#34;The Betta Siamese Fighting Fish&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;È il &lt;a href=&#34;http://en.wikipedia.org/wiki/Betta_fish&#34; target=&#34;_blank&#34;&gt;pesce combattente del Siam&lt;/a&gt;, un&#xA;bellissimo pesce tropicale, ma con una caratteristica interessante: è&#xA;estremamente aggressivo. La credenza popolare vuole che due maschi si combattano&#xA;anche in natura, ma non è proprio vero. Questa credenza deriva dal comportamento&#xA;del pesce in acquario, dove &lt;em&gt;il vincitore attacca continuamente il perdente,&#xA;causandone alla fine la morte&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Ora, pensate all&amp;rsquo;ecosistema software come a un acquario. E pensate a Microsoft&#xA;dentro questo acquario. L&amp;rsquo;ultima release del sistema operativo Microsoft ha un&#xA;pesce aggressivo come skin predefinita, ed è solo in questo acquario. E non c&amp;rsquo;è&#xA;posto per nessun altro: combatteranno qualsiasi avversario, anche se della&#xA;stessa specie.&lt;/p&gt;&#xA;&lt;p&gt;Quel che è incerto è&amp;hellip; ci riusciranno, o no? :). Staremo a vedere!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Giocare con le Audio Units tramite AU Lab per ottenere il surround 5.1</title>
      <link>https://sindro.me/it/posts/2008-12-12-playing-with-audio-units-via-au-lab-to-gain-5-1-surround/</link>
      <pubDate>Fri, 12 Dec 2008 01:38:31 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-12-12-playing-with-audio-units-via-au-lab-to-gain-5-1-surround/</guid>
      <description>&lt;figure&gt;&lt;img src=&#34;https://sindro.me/posts/2008-12-12-playing-with-audio-units-via-au-lab-to-gain-5-1-surround/au_lab_powa.jpg&#34;&#xA;    alt=&#34;au lab pwnz&#34; width=&#34;600&#34; height=&#34;375&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;La sessione a destra mostra un documento aperto su un dispositivo audio aggregato tra &lt;a href=&#34;http://www.cycling74.com/products/soundflower&#34; target=&#34;_blank&#34;&gt;soundflower&lt;/a&gt; (2 canali) e una Creative SBLive con 6 canali: il flower riceve l&amp;rsquo;input audio da iTunes e lo indirizza ai canali della scheda, usando tutti e 6 gli speaker.&lt;/p&gt;&#xA;&lt;p&gt;Sono stati aggiunti degli effetti per migliorare l&amp;rsquo;esperienza audio (dettagli qui: &lt;a href=&#34;http://www.rottenbrains.com/?p=232&#34; target=&#34;_blank&#34;&gt;http://www.rottenbrains.com/?p=232&lt;/a&gt;). La sessione a destra usa anche AUNetSend per streamare l&amp;rsquo;audio verso la sessione a sinistra, connessa agli speaker integrati del MacBook.&lt;/p&gt;&#xA;&lt;p&gt;Risultato: audio stereo riprodotto su otto canali. Le Audio Units sono uno strumento davvero potente, ben scritto e ben funzionante.&lt;/p&gt;&#xA;&lt;p&gt;[grazie a nextie per avermi detto di &lt;code&gt;AUNetSend&lt;/code&gt; e &lt;code&gt;AUNetReceive&lt;/code&gt;]&lt;/p&gt;&#xA;&lt;h2 id=&#34;aggiornamento-19-12-2008&#34;&gt;AGGIORNAMENTO 19-12-2008&lt;/h2&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://sindro.me/posts/2008-12-12-playing-with-audio-units-via-au-lab-to-gain-5-1-surround/au_lab_powa_II.jpg&#34;&#xA;    alt=&#34;au lab pwnz again&#34; width=&#34;600&#34; height=&#34;375&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Miglioramento: non c&amp;rsquo;è bisogno di usare NetSend e NetReceive per riprodurre su 8 speaker: un dispositivo aggregato composto da Soundflower 2ch, la SBLive USB a 6 canali e l&amp;rsquo;uscita Built-in è sufficiente!&lt;/p&gt;&#xA;&lt;p&gt;Inoltre, nota il nuovo bus: è necessario perché l&amp;rsquo;effetto AUMatrixReverb aggiunto al canale centrale per migliorare la stereofonia dell&amp;rsquo;audio in realtà occupa due canali, e quindi si sovrappone a quello successivo (il LFE). Ma applicare l&amp;rsquo;effetto a un bus non presenta questo effetto collaterale.&lt;/p&gt;&#xA;&lt;p&gt;Risultato: eccellente 7.1&lt;/p&gt;</description>
    </item>
    <item>
      <title>La fine dell&#39;anonimato online</title>
      <link>https://sindro.me/it/posts/2008-12-01-the-end-of-online-anonymity/</link>
      <pubDate>Mon, 01 Dec 2008 22:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-12-01-the-end-of-online-anonymity/</guid>
      <description>&lt;p&gt;Esattamente le parole che mi girano per la testa in questi giorni:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://web.archive.org/web/20090212172116/http://www.readwriteweb.com/archives/the_end_of_online_anonymity.php&#34; target=&#34;_blank&#34;&gt;http://www.readwriteweb.com/archives/the_end_of_online_anonymity.php&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Quando raggiungeremo il punto in cui l&amp;rsquo;anonimato online sarà finito, invece&#xA;di poter essere chi siamo davvero, il fatto di essere diventati così&#xA;consapevoli di essere sempre registrati, fotografati, tracciati e seguiti,&#xA;avrà in realtà creato una personalità leggermente alterata. Come i&#xA;concorrenti dei reality TV, l&amp;rsquo;atto di essere osservati cambierà il nostro&#xA;comportamento. L&amp;rsquo;immagine del nostro brand personale diventerà la nostra&#xA;identità pubblica e quindi la nostra identità.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Direi che queste parole descrivono perfettamente l&amp;rsquo;&amp;ldquo;effetto Facebook&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Voi che ne pensate?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Far funzionare davvero(tm) il CCacheServer Kerberos Ticket su OSX</title>
      <link>https://sindro.me/it/posts/2008-11-12-making-the-ccacheserver-kerberos-ticket-server-actually-work-tm-on-osx/</link>
      <pubDate>Wed, 12 Nov 2008 21:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-11-12-making-the-ccacheserver-kerberos-ticket-server-actually-work-tm-on-osx/</guid>
      <description>&lt;p&gt;Se ti stai chiedendo &lt;strong&gt;perché&lt;/strong&gt; il demone &lt;code&gt;CCacheServer&lt;/code&gt;, che tiene in memoria&#xA;i ticket Kerberos ottenuti tramite &lt;code&gt;kinit(1)&lt;/code&gt;, NON parte&amp;hellip; è a causa di un&#xA;bug &lt;strong&gt;strano&lt;/strong&gt; riguardante il &lt;code&gt;LimitLoadToSessionType&lt;/code&gt; specificato nel .plist&#xA;dell&amp;rsquo;agent, che si trova in&#xA;&lt;code&gt;/System/Library/LaunchAgents/edu.mit.kerberos.CCacheServer.plist&lt;/code&gt; sui sistemi&#xA;OSX 10.5.&lt;/p&gt;&#xA;&lt;p&gt;Devi semplicemente commentare queste due righe:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-plaintext&#34; data-lang=&#34;plaintext&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;key&amp;gt;LimitLoadToSessionType&amp;lt;/key&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;string&amp;gt;Background&amp;lt;/string&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;E poi o fai&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;launchctl load /System/Library/LaunchAgents/edu.mit.kerberos.CCacheServer.plist&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;oppure riavvii il sistema ;).&lt;/p&gt;&#xA;&lt;p&gt;CCacheServer verrà poi istanziato quando fai un kinit:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kinit&#xA;Please enter the password for vjt@DOMAIN.LOCAL:&#xA;&#xA;$ klist&#xA;Kerberos 5 ticket cache: &amp;#39;API:Initial default ccache&amp;#39;&#xA;Default principal: vjt@DOMAIN.LOCAL&#xA;&#xA;Valid Starting     Expires            Service Principal&#xA;11/12/08 20:59:35  11/13/08 06:59:14  krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL&#xA;    renew until 11/19/08 20:59:35&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Il bug è strano perché la chiave &lt;code&gt;LimitLoadToSessionType&lt;/code&gt; dovrebbe in realtà&#xA;istruire launchd ad avviare automaticamente il demone e farlo girare una volta&#xA;per &lt;a href=&#34;http://developer.apple.com/technotes/tn2005/tn2083.html#TABLAUNCHAGENTSUBTYPES&#34; target=&#34;_blank&#34;&gt;ogni utente&#xA;loggato&lt;/a&gt;,&#xA;quando kinit ne richiede i servizi. Ma se la chiave è impostata nel &lt;code&gt;.plist&lt;/code&gt;,&#xA;un launchctl load su di esso fallisce con &amp;ldquo;nothing found to load&amp;rdquo;. Assurdo!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inviare i messaggi di commit git a Lighthouse in batch</title>
      <link>https://sindro.me/it/posts/2008-10-22-pushing-git-commit-messages-to-lighthouse-in-a-batch/</link>
      <pubDate>Wed, 22 Oct 2008 15:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-10-22-pushing-git-commit-messages-to-lighthouse-in-a-batch/</guid>
      <description>&lt;p&gt;Se usi l&amp;rsquo;integrazione con Lighthouse fornita da GitHub, dalle pagine &amp;ldquo;Admin&amp;rdquo;&#xA;del tuo repository git, potresti esserti imbattuto in un difetto: ogni&#xA;changeset su Lighthouse appare come se fosse stato fatto dall&amp;rsquo;utente Lighthouse&#xA;che ha configurato l&amp;rsquo;integrazione su GitHub.&lt;/p&gt;&#xA;&lt;p&gt;Questo succede perché Lighthouse usa il token API per collegare gli autori dei&#xA;changeset agli utenti LH, e non va bene quando non sei l&amp;rsquo;unico a fare commit :-).&lt;/p&gt;&#xA;&lt;p&gt;Una soluzione semplice è usare un hook post-commit, come descritto&#xA;&lt;a href=&#34;http://github.com/guides/integrating-git-commit-messages-in-lighthouse&#34; target=&#34;_blank&#34;&gt;qui&lt;/a&gt;,&#xA;ma non è soddisfacente perché significa che ogni volta che esegui git commit&#xA;dalla tua console, il messaggio del commit diventa pubblico, e se fai&#xA;&lt;code&gt;--amend&lt;/code&gt; o &lt;code&gt;reset --soft&lt;/code&gt; dell&amp;rsquo;index dovrai andare su Lighthouse a cancellare&#xA;il changeset.&lt;/p&gt;&#xA;&lt;p&gt;Una soluzione molto più furba è pushare tutte le revisioni modificate quando&#xA;le si pusha su GitHub: ho &lt;a href=&#34;http://gist.github.com/53917&#34; target=&#34;_blank&#34;&gt;modificato l&amp;rsquo;hook post-commit&#xA;originale&lt;/a&gt; e l&amp;rsquo;ho installato accanto al comando&#xA;&lt;code&gt;git&lt;/code&gt; in &lt;code&gt;$(dirname which git)/git-lh&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Questo mi dà un nuovo comando &lt;code&gt;git lh&lt;/code&gt; che recupera la revisione HEAD corrente&#xA;da GitHub usando &lt;code&gt;refs/heads/master&lt;/code&gt; e fa POST di ogni changeset tra quella&#xA;revisione e il tip corrente nel working tree verso Lighthouse.&lt;/p&gt;&#xA;&lt;p&gt;Quindi, se esegui &lt;code&gt;git lh&lt;/code&gt; prima di &lt;code&gt;git push&lt;/code&gt;, ogni modifica che stai&#xA;pushando su GitHub andrà anche su Lighthouse.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;AGGIORNAMENTO&lt;/strong&gt;: Un semplice script bash tipo:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git lh &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; git push&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;salvato come &lt;code&gt;git-lh-push&lt;/code&gt; ti risparmia di digitare due comandi quando vuoi fare push :).&lt;/p&gt;&#xA;&lt;p&gt;Buon divertimento!&lt;/p&gt;&#xA;&lt;p&gt;Riferimenti:&lt;/p&gt;&#xA;&lt;p&gt;lo &lt;a href=&#34;http://gist.github.com/53917&#34; target=&#34;_blank&#34;&gt;script git-lh su GitHub&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Il barattolo di maionese e due bicchieri di vino</title>
      <link>https://sindro.me/it/posts/2008-10-20-the-mayonnaise-recipient-and-two-glasses-of-wine/</link>
      <pubDate>Mon, 20 Oct 2008 16:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-10-20-the-mayonnaise-recipient-and-two-glasses-of-wine/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2008-10-20-the-mayonnaise-recipient-and-two-glasses-of-wine/mayonnaise-jar.png&#34; alt=&#34;Il barattolo di maionese e due bicchieri di vino&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Quando ti sembra di avere troppe cose da gestire nella vita, quando 24 ore in&#xA;un giorno non sono abbastanza, ricordati del vaso della Maionese e dei due&#xA;bicchieri di vino&amp;hellip;&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;Un professore stava davanti alla sua classe di filosofia e aveva davanti alcuni&#xA;oggetti.&lt;/p&gt;&#xA;&lt;p&gt;Quando la classe incominciò a zittirsi, prese un grande barattolo di maionese&#xA;vuoto e lo iniziò a riempire di palline da golf. Chiese poi agli studenti se il&#xA;barattolo fosse pieno e costoro risposero che lo fosse.&lt;/p&gt;&#xA;&lt;p&gt;Il professore allora prese un barattolo di ghiaia e la rovesciò nel barattolo&#xA;di maionese. Lo scosse leggermente e i sassolini si posizionarono negli spazi&#xA;vuoti, tra le palline da golf. Chiese di nuovo agli studenti se il barattolo&#xA;fosse pieno e questi concordarono che lo fosse.&lt;/p&gt;&#xA;&lt;p&gt;Il professore prese allora una scatola di sabbia e la rovesciò, aggiungendola&#xA;nel barattolo; ovviamente la sabbia si sparse ovunque all&amp;rsquo;interno. Chiese&#xA;ancora una volta se il barattolo fosse pieno e gli studenti risposero con un&#xA;unanime &amp;ldquo;Si!&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Il professore estrasse quindi due bicchieri di vino da sotto la cattedra e&#xA;aggiunse il loro intero contenuto nel barattolo, andando cosi effettivamente a&#xA;riempire gli spazi vuoti nella sabbia. Gli studenti risero.&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Ora&amp;rdquo;, disse il professore non appena la risata si fu placata, &amp;ldquo;voglio che&#xA;consideriate questo barattolo come la vostra Vita. Le palle da golf sono le&#xA;cose importanti: la vostra famiglia, i vostri bambini, la vostra salute, i&#xA;vostri amici e le vostre Passioni; le cose per cui, se anche tutto il resto&#xA;andasse perduto e solo queste rimanessero, la vostra vita continuerebbe ad&#xA;essere piena. I sassolini sono le altre cose che hanno importanza, come il&#xA;vostro lavoro, la casa, la macchina&amp;hellip; La sabbia è tutto il resto: le piccole&#xA;cose.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Il miglior post che abbia mai scritto</title>
      <link>https://sindro.me/it/posts/2008-07-08-the-best-blog-post-i-ve-ever-wrote/</link>
      <pubDate>Tue, 08 Jul 2008 16:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-07-08-the-best-blog-post-i-ve-ever-wrote/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;javascript, klingon, javascript, javascript, IE, IE, IE, sucks, optimize, optimize,&#xA;user experience, web2.0, harnessing collective intelligence, love, hate, sex, ruby,&#xA;rails, rails, rails, admin, REST, javascript, javascript, IE IE IE SUCKS, premature&#xA;optimization, assets, google API, love, love, hate, hate, air, trips, hide, toggle,&#xA;show, ryan, twenty-three times the pain, javascript, IE, ruby, rails, CSS, spacing,&#xA;position:absolute, love, love, love, love, too much, too much, too much.&#xA;&#xA;number 42.&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Chuck Norris in Ruby</title>
      <link>https://sindro.me/it/posts/2008-06-13-chuck-norris-in-ruby/</link>
      <pubDate>Fri, 13 Jun 2008 12:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-06-13-chuck-norris-in-ruby/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://tempe.st/&#34; target=&#34;_blank&#34;&gt;intinig&lt;/a&gt; ha portato il potere del calcio rotante di&#xA;&lt;a href=&#34;http://uncyclopedia.wikia.com/wiki/Chuck_Norris&#34; target=&#34;_blank&#34;&gt;Chuck&lt;/a&gt; in Ruby! Dategli&#xA;un&amp;rsquo;occhiata&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/intinig/chuck_norris/tree/master/chuck_norris.rb&#34; target=&#34;_blank&#34;&gt;https://github.com/intinig/chuck_norris/tree/master/chuck_norris.rb&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;E&amp;rsquo; un proof-of-concept, ovviamente :).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ho già Mac OS Snow Leopard 10.6</title>
      <link>https://sindro.me/it/posts/2008-06-07-i-ve-already-got-mac-os-snow-leopard-10-6/</link>
      <pubDate>Sat, 07 Jun 2008 13:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-06-07-i-ve-already-got-mac-os-snow-leopard-10-6/</guid>
      <description>&lt;p&gt;E questa è la prova:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2008-06-07-i-ve-already-got-mac-os-snow-leopard-10-6/os_x_10.6.png&#34; alt=&#34;Snow Leopard&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Ovviamente, se conosci &lt;code&gt;SystemVersion.plist&lt;/code&gt;, salta pure questo post ;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cosa dice la tua .bash_history?</title>
      <link>https://sindro.me/it/posts/2008-06-03-what-does-your-bash_history-say/</link>
      <pubDate>Tue, 03 Jun 2008 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-06-03-what-does-your-bash_history-say/</guid>
      <description>&lt;p&gt;Un &lt;a href=&#34;http://www.linkedin.com/in/easter&#34; target=&#34;_blank&#34;&gt;mio amico&lt;/a&gt; mi ha detto che sui blog&#xA;tecnici gira un nuovo meme: mostrare i comandi più usati, partendo dalla&#xA;history della shell:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;history | &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;awk &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{a[$2]++}END{for(i in a){print a[i] &amp;#34; &amp;#34; i}}&amp;#39;&lt;/span&gt; | &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sort -rn | head -15&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Io ho 20 volte la dimensione di default della bash history (10k righe), quindi&#xA;i risultati saranno interessanti. Uso anche la funzione di timestamp della&#xA;history, quindi ho aggiunto un piccolo sed al codice per eliminare i timestamp.&lt;/p&gt;&#xA;&lt;p&gt;Vediamo un po&#39;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vjt@voyager:~/code*$* history | &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; sed &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s#^[ 0-9\[\/\:]*\]\([^ ]*\).*#\1#&amp;#39;&lt;/span&gt; |  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; awk &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{a[$1]++}END{for(i in a){print a[i] &amp;#34; &amp;#34; i}}&amp;#39;&lt;/span&gt; | &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; sort -rn | head -15&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;928&lt;/span&gt; l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;577&lt;/span&gt; ssh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;389&lt;/span&gt; ping&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;381&lt;/span&gt; cd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;300&lt;/span&gt; dig&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;259&lt;/span&gt; telnet&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;153&lt;/span&gt; sudo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;126&lt;/span&gt; ifconfig&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;125&lt;/span&gt; whois&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;113&lt;/span&gt; ps&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;96&lt;/span&gt; svn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;91&lt;/span&gt; cat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;73&lt;/span&gt; fg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;68&lt;/span&gt; vi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;61&lt;/span&gt; ..&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Già, faccio un SACCO di ls, l in realtà è ls -alFGs (sono su Darwin). Questa&#xA;lista rivela le mie abitudini recenti, perché sto scrivendo meno codice e&#xA;gestendo di più (niente gcc, niente irb, un sacco di dig &amp;amp; whois). &lt;code&gt;svn&lt;/code&gt; è&#xA;ancora lì, ovviamente ;). &lt;code&gt;ssh&lt;/code&gt; significa che questi risultati andrebbero&#xA;aggregati con le history delle altre macchine su cui mi loggo&amp;hellip; ma quello è&#xA;argomento per un altro post ;).&lt;/p&gt;&#xA;&lt;p&gt;Quali sono i tuoi risultati?&lt;/p&gt;&#xA;&lt;p&gt;Postali qui! :D&lt;/p&gt;&#xA;&lt;h2 id=&#34;aggiornamento-2008-06-03&#34;&gt;AGGIORNAMENTO 2008-06-03&lt;/h2&gt;&#xA;&lt;p&gt;Dato che le mie abitudini recenti sono più di coding che di scrittura di documentazione, ho rieseguito l&amp;rsquo;analisi della history&amp;hellip; e questi sono i nuovi risultati:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1796 l&#xA;981 svn&#xA;705 ssh&#xA;693 cd&#xA;666 ping&#xA;402 vi&#xA;356 ifconfig&#xA;352 telnet&#xA;321 dig&#xA;315 sudo&#xA;283 fg&#xA;240 grep&#xA;188 ..&#xA;183 cat&#xA;157 ps&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;aggiornamento-2009-02-20&#34;&gt;AGGIORNAMENTO 2009-02-20&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;5427 l&#xA;4379 git&#xA;3128 svn&#xA;2812 vi&#xA;2105 cd&#xA;1408 ping&#xA;1392 fg&#xA;1328 ssh&#xA;935 ifconfig&#xA;893 grep&#xA;890 sudo&#xA;733 rake&#xA;653 cat&#xA;554 ..&#xA;535 ruby&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;aggiornamento-2009-05-24&#34;&gt;AGGIORNAMENTO 2009-05-24&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;7374 l&#xA;5041 git&#xA;3265 vi&#xA;3131 svn&#xA;2753 cd&#xA;1881 ssh&#xA;1763 ping&#xA;1618 fg&#xA;1101 sudo&#xA;1100 ifconfig&#xA;977 grep&#xA;867 cat&#xA;767 rake&#xA;721 telnet&#xA;671 ..&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;aggiornamento-2010-06-01&#34;&gt;AGGIORNAMENTO 2010-06-01&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;20517 git&#xA;7794 l&#xA;1906 cd&#xA;1631 rg&#xA;1518 vi&#xA;1108 rake&#xA;1041 cat&#xA;1010 ruby&#xA;790 sudo&#xA;754 fg&#xA;676 make&#xA;670 script/console&#xA;626 rm&#xA;496 ping&#xA;474 ..&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;aggiornamento-2012-07-23&#34;&gt;AGGIORNAMENTO 2012-07-23&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;3367 l&#xA;2685 ssh&#xA;1289 cd&#xA;1013 curl&#xA;976 git&#xA;857 sudo&#xA;815 ping&#xA;526 telnet&#xA;521 ps&#xA;497 cat&#xA;472 port&#xA;422 fg&#xA;400 vi&#xA;274 rm&#xA;259 dig&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Rimuovere un link trigger di lightwindow dopo una chiamata AJAX</title>
      <link>https://sindro.me/it/posts/2008-05-21-remove-a-lightwindow-trigger-link-after-an-ajax-call/</link>
      <pubDate>Wed, 21 May 2008 17:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-05-21-remove-a-lightwindow-trigger-link-after-an-ajax-call/</guid>
      <description>&lt;p&gt;Ecco, questo è il risultato di 2 giorni di testate contro il muro con lightwindow:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Index: public/javascripts/lightwindow.js, line 444&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;_removeLink&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;removed&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// remove it from the links array&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;links&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;links&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;reject&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;link&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;link&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;removed&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// remove it from the gallery links array&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;gallery&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;_getGalleryInfo&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;removed&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;rel&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;klass&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gallery&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gallery&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;galleries&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;klass&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;galleries&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;klass&lt;/span&gt;][&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;]) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;galleries&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;klass&lt;/span&gt;][&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;galleries&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;klass&lt;/span&gt;][&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;].&lt;span style=&#34;color:#a6e22e&#34;&gt;reject&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;link&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;link&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;removed&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Chiama questa funzione dal tuo template .rjs, qualcosa tipo:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;page &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;myLightWindow._removeLink($(&amp;#39;element&amp;#39;).down(&amp;#39;a.lightwindow&amp;#39;));&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Più dettagli a seguire, quando questo lavoro sarà completo ;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Orinatoi ad Amsterdam</title>
      <link>https://sindro.me/it/posts/2008-05-05-urinals-in-amsterdam/</link>
      <pubDate>Mon, 05 May 2008 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-05-05-urinals-in-amsterdam/</guid>
      <description>&lt;p&gt;Via &lt;a href=&#34;http://www.reddit.com/r/pics/comments/6hwlj/urinals_in_amsterdam_pic/&#34; target=&#34;_blank&#34;&gt;reddit&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2008-05-05-urinals-in-amsterdam/schipol_fly.jpg&#34; alt=&#34;Orinatoio di Schiphol con la mosca&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sappiamo ancora farlo</title>
      <link>https://sindro.me/it/posts/2008-05-03-we-still-can-do-it/</link>
      <pubDate>Sat, 03 May 2008 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-05-03-we-still-can-do-it/</guid>
      <description>&lt;p&gt;Beh, a quanto pare non ho motivo di essere paranoico per la mia età: so ancora&#xA;andare in inline come facevo (ogni giorno) quando ero un po&amp;rsquo; più giovane :).&lt;/p&gt;&#xA;&lt;p&gt;Il primo maggio, festa dei lavoratori, Sam mi ha letteralmente trascinato fuori&#xA;di casa, lontano dal computer, e siamo andati a pattinare. È stata una&#xA;giornata &lt;strong&gt;fantastica&lt;/strong&gt;, abbiamo pattinato un sacco e scattato delle belle&#xA;foto.&lt;/p&gt;&#xA;&lt;p&gt;Ma quelle davvero belle sono state scattate quando &lt;a href=&#34;http://ndstr.com/&#34; target=&#34;_blank&#34;&gt;ndstr&lt;/a&gt;&#xA;ci ha beccati. È di gran lunga il miglior fotografo che tu possa incontrare, e&#xA;ovviamente il mio preferito (dai un&amp;rsquo;occhiata al &lt;a href=&#34;http://ndstr.com/&#34; target=&#34;_blank&#34;&gt;suo sito&lt;/a&gt;!).&lt;/p&gt;&#xA;&lt;p&gt;Anche lui è stato un pattinatore, quindi sa benissimo come e quando scattare&#xA;per tirare fuori il massimo dai tuoi trick :). Eccone due, che ritraggono me e&#xA;Sam mentre diamo il meglio!&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2008-05-03-we-still-can-do-it/sk8_-_sam_vjt_1st_may.jpg&#34; alt=&#34;Foto di skating&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;È stato divertente. Davvero divertente. Grazie Sam per avermi portato fuori di casa :D.&lt;/p&gt;&#xA;&lt;p&gt;Oh, e non dimenticare di visitare il mio &lt;a href=&#34;http://devjt.deviantart.com/&#34; target=&#34;_blank&#34;&gt;deviantArt&lt;/a&gt;,&#xA;e guarda &lt;a href=&#34;http://devjt.deviantart.com/art/disaster-soul-slide-84469475&#34; target=&#34;_blank&#34;&gt;questa&#xA;qui&lt;/a&gt; :D&lt;/p&gt;</description>
    </item>
    <item>
      <title>Odissea 10.5.2: un piccolo viaggio tra i servizi e componenti di Mac OS X</title>
      <link>https://sindro.me/it/posts/2008-02-15-10-5-2-odissey-a-small-journey-in-mac-os-x-services-and-components/</link>
      <pubDate>Fri, 15 Feb 2008 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-02-15-10-5-2-odissey-a-small-journey-in-mac-os-x-services-and-components/</guid>
      <description>&lt;p&gt;Beh, sono davvero contento di OSX 10.5.2. Anche se non sono uno di quelli che&#xA;ha insultato Apple per la barra dei menu traslucida che a tutti fa schifo&amp;hellip;&#xA;anzi, a me piace. Non mi interessa il tool di TM nella barra dei menu, perché&#xA;non ho (ancora) comprato la fighissima Time Capsule, mi piace lo spinner nel&#xA;menu Airport e, soprattutto, apprezzo molto gli aggiornamenti al&#xA;&lt;code&gt;BluetoothSCOAudioDriver.kext&lt;/code&gt; che pilota il mio auricolare bluetooth.&lt;/p&gt;&#xA;&lt;p&gt;Spotlight sembra anche più veloce ad ogni aggiornamento, e sono un utente&#xA;pesante di Spotlight, quindi questo mi rende davvero felice. Grazie ingegneri&#xA;Apple!&lt;/p&gt;&#xA;&lt;p&gt;Ma torniamo al tema: perché odissea? Perché seguendo i &lt;a href=&#34;https://sindro.me/posts/2008-01-31-how-to-keep-your-apple-notebook-battery-healthy/&#34;&gt;miei consigli sulla&#xA;batteria&lt;/a&gt;,&#xA;sono riuscito a far SPEGNERE il mio MacBook2,1 mentre era al 74% della fase&#xA;&amp;ldquo;Scrittura file&amp;rdquo; del combo update&amp;hellip; risultato: un sistema completamente&#xA;distrutto, come ogni geek potrebbe immaginare :). Apple aveva aggiornato&#xA;alcune librerie, e al riavvio semplicemente niente funzionava, e la console&#xA;Darwin era piena di &lt;strong&gt;tonnellate&lt;/strong&gt; di messaggi di errore.&lt;/p&gt;&#xA;&lt;p&gt;Il tipico fanb^Wutente Apple avrebbe semplicemente archiviato e reinstallato&#xA;il sistema, ma ehi, io sono un geek orgoglioso! So per esperienza che le&#xA;situazioni di disaster recovery sono le migliori per imparare qualcosa su un&#xA;sistema operativo, perché devi aiutare il sistema ad avviarsi, tirando su i&#xA;servizi a mano, e trovare un modo per riapplicare il combo update senza usare&#xA;la comoda interfaccia Aqua.&lt;/p&gt;&#xA;&lt;p&gt;Per fortuna, su OSX ogni GUI ha la sua controparte CLI, seguendo le migliori&#xA;&amp;ldquo;linee guida UNIX&amp;rdquo; di separazione degli interessi e architettura ben&#xA;progettata. Inoltre, OSX porta questo approccio un passo avanti, seguendo i&#xA;migliori principi di ingegneria del software, dove le funzionalità sono&#xA;implementate nei Framework e sia la GUI che la CLI le utilizzano. Ben fatto!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Maps (parte I de &#34;Il Googling&#34;)</title>
      <link>https://sindro.me/it/posts/2008-02-14-google-maps-part-i-of-the-googling/</link>
      <pubDate>Thu, 14 Feb 2008 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-02-14-google-maps-part-i-of-the-googling/</guid>
      <description>&lt;p&gt;Ti sei mai preoccupato di Google Maps e di quanto quell&amp;rsquo;app riesca a vedere&#xA;della tua casa, della tua auto, dei tuoi vicini e&amp;hellip; forse&amp;hellip; di te stesso?!?&lt;/p&gt;&#xA;&lt;p&gt;Beh, forse hai ragione! Dai un&amp;rsquo;occhiata a questo video dei &lt;a href=&#34;http://www.youtube.com/user/thevacationeers&#34; target=&#34;_blank&#34;&gt;the&#xA;vacationeers&lt;/a&gt;&amp;hellip;&lt;/p&gt;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/fPgV6-gnQaE?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;;D&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Come mantenere in salute la batteria del tuo notebook Apple</title>
      <link>https://sindro.me/it/posts/2008-01-31-how-to-keep-your-apple-notebook-battery-healthy/</link>
      <pubDate>Thu, 31 Jan 2008 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-01-31-how-to-keep-your-apple-notebook-battery-healthy/</guid>
      <description>&lt;p&gt;3 semplici regole:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;NON lasciare il caricatore collegato quando la batteria è carica, neanche quando vai a dormire.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;LASCIA che si scarichi completamente: quando lo usi aspetta che arrivi allo 0%, quando vai a dormire lascialo lì; quando ti sveglierai e lo aprirai, un bel resume da suspend to disk ti darà il buongiorno. OSX FTW.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Monitorala e fai vedere i contatori di performance di OSX ai tuoi amici (immagini per gentile concessione di&#xA;&lt;a href=&#34;http://www.coconut-flavour.com/coconutbattery/&#34; target=&#34;_blank&#34;&gt;CoconutBattery.app&lt;/a&gt; e System&#xA;Profiler.app)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2008-01-31-how-to-keep-your-apple-notebook-battery-healthy/healthy_battery_2.png&#34; alt=&#34;Salute della batteria&#34;&gt;&#xA;&lt;img src=&#34;https://sindro.me/posts/2008-01-31-how-to-keep-your-apple-notebook-battery-healthy/healthy_battery_cycle_count.png&#34; alt=&#34;Cicli della batteria&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>urllib2 di Python2.4 rotto di default su Solaris Express 5.11</title>
      <link>https://sindro.me/it/posts/2008-01-25-python2-4-s-urllib2-broken-by-default-on-solaris-express-5-11/</link>
      <pubDate>Fri, 25 Jan 2008 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-01-25-python2-4-s-urllib2-broken-by-default-on-solaris-express-5-11/</guid>
      <description>&lt;p&gt;Mentre installavo allegramente i prerequisiti per compilare un&amp;rsquo;applicazione su&#xA;&lt;a href=&#34;http://sun.com/software/solaris&#34; target=&#34;_blank&#34;&gt;Solaris 11&lt;/a&gt;, ho apprezzato il fatto di&#xA;trovare &lt;a href=&#34;http://selenic.com/mercurial&#34; target=&#34;_blank&#34;&gt;Mercurial&lt;/a&gt; già installato nel sistema&#xA;base&amp;hellip; tranne per un GROSSO problema: la digest authentication era rotta. Ho&#xA;fatto un &lt;code&gt;tcpdump&lt;/code&gt; del traffico scambiato tra il client Mercurial e il server&#xA;CGI e ho visto che non veniva inviato nessun header Authorization, e&#xA;ovviamente il server si rifiutava di servire il repository hg.&lt;/p&gt;&#xA;&lt;p&gt;Prima di reinstallare Python, magari da sorgente e sostituendo l&amp;rsquo;installazione&#xA;di default oppure tenendo affiancate due versioni diverse, con le conseguenti&#xA;seccature e sporcizia nel sistema, ho provato un patch davvero minuscolo a&#xA;urllib2.py che&amp;hellip; con mio divertimento, ha risolto il problema:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;--- urllib2.py~ Fri Jan 25 02:35:59 2008&#xA;+++ urllib2.py  Fri Jan 25 03:27:52 2008&#xA;@@ -815,7 +815,7 @@&#xA;             auth_val = &amp;#39;Digest %s&amp;#39; % auth&#xA;             if req.headers.get(self.auth_header, None) == auth_val:&#xA;                 return None&#xA;-            req.add_unredirected_header(self.auth_header, auth_val)&#xA;+            req.add_header(self.auth_header, auth_val)&#xA;             resp = self.parent.open(req)&#xA;             return resp&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Non sono un ca**o di esperto Python (ma il linguaggio è interessante), quindi&#xA;non chiedetemi PERCHÉ funziona: ho semplicemente seguito il commento di&#xA;&lt;code&gt;add_header&lt;/code&gt; che diceva &amp;ldquo;questo metodo è utile per aggiungere header di&#xA;autenticazione&amp;rdquo; e ho sostituito il metodo &lt;code&gt;unredirected_header&lt;/code&gt; con il primo.&#xA;Non ho proprio idea del perché con urllib2 di Python2.5 &amp;ldquo;tutto funziona&amp;rdquo; anche&#xA;con quel metodo; qualcosa deve essere rotto da qualche altra parte. Un diff&#xA;tra le due urllib non mi ha dato niente, dovrei davvero imparare Python prima&#xA;o poi.&lt;/p&gt;&#xA;&lt;p&gt;Non ho trovato nessuna informazione googlando parole chiave come &amp;laquo;solaris&#xA;&amp;ldquo;http {authorization,authentication}&amp;rdquo; {urllib2,python} {broken,not working}&#xA;mercurial&amp;raquo; (shell interpolation intesa), quindi spero che questo post sia&#xA;utile a qualcuno ;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Active Gibberish</title>
      <link>https://sindro.me/it/posts/2008-01-22-active-gibberish/</link>
      <pubDate>Tue, 22 Jan 2008 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-01-22-active-gibberish/</guid>
      <description>&lt;p&gt;&lt;strong&gt;AGGIORNAMENTO: non ti serve questo codice, perché a partire dalla versione 2.2 di Rails il supporto alla localizzazione è integrato.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;localizzazione-dei-messaggi-di-errore-di-active-record&#34;&gt;Localizzazione dei messaggi di errore di Active Record&lt;/h2&gt;&#xA;&lt;p&gt;Oggi ho dovuto rispondere a una delle domande su cui ogni sviluppatore Rails&#xA;non anglofono prima o poi inciampa&amp;hellip; come localizzare i messaggi di errore di&#xA;AR per mostrarli in modo decente a un cliente che non parla inglese ;).&lt;/p&gt;&#xA;&lt;p&gt;Prima di tutto, grazie all&amp;rsquo;eccellente plugin gibberish di&#xA;&lt;a href=&#34;http://errtheblog.com&#34; target=&#34;_blank&#34;&gt;defunkt&lt;/a&gt; e al modo in cui gli errori di validazione di&#xA;AR sono esposti, il compito è stato portato a termine in modo semplice e&#xA;pulito, senza mettere troppo le mani negli internals di AR.&lt;/p&gt;&#xA;&lt;p&gt;Ho cominciato traducendo ogni messaggio di errore predefinito di AR, con questo&#xA;file di traduzione in &lt;code&gt;lang/it.yml&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Active Record errors&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;ar_accepted&lt;/span&gt;:     &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;deve essere accettato&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;ar_not_a_number&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;non è un numero&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;ar_blank&lt;/span&gt;:        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;è un campo obbligatorio&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;ar_empty&lt;/span&gt;:        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;è un campo obbligatorio&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;ar_inclusion&lt;/span&gt;:    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;non è nella lista dei valori validi&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;ar_too_long&lt;/span&gt;:     &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;è troppo lungo (massimo %d caratteri)&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;ar_exclusion&lt;/span&gt;:    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;è riservato&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;ar_too_short&lt;/span&gt;:    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;è troppo corto (minimo %d caratteri)&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;ar_invalid&lt;/span&gt;:      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;non è valido&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;ar_wrong_length&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;è errato, dovrebbe essere di %d caratteri&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;ar_confirmation&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;non corrisponde&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;ar_taken&lt;/span&gt;:        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;esiste già&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# This one is not a default key, but I use it in my validations&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;ar_greater_zero&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;deve essere maggiore di zero&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;e quattro righe in &lt;code&gt;config/environment.rb&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;Gibberish&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;current_language &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;:it&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ActiveRecord&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;Errors&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;default_error_messages &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;ActiveRecord&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;Errors&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;default_error_messages&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;inject({}) {&lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;h, (key, string)&lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    h&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;update(key &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; string&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ar_&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;#{&lt;/span&gt;key&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;intern&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;) &lt;span style=&#34;color:#75715e&#34;&gt;# &amp;lt;em&amp;gt;Gibberish magic&amp;lt;/em&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La prima riga imposta semplicemente l&amp;rsquo;italiano (:it) come lingua predefinita,&#xA;l&amp;rsquo;inject costruisce un nuovo hash &lt;code&gt;error_messages&lt;/code&gt; usando Gibberish per&#xA;tradurre quelli predefiniti. Ho nominato ogni chiave di errore AR nel mio file&#xA;di traduzione con il prefisso &amp;ldquo;ar_&amp;rdquo;, per evitare possibili conflitti futuri di&#xA;chiavi. Infine, l&amp;rsquo;array di AR viene sovrascritto con quello appena costruito.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Estrarre dati dalla cache di Apple Safari</title>
      <link>https://sindro.me/it/posts/2008-01-20-extracting-data-from-apple-safari-s-cache/</link>
      <pubDate>Sun, 20 Jan 2008 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-01-20-extracting-data-from-apple-safari-s-cache/</guid>
      <description>&lt;p&gt;Cinque minuti fa ho sovrascritto il nuovissimo e fiammante foglio di stile CSS&#xA;che implementa la combinazione di colori attuale, perché volevo ripristinare&#xA;quello originale e metterlo in un nuovo tema per questo sito, così che chi&#xA;apprezzava il vecchio tema potesse continuare a usarlo. Ma, come il più&#xA;principiante degli amministratori di sistema, ho decompresso i file originali&#xA;dall&amp;rsquo;archivio di backup SOPRA quelli attuali&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Safari in soccorso! Ogni elemento nella cache di Safari è memorizzato in un&#xA;database SQLite3 che si trova in &lt;code&gt;~/Library/Caches/com.apple.Safari&lt;/code&gt;,&#xA;andiamo a vedere com&amp;rsquo;è strutturato:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; 13:54:42 vjt@voyager:~/Library/Caches/com.apple.Safari$ sqlite3 Cache.db &#xA;SQLite version 3.5.1&#xA;Enter &amp;#34;.help&amp;#34; for instructions&#xA;&#xA;sqlite&amp;gt; .tables&#xA;cfurl_cache_blob_data       cfurl_cache_schema_version&#xA;cfurl_cache_response      &#xA;&#xA;sqlite&amp;gt; .schema cfurl_cache_response &#xA;CREATE TABLE cfurl_cache_response(&#xA;  entry_ID INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,&#xA;  version INTEGER,&#xA;  hash_value INTEGER,&#xA;  storage_policy INTEGER,&#xA;  request_key TEXT UNIQUE,&#xA;  time_stamp NOT NULL DEFAULT CURRENT_TIMESTAMP);&#xA;&#xA;sqlite&amp;gt; .schema cfurl_cache_blob_data&#xA;CREATE TABLE cfurl_cache_blob_data(&#xA;  entry_ID INTEGER PRIMARY KEY,&#xA;  response_object BLOB,&#xA;  request_object BLOB,&#xA;  receiver_data BLOB,&#xA;  proto_props BLOB,&#xA;  user_info BLOB);&#xA;&#xA;sqlite&amp;gt; select * from cfurl_cache_response limit 3;&#xA;1|0|1897220634|0|http://..../|2008-01-19 11:10:33&#xA;2|0|-662909776|0|http://..../|2008-01-19 11:10:33&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Wow. Impressionante. Ecco perché adoro i prodotti Apple: sono così ben&#xA;strutturati che puoi liberamente ispezionarli e usare le loro risorse per&#xA;qualsiasi compito imprevisto tu debba completare&amp;hellip; anche per rimediare ai tuoi&#xA;stessi errori ;). Ed è anche stimolante, perché devi rimboccarti le maniche e&#xA;trovare la soluzione esplorando un prodotto software costruito splendidamente.&lt;/p&gt;&#xA;&lt;p&gt;Per farla breve, ogni URL nella cache è memorizzato nel campo &lt;code&gt;request_key&lt;/code&gt;&#xA;della tabella &lt;code&gt;cfurl_cache_response&lt;/code&gt;, mentre nel campo &lt;code&gt;receiver_data&lt;/code&gt; della&#xA;tabella &lt;code&gt;cfurl_cache_blob_data&lt;/code&gt; ci sono i dati effettivi. Ora possiamo cercare&#xA;il foglio di stile CSS del tema bbs che abbiamo sovrascritto:&lt;/p&gt;</description>
    </item>
    <item>
      <title>La riga del giorno</title>
      <link>https://sindro.me/it/posts/2008-01-18-today-s-row/</link>
      <pubDate>Fri, 18 Jan 2008 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-01-18-today-s-row/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;05:01:24 vjt@voyager:~/Antani/trunk$ replace&lt;span style=&#34;color:#f92672&#34;&gt;(){&lt;/span&gt; sed -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;s|&lt;/span&gt;$1&lt;span style=&#34;color:#e6db74&#34;&gt;|&lt;/span&gt;$2&lt;span style=&#34;color:#e6db74&#34;&gt;|g&amp;#34;&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt; $3 &amp;gt; &lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;3&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;X; mv &lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;3&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;X $3; &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;; egrep -r &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;XP_[A-Z_]+[[:space:]]+-?[[&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;:digit:]]&amp;#39;&lt;/span&gt; Headers |ruby -ne &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;f,m=scan(/(.+):.+(XP_[\w_]+)/).first&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;;puts &amp;#39;%s %s %s&amp;#39; % [ f, m, &amp;#39;kXP&amp;#39;&amp;lt;&amp;lt;m.scan(/(_[A-Z])([A-Z]+)/).map {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;|a,b| a[1..1]&amp;lt;&amp;lt;b. downcase }.join ]&amp;#34;&lt;/span&gt; | &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; read hdr from to; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;replace $from $to $hdr; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; src in &lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;grep -rl $from Sources&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;replace $from $to $src; &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Come compilare python2.5 su SCO_SV</title>
      <link>https://sindro.me/it/posts/2008-01-16-how-to-compile-python2-5-on-sco_sv/</link>
      <pubDate>Wed, 16 Jan 2008 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2008-01-16-how-to-compile-python2-5-on-sco_sv/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;Devi avere PTH installato, e forse altre librerie.&lt;/li&gt;&#xA;&lt;li&gt;Testato su &lt;code&gt;SCO_SV os507 3.2 5.0.7 i386&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Se hai UDK, lancia:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ CFLAGS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-I/usr/local/include -belf&amp;#39;&lt;/span&gt; LDFLAGS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-L/usr/local/lib&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ./configure --with-threads --with-pth --disable-shared --disable-ipv6&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;Aggiungi &lt;code&gt;/usr/local/include&lt;/code&gt; a &lt;code&gt;BASECFLAGS&lt;/code&gt; nel &lt;code&gt;Makefile&lt;/code&gt; (autocrap fa schifo).&lt;/li&gt;&#xA;&lt;li&gt;Patcha &lt;code&gt;Modules/ctypes/_ctypes_test.c&lt;/code&gt; mettendo un &lt;code&gt;#ifdef HAVE_LONG_LONG&lt;/code&gt; attorno alle funzioni che usano &lt;code&gt;PY_LONG_LONG&lt;/code&gt; (suggerimenti: righe &lt;code&gt;384&lt;/code&gt; e &lt;code&gt;318&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;Patcha &lt;code&gt;Objects/longobject.c&lt;/code&gt; e alla riga &lt;code&gt;817&lt;/code&gt; metti la macro &lt;code&gt;IS_LITTLE_ENDIAN&lt;/code&gt; prima del blocco &lt;code&gt;#ifdef HAVE_LONG_LONG&lt;/code&gt;, e metti &lt;code&gt;_PyLong_FromSsize_t&lt;/code&gt; e &lt;code&gt;_PyLong_FromSize_t&lt;/code&gt; dopo il blocco &lt;code&gt;HAVE_LONG_LONG&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Se hai GCC, lancia:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ CFLAGS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-I/usr/local/include&amp;#39;&lt;/span&gt; LDFLAGS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-L/usr/local/lib&amp;#39;&lt;/span&gt;            &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ./configure --with-threads --with-pth --disable-shared --disable-ipv6&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sia con UDK che con GCC:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Modifica &lt;code&gt;pyconfig.h&lt;/code&gt; e commenta il define di &lt;code&gt;socklen_t&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Modifica &lt;code&gt;Modules/socketmodule.c&lt;/code&gt; e alla riga 226 aggiungi &lt;code&gt;|| defined(SCO5)&lt;/code&gt; per definire &lt;code&gt;INET_ADDRSTRLEN&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Lancia &lt;code&gt;make&lt;/code&gt; (o &lt;code&gt;gmake&lt;/code&gt; se preferisci)&lt;/li&gt;&#xA;&lt;li&gt;Rimarrai senza &lt;code&gt;_curses.so&lt;/code&gt;, &lt;code&gt;_curses_panel.so&lt;/code&gt;, &lt;code&gt;_locale.so&lt;/code&gt; e &lt;code&gt;readline.so&lt;/code&gt; se usi GCC, e anche senza &lt;code&gt;pyexpat&lt;/code&gt;, &lt;code&gt;elementtree&lt;/code&gt; e &lt;code&gt;sha512&lt;/code&gt; se usi UDK.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;      __   ____  __ __  ____     __&#xA;      \ \ / /  \/  |  \/  \ \   / /&#xA;       \ V /| |\/| | |\/| |\ \ / / &#xA;        | | | |  | | |  | | \ V /_ &#xA;        |_| |_|  |_|_|  |_|  \_/(_)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;vjt@os507 ~/Python-2.5.1-vjt&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; $ python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Python 2.5.1 &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;r251:31337, Sep &lt;span style=&#34;color:#ae81ff&#34;&gt;13&lt;/span&gt; 2007, 22:40:33&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;GCC 4.2.1&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; on sco_sv3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Type &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;help&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;copyright&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;credits&amp;#34;&lt;/span&gt; or &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;license&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; more information.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt;&amp;gt;&amp;gt; import socket&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;gt;&amp;gt;&amp;gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;vjt@os507 ~&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; $ hg clone http://code.wuhrer.thc/hg/Antani&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;destination directory: Antani&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;http authorization required&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;!! YAY! :D&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ruby 1.9 conosce la risposta alla vita, all&#39;universo e a tutto quanto</title>
      <link>https://sindro.me/it/posts/2007-12-22-ruby-1-9-has-got-the-answer-to-life-universe-and-everything/</link>
      <pubDate>Sat, 22 Dec 2007 22:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2007-12-22-ruby-1-9-has-got-the-answer-to-life-universe-and-everything/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;33&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt; vjt@voyager&lt;span style=&#34;color:#e6db74&#34;&gt;:~&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt; irb19 &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irb(main):&lt;span style=&#34;color:#ae81ff&#34;&gt;001&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;Symbol&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;all_symbols&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;grep &lt;span style=&#34;color:#e6db74&#34;&gt;/^the/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;:the_answer_to_life_the_universe_and_everything&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;sfortunatamente, la risposta non è 42:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;irb(main):&lt;span style=&#34;color:#ae81ff&#34;&gt;002&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; _&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;first&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;object_id&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5048&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;:\&lt;/p&gt;&#xA;&lt;p&gt;Grazie per questa strana scoperta, &lt;a href=&#34;https://deref.blogspot.com&#34; target=&#34;_blank&#34;&gt;nextie&lt;/a&gt;! :D&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quando i sysadmin governavano la Terra</title>
      <link>https://sindro.me/it/posts/2007-11-21-when-sysadmins-ruled-the-earth/</link>
      <pubDate>Wed, 21 Nov 2007 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2007-11-21-when-sysadmins-ruled-the-earth/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://sindro.me/posts/2007-11-21-when-sysadmins-ruled-the-earth/sysadmins2_1.jpg&#34; alt=&#34;Logo del romanzo&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Un romanzo davvero, davvero, davvero &lt;strong&gt;NERD&lt;/strong&gt; di &lt;a href=&#34;https://web.archive.org/web/20110201185322/http://baens-universe.com/authors/Cory_Doctorow&#34; target=&#34;_blank&#34;&gt;Cory Doctorow&lt;/a&gt;&#xA;che racconta di un gruppo di sysadmin che lottano per tenere in piedi la cara&#xA;vecchia Rete dopo un evento catastrofico che ha messo il mondo intero in&#xA;ginocchio. Combattono con scorte limitate di energia e cibo e comunicano via&#xA;Usenet&amp;hellip; usando la &lt;em&gt;buona vecchia gerarchia alt.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Voto: 10+ per la cosa più geek che abbia mai letto. Vale davvero l&amp;rsquo;ora&#xA;necessaria per leggerlo tutto. &lt;a href=&#34;https://web.archive.org/web/20110216142848/http://baens-universe.com/articles/when_sysadmins_ruled_the_earth&#34; target=&#34;_blank&#34;&gt;Buona lettura&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Come fare il backup con Time Machine su una condivisione di rete</title>
      <link>https://sindro.me/it/posts/2007-11-02-how-to-backup-with-time-machine-on-a-network-share/</link>
      <pubDate>Fri, 02 Nov 2007 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2007-11-02-how-to-backup-with-time-machine-on-a-network-share/</guid>
      <description>&lt;p&gt;&lt;em&gt;Ingredienti&lt;/em&gt;: Debian, Netatalk, Avahi, un po&amp;rsquo; di trucchetti.&lt;/p&gt;&#xA;&lt;h2 id=&#34;passo-1-ricompilare-netatalk-con-supporto-ssl&#34;&gt;Passo 1: Ricompilare Netatalk con supporto SSL&lt;/h2&gt;&#xA;&lt;p&gt;Ricompila Netatalk con il &lt;a href=&#34;http://www.blackmac.de/archives/58-Make-Netatalk-talk-to-Leopard-Mac-OS-X-10.5.html#extended&#34; target=&#34;_blank&#34;&gt;supporto SSL&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Puoi tranquillamente ignorare la roba del &amp;ldquo;.passwd&amp;rdquo;, perché afpd usa PAM per l&amp;rsquo;autenticazione degli utenti.&lt;/p&gt;&#xA;&lt;p&gt;Suggerimento: Disabilita i gestori del protocollo atalk in &lt;code&gt;/etc/default/netatalk&lt;/code&gt; per un avvio più veloce:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Set which daemons to run (papd is dependent upon atalkd):&#xA;ATALKD_RUN=no        # appletalk protocol&#xA;PAPD_RUN=no          # printer sharing daemon (printers are soooo &amp;#39;90s)&#xA;CNID_METAD_RUN=yes   # don&amp;#39;t remember but is needed, rtfm!&#xA;AFPD_RUN=yes         # you will always need this&#xA;TIMELORD_RUN=no      # my time lord&amp;#39;s name is &amp;lt;a href=&amp;#34;http://openntpd.org&amp;#34;&amp;gt;openntpd&amp;lt;/a&amp;gt;&#xA;A2BOOT_RUN=no        # boot? nah! :P&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;passo-2-crea-una-condivisione-per-i-dati-di-backup-di-time-machine-aggiungendo-ad-es&#34;&gt;Passo 2: Crea una condivisione per i dati di backup di Time Machine, aggiungendo ad es.&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# path         name           perms     charset&#xA;/some/where/tm &amp;#34;Time Machine&amp;#34; allow:vjt volcharset:&amp;#34;UTF8&amp;#34; &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;in &lt;code&gt;/etc/netatalk/AppleVolumes.default&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;passo-3-fai-comparire-il-server-afpd-nel-finder&#34;&gt;Passo 3: Fai comparire il server AFPD nel Finder&lt;/h2&gt;&#xA;&lt;p&gt;Scarica il file di servizio avahi, mettilo in &lt;code&gt;/etc/avahi/services&lt;/code&gt; e ricarica avahi con &lt;code&gt;/etc/init.d/avahi-daemon reload&lt;/code&gt; (&lt;em&gt;scusate, i link originali sono rotti&lt;/em&gt;).&lt;/p&gt;&#xA;&lt;h2 id=&#34;passo-4-configura-il-backup-di-time-machine&#34;&gt;Passo 4: Configura il backup di Time Machine&lt;/h2&gt;&#xA;&lt;p&gt;Ti servono due file sulla condivisione di rete AFP: .com.apple.timemachine.supported e un dot-file che prende il nome dal MAC address della tua en0. Per crearlo, il modo più semplice è collegare un disco USB/Firewire, rinominarlo con il nome della condivisione di rete desiderata (specificata nel file AppleVolumes) e abilitare Time Machine su di esso.&lt;/p&gt;&#xA;&lt;p&gt;Poi, copia il file .00&amp;hellip; dal disco esterno nella tua home directory, espelli il disco, monta la condivisione di rete dal Finder e copia il file lì.&lt;/p&gt;&#xA;&lt;p&gt;Infine, fai un touch di &lt;code&gt;.com.apple.timemachine.supported&lt;/code&gt; sulla condivisione di rete e riapri le preferenze di Time Machine: la dimensione del tuo volume di backup dovrebbe essere uguale alla dimensione della condivisione di rete :).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Helpdesk medievale</title>
      <link>https://sindro.me/it/posts/2007-10-29-medieval-helpdesk/</link>
      <pubDate>Mon, 29 Oct 2007 00:00:00 +0000</pubDate>
      <guid>https://sindro.me/it/posts/2007-10-29-medieval-helpdesk/</guid>
      <description>&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/pQHX-SjgQvQ?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;;D&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
