<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ruby on Marcello Barnaba</title>
    <link>https://sindro.me/it/tags/ruby/</link>
    <description>Recent content in Ruby on Marcello Barnaba</description>
    <generator>Hugo</generator>
    <language>it</language>
    <lastBuildDate>Thu, 07 Jul 2011 14:00:00 +0000</lastBuildDate>
    <atom:link href="https://sindro.me/it/tags/ruby/index.xml" rel="self" type="application/rss+xml" />
    <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>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>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>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>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>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>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>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>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>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>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>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>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>
  </channel>
</rss>
