<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Digitalwaters.net</title>
    <link>http://www.digitalwaters.net/posts</link>
    <pubDate>Sun, 12 Feb 2012 21:46:30 GMT</pubDate>
    <description>A blog about coding and creativity.</description>
    <item>
      <title>L' informatica in cialde #1</title>
      <link>http://www.digitalwaters.net/posts/l-informatica-in-cialde-1</link>
      <description>&lt;p&gt;&lt;img src="http://www.digitalwaters.net/images/blog/munchausen.jpg" class="image-left" title="Il barone di Munchausen" alt="Il barone di Munchausen" /&gt; Da cosa deriva il termine &amp;#8220;bootstrap&amp;#8221;? Perch&#233; chiamiamo cos&#236; l&#8217;insieme delle operazioni che rendono il pc operativo?&lt;/p&gt;
&lt;p&gt;&amp;#8220;Bootstrap&amp;#8221; &#232; il termine della lingua inglese che indica la linguetta posteriore delle calzature che rende pi&#249; agevole indossare un paio di scarpe.  E&#8217; molto diffusa l&#8217;idea che il termine sia nato in riferimento al romanzo di Raspe &amp;#8220;Le avventure del barone di Munchhausen&amp;#8221; poich&#233; nell&#8217;opera il protagonista riemergerebbe da una palude &amp;#8220;tirandosi per la linguetta degli stivali&amp;#8221;.&lt;/p&gt;
&lt;p&gt;In realt&#224; nel romanzo il barone si cava d&#8217;impaccio &amp;#8220;tirandosi per il codino&amp;#8221; e probabilmente il termine &amp;#8220;bootstrap&amp;#8221; trae la sua origine dall&#8217;espressione &amp;#8220;&lt;em&gt;to pull oneself up by one&amp;#8217;s bootstraps&lt;/em&gt;&amp;#8221; che letteralmente significa &#8220;tirarsi su per la linguetta degli stivali&#8221; ed in senso figurato &amp;#8220;cavarsela da se&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Questa espressione quindi farebbe riferimento alla serie di processi autonomi con i quali il computer &amp;#8220;se la cava da solo&amp;#8221; per avviarsi.&lt;/p&gt;</description>
      <pubDate>Sun, 12 Feb 2012 21:46:30 GMT</pubDate>
      <guid>http://www.digitalwaters.net/post/%20show/l-informatica-in-cialde-1</guid>
      <author>Juna</author>
    </item>
    <item>
      <title>Il fantasy, una sera</title>
      <link>http://www.digitalwaters.net/posts/il-fantasy-una-sera</link>
      <description>&lt;p&gt;Da sempre avrei voluto provare a cimentarmi con la creazione di uno sfondo fantasy: ieri sera (sar&#224; stata l&amp;#8217;atmosfera?) finalmente ho ideato qualcosa di decente! ^^&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.digitalwaters.net/images/blog/theshepherdandthemoon.jpg" title="The shepherd and the moon" alt="The shepherd and the moon" /&gt;&lt;/p&gt;
&lt;p&gt;Araemita si ferm&#242; a guardare la Luna, la lunga staffa e gli stivali ben saldi a terra.&lt;br /&gt;
Le nubi gi&#224; si addensavano a coprire la notte: non rimanevano che nere sagome per l&amp;#8217;osservatore occasionale che si fosse sporto a sbirciare oltre le colline.&lt;/p&gt;
&lt;p&gt;- Dicono che le stelle siano i gioielli degli dei &amp;#8211; esord&#236;.&lt;/p&gt;
&lt;p&gt;(To be continued&amp;#8230;)&lt;/p&gt;
&lt;p&gt;Ringraziamenti:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.obsidiandawn.com"&gt; ObsidianDawn&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://cybrea-stock.deviantart.com"&gt; Cybrea-stock&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://midnightstouch.deviantart.com/"&gt; Midnightstouch&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://anodyne-stock.deviantart.com"&gt; Anodyne-stock&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 22 Jul 2011 20:41:51 GMT</pubDate>
      <guid>http://www.digitalwaters.net/post/%20show/il-fantasy-una-sera</guid>
      <author>Juna</author>
    </item>
    <item>
      <title>This is were it all begins</title>
      <link>http://www.digitalwaters.net/posts/this-is-were-it-all-begins</link>
      <description>&lt;p&gt;Sono sicura che &#232; cos&#236; che di notte si accende la Luna.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.digitalwaters.net/images/blog/whereitallbegins.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Qualche ringraziamento per i fantastici pennelli:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.obsidiandawn.com"&gt; ObsidianDawn&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://anodyne-stock.deviantart.com"&gt; Anodyne-stock&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 22 Jul 2011 20:39:50 GMT</pubDate>
      <guid>http://www.digitalwaters.net/post/%20show/this-is-were-it-all-begins</guid>
      <author>Juna</author>
    </item>
    <item>
      <title>Cheatsheet per novelli fotografi</title>
      <link>http://www.digitalwaters.net/posts/cheatsheet-per-novelli-fotografi</link>
      <description>&lt;p&gt;Girovagando qua e l&#224; per links ho trovato questo utilissimo manabile fotografico:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://d3uwin5q170wpc.cloudfront.net/photo/159864_700b_v1.jpg" title="Cheatsheet fotografia" alt="Cheatsheet fotografia" /&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 06 Jul 2011 20:59:45 GMT</pubDate>
      <guid>http://www.digitalwaters.net/post/%20show/cheatsheet-per-novelli-fotografi</guid>
      <author>Juna</author>
    </item>
    <item>
      <title>La domenica del gatto</title>
      <link>http://www.digitalwaters.net/posts/la-domenica-del-gatto</link>
      <description>&lt;p&gt;Domenica pomeriggio ho finalmente trovato del tempo per pensare ad nuovo sfondo per il mio desktop.&lt;br /&gt;
Alla fine dei lavori &#232; venuto fuori questo:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.digitalwaters.net/images/blog/nekononichiyoubi.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Credo che rimpiazzer&#224; molto presto lo sfondo attuale!&lt;/p&gt;</description>
      <pubDate>Tue, 05 Jul 2011 18:27:38 GMT</pubDate>
      <guid>http://www.digitalwaters.net/post/%20show/la-domenica-del-gatto</guid>
      <author>Juna</author>
    </item>
    <item>
      <title>Migrazioni senza ssh</title>
      <link>http://www.digitalwaters.net/posts/migrazioni-senza-ssh</link>
      <description>&lt;p&gt;Certo, se avessi potuto effettuare la migrazione con un bel &lt;code&gt;rake db:migrate&lt;/code&gt; sarebbe stato tutto infinitamente pi&#249; facile&amp;#8230;per&#242; i servizi degli hosting costano (specialmente per i privati!) e quindi non &#232; sempre possibile acquistare un accesso ssh. :P&lt;/p&gt;
&lt;p&gt;Con un po&amp;#8217; di buona volont&#224; a volte mi &#232; facile ricreare le tabelle create dalle migrazioni generate dalle gemme con phpmyadmin (eh lo so&amp;#8230;&#232; un orrore infinito aggiornare anche &lt;code&gt;schema_migrations&lt;/code&gt; a mano!), sbirciando magari nei files di migrazione; oggi per&#242; sono subentrati indici su colonne multiple il cui nome non figurava nel template e cos&#236; ho dovuto trovare un&amp;#8217;altra soluzione per tirarmi fuori dai pasticci.&lt;/p&gt;
&lt;p&gt;Anche se il sito &#232; online, chiaramente tutto lo sviluppo lo faccio in locale e cos&#236; il db risiede anche sul mio pc, che mi mette a disposizione anche una fantastica console MySQL.&lt;br /&gt;
Improvvisamente mi sono ricordata che &#232; possibile chiedere direttamente a MySQL quale sia l&amp;#8217;istruzione per creare una determinata tabella:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;em&gt;show create table nometabella&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;E&amp;#8217; fantastico perch&#233; in modalit&#224; assolutamente &amp;#8220;no-brain&amp;#8221; si pu&#242; anche fare copia-incolla direttamente nel tab &lt;span class="caps"&gt;SQL&lt;/span&gt; di phpmyadmin! :D&lt;/p&gt;
&lt;p&gt;Ho come la sensazione che con Rails i nomi degli indici su colonne multiple vengano creati secondo uno standard a partire dai campi coinvolti. Se nel template infatti c&amp;#8217;&#232; scritto:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;i&gt;add_index :tablename, [:column1, :column2]&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;L&amp;#8217; &lt;span class="caps"&gt;SQL&lt;/span&gt; che viene generato &#232; della forma:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;[..] &lt;i&gt;&lt;span class="caps"&gt;KEY&lt;/span&gt; &amp;#8216;index_tablename_on_column1_and_column2&amp;#8217; (&amp;#8216;column1&amp;#8217;,&amp;#8216;column2&amp;#8217;)&lt;/i&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 25 Apr 2011 16:29:37 GMT</pubDate>
      <guid>http://www.digitalwaters.net/post/%20show/migrazioni-senza-ssh</guid>
      <author>Juna</author>
    </item>
    <item>
      <title>RSS Syndication e Rails</title>
      <link>http://www.digitalwaters.net/posts/rss-syndication-e-rails</link>
      <description>&lt;p&gt;Ci sono un mucchio di modi per far sapere ai propri contatti che qualcosa sul sito &#232; cambiato: si pu&#242; scrivere sul proprio account di facebook, ci si pu&#242; affidare alla curiosit&#224; dei visitatori pi&#249; assidui. Oppure si pu&#242; mettere in piedi un piccolo sistema di syndication &lt;span class="caps"&gt;RSS&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;La prima cosa da fare se si vuole mettere a disposizione un feed delle notizie con Ruby on Rails &#232;&#8230;estrarre le notizie. Sembra banale ma &#232; proprio cos&#236;, &#232; necessario generare un controller che esponga un metodo atto a restituire un oggetto che rappresenta la lista di notizie da condividere:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;class FeedController &amp;lt; ApplicationController&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;def posts
    @posts = Post.find(:all,
      :order =&amp;gt; "updated_at DESC, created_at DESC",
      :limit =&amp;gt; 10)
    response.headers['Content-type'] = "application/rss+xml"
    respond_to do |format|
      format.xml  { render :layout =&amp;gt; false}
    end
  end&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;end&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;E&#8217; facile osservare che per generare un feed &lt;span class="caps"&gt;RSS&lt;/span&gt; non c&#8217;&#232; bisogno di includere anche il layout della pagina che finirebbe per malformare il suo contenuto.&lt;/p&gt;
&lt;p&gt;L&#8217; &lt;span class="caps"&gt;XML&lt;/span&gt; vero e proprio del feed pu&#242; essere generato in vari modi, uno dei quali coinvolge l&#8217;utilizzo di &lt;span class="caps"&gt;XML&lt;/span&gt; Builder e di un template rxml: questo template in particolare deve proprio avere il nome del metodo che fornisce le notizie e deve trovarsi nella cartella della vista associata al controller dei feeds (quindi ad esempio in questo caso si avrebbe &#8220;../views/feed/posts.rxml&#8221;).&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;xml.instruct!
xml.rss "version" =&amp;gt; "2.0",
  "xmlns:dc" =&amp;gt; "http://purl.org/dc/elements/1.1/" do
  xml.channel do
    xml.title 'Digitalwaters.net'
    xml.link url_for(:only_path =&amp;gt; false,
      :controller =&amp;gt; 'posts' ,
      :action =&amp;gt; 'index' )
    xml.pubDate CGI.rfc1123_date(@posts.first.updated_at)
    xml.description h("A blog about coding and creativity.")
    @posts.each do |post|
      xml.item do
        xml.title post.title
        xml.link url_for(:only_path =&amp;gt; false,
          :controller =&amp;gt; 'posts' ,
          :action =&amp;gt; 'show' ,
          :id =&amp;gt; post)
        xml.description(RedCloth.new(post.content).to_html)
        xml.pubDate CGI.rfc1123_date(post.updated_at)
        xml.guid url_for(:only_path =&amp;gt; false,
          :controller =&amp;gt; 'post' ,
          :action =&amp;gt; ' show' ,
          :id =&amp;gt; post)
        xml.author h(User.find(post.user_id).username)
      end
    end
  end
end&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;L&#8217;oggetto xml che viene messo a disposizione provvede a generare i tag xml conformemente ai parametri che gli vengono forniti.&lt;br /&gt;
E&#8217; possibile permettere al browser di riconoscere che si mette a disposizione un feed aggiungendo nel tag &lt;head&gt; del template dell&#8217;applicazione la direttiva:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;%= auto_discovery_link_tag(:rss, {:controller =&amp;gt; 'feed' , :action =&amp;gt; 'posts' }) %&amp;gt;&lt;/code&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 21 Apr 2011 08:45:13 GMT</pubDate>
      <guid>http://www.digitalwaters.net/post/%20show/rss-syndication-e-rails</guid>
      <author>Juna</author>
    </item>
    <item>
      <title>Due bachi con un solo forum</title>
      <link>http://www.digitalwaters.net/posts/due-bachi-con-un-solo-forum</link>
      <description>&lt;p&gt;Succede sempre.&lt;/p&gt;
&lt;p&gt;C&amp;#8217;&#232; sempre qualche browser che non &#232; d&amp;#8217;accordo.&lt;/p&gt;
&lt;p&gt;In questi giorni mi sono offerta di fare il restyling del forum di una gilda di World of Warcraft ed &#232; stata veramente una bella impresa; un po&#8217; perch&#233; gli hosting che offrono servizi alle gilde per avere un set di servizi decenti propongono delle tariffe che per una gilda startup sono troppo alte e trovarne una economica ha richiesto una intera giornata di ricerche; un po&amp;#8217; perch&#233; l&amp;#8217;hosting generalmente d&#224; solo la possibilit&#224; di modificare il css di alcuni template gi&#224; preinstallati sul &lt;span class="caps"&gt;CMS&lt;/span&gt; che offre;  un po&amp;#8217; perch&#233; quando non sei tu a mettere i div in una pagina le cose sono sempre un po&amp;#8217; pi&#249; complicate di quello che sembrano (e ogni tanto sei costretto/a a vedere degli ibridi div/table da far accapponare la pelle, per non parlare del codice di stile inline).&lt;/p&gt;
&lt;p&gt;C&#8217;&#232; da fare una premessa: il layout a cui mi riferisco consta sostanzialmente di una tabella a tre colonne che contiene a sua volta i div per i vari moduli che vengono mostrati all&#8217;interno del &lt;span class="caps"&gt;CMS&lt;/span&gt; e per il corpo dei posts. I browser con cui ho provato le visualizzazioni sono Chrome 10, Firefox 4, Internet Explorer 8.&lt;/p&gt;
&lt;p&gt;I problemi sono iniziati quando ho deciso di racchiudere la tabella in un grande quadrato con i bordi arrotondati utilizzando la direttiva del CSS3:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;em&gt;border-radius&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Chiaramente i bordi apparivano arrotondati solo su Chrome e Firefox ma non su IE.&lt;/p&gt;
&lt;p&gt;Siccome raramente decido di mettermi nei pasticci con le mie mani usando direttive che so essere poco digeribili per qualche browser, decido di fare qualche ricerca in rete e scopro che in realt&#224; per assicurare una corretta intercompatibilit&#224; di visualizzazione tra Internet Explorer, Firefox e browser che si basano su web kit &#232; necessario dichiarare una tripletta di direttive:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;em&gt;-moz-border-radius&lt;/em&gt;&lt;br /&gt;
    &lt;em&gt;-webkit-border-radius&lt;/em&gt;&lt;br /&gt;
    &lt;em&gt;border-radius&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Siccome poi c&#8217;&#232; sempre qualcuno che ha pi&#249; bisogno di premure degli altri, nel caso che abbiate a che fare con IE c&#8217;&#232; anche bisogno di procurarsi il file ie-css3.htc e di renderlo disponibile sul proprio sito per poi includerlo nel css proprio sotto la direttiva border-radius:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;em&gt;behavior: url(ie-css3.htc);&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;E qui bisogna cominciare a fare attenzione perch&#232; il path a cui si riferisce &#8220;behavior&#8221; non &#232; relativo alla directory corrente ma alla root del sito.&lt;/p&gt;
&lt;p&gt;Refresh della pagina: il fantastico box con i bordi arrotondati invece di comportarsi come uno sfondo ricopre letteralmente corpo del testo e moduli come una tovaglia. Paura e delirio: sento odore di z-index.&lt;/p&gt;
&lt;p&gt;E infatti devo proprio ricorrere allo z-index e incappo nel primo baco di IE: lo z-index viene considerato adeguatamente solo se si riferisce ad un elemento con un posizionamento relativo ad un altro elemento contenitore per il quale sia gi&#224; stato specificato uno z-index.&lt;/p&gt;
&lt;p&gt;Conoscere il problema &#232; senza dubbio meglio che brancolare nel buio: non mi perdo d&#8217;animo e assegno alla tabella il posizionamento relativo e lo z-index, avendo cura di assegnare agli che contiene lo z-index adeguato.&lt;/p&gt;
&lt;p&gt;Refresh della pagina: ad una prima occhiata sembra essere tutto a posto. Ed ecco che si presenta il secondo baco: la necessit&#224; di far comparire un announcement dei messaggi privati in altro a destra della pagina ha spinto l&#8217;autore del &lt;span class="caps"&gt;CMS&lt;/span&gt; a dare al div che racchiude il messaggio un posizionamento assoluto; ma ora&#8230;assoluto rispetto a cosa? Assoluto rispetto all&#8217;elemento che lo contiene visto che per esigenze particolati improvvisamente questo ha assunto un posizionamento relativo&#8230;il che significa che l&#8217;elemento &#232; totalmente fuori posto e che l&#8217;unico modo per riposizionarlo in modo assoluto s&#236;, ma rispetto al viewport, &#232; dargli un posizionamento fixed.&lt;/p&gt;
&lt;p&gt;Il peggio, nel peggio, &#232; quando non puoi mettere mano al codice e gli stili degli elementi per giunta sono &#8220;inline&#8221;: mentre gi&#224; mi disperavo ed immaginavo interminabili botta e risposta a suon di ticket con l&#8217;hosting apprendo con grande sorpresa che in realt&#224; il problema si pu&#242; aggirare aggiungendo alle direttive che si vogliono sovrascrivere il suffisso&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;em&gt;!important&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Quindi ad esempio se capita di incappare in un div come quello che segue:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;code&gt;&amp;lt;div class=&#8221;mydiv&#8221; style=&#8221;position:absolute;&#8221;&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Si pu&#242; fare overriding della direttiva in questo modo:&lt;/p&gt;
&lt;p style="text-align:left;"&gt;&lt;em&gt;mydiv {&lt;/em&gt;&lt;br /&gt;
    &lt;em&gt;position: fixed !important;&lt;/em&gt;&lt;br /&gt;
    &lt;em&gt;}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Decisamente la life-saver discovery della giornata!&lt;/p&gt;</description>
      <pubDate>Thu, 21 Apr 2011 08:17:28 GMT</pubDate>
      <guid>http://www.digitalwaters.net/post/%20show/due-bachi-con-un-solo-forum</guid>
      <author>Juna</author>
    </item>
    <item>
      <title>San Valentino in Haskell</title>
      <link>http://www.digitalwaters.net/posts/san-valentino-in-haskell</link>
      <description>&lt;p&gt;L&#8217;amore ha finito per ispirare poeti e letterati di ogni epoca e perch&#233; no&#8230;probabilmente anche i matematici.&lt;/p&gt;
&lt;p&gt;In effetti gi&#224; Pitagora di Samo aveva fatto distinzione, ponendo i numeri in apposite categorie, tra numeri &#8220;maschili&#8221; e numeri &#8220;femminili&#8221;: a quanto pare (poich&#233; non lasci&#242; nulla di scritto) egli reputava maschili i numeri dispari e femminili i numeri pari. Non basta: con un piglio che potrebbe essere definito quasi misogino, associ&#242; ai numeri femminili e pari un&#8217; idea di infinitezza e quindi di imperfezione e a quelli maschili  (nemmeno a dirlo ;)) di limitatezza e quindi di perfezione.&lt;/p&gt;
&lt;p&gt;C&#8217;&#232; una forma di &#8220;attrazione&#8221; reciproca che riguarda i numeri ed &#232; quella che permette di definire i &lt;strong&gt;numeri fidanzati&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;I numeri fidanzati sono quei numeri tali che la somma dei divisori del primo (escluso l&#8217;1 ed il numero stesso) da come risultato il secondo e viceversa.&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;Haskell &#232; un linguaggio funzionale particolarmente elegante;  per determinare se due numeri sono fidanzati  definiamo innanzitutto una funzione che dato un intero n restituisce somma dei suoi divisori, avendo cura di escludere gi&#224; dalla lista il numero 1 ed il numero stesso.&lt;/p&gt;
&lt;p&gt;A prescindere dalla definizione di tipo della funzione,&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;sumdiv :: Int &amp;#8594; Int&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;si possono fare due scelte per ottenere questo valore; la prima &#232; quella che utilizza un singolo generatore in cui viene esplicitamente indicata l&#8217;esclusione di 1 ed n:&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;sumdiv n = sum [x | x &amp;lt;- [1..n], n `mod` x == 0, x /= 1, x /= n]&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;La seconda &#232; quella che definisce una versione personalizzata delle funzioni init e tail, che potrebbero restituire un errore a causa di una lista vuota, e  l&#8217;operatore di composizione per escludere il primo e l&#8217;ultimo elemento dalla somma dei divisori:&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;init&amp;#8217; :: [a] &amp;#8594; [a]&lt;/cite&gt;&lt;br /&gt;
&lt;cite&gt;init&amp;#8217; [] = []&lt;/cite&gt;&lt;br /&gt;
&lt;cite&gt;init&amp;#8217; xs = init xs&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;tail&amp;#8217; :: [a] &amp;#8594; [a]&lt;/cite&gt;&lt;br /&gt;
&lt;cite&gt;tail&amp;#8217; [] = []&lt;/cite&gt;&lt;br /&gt;
&lt;cite&gt;tail&amp;#8217; xs = tail xs&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;sumdiv :: Int &amp;#8594; Int&lt;/cite&gt;&lt;br /&gt;
&lt;cite&gt;sumdiv n = (sum . init&#8217; . tail&#8217;) [x | x &amp;lt;- [1..n], n `mod` x == 0]&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;Definita questa funzione, il &#8220;test di fidanzamento&#8221; di due numeri n ed m si pu&#242; implementare con una funzione a due parametri:&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;fidanzati::  Int &amp;#8594; Int &amp;#8594; Bool&lt;br /&gt;
fidanzati n m = sumdiv n == m &amp;amp;&amp;amp; sumdiv m == n&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;o con una funzione ad un solo parametro:&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;fidanzati :: (Int &amp;#8594; Int) &amp;#8594; Bool&lt;/cite&gt;&lt;br /&gt;
&lt;cite&gt;fidanzati (n,m) = sumdiv n == m &amp;amp;&amp;amp; sumdiv m == n&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;La prima coppia di numeri fidanzati &#232; (48,75): sono i cosiddetti&#8230;*promessi sposi*.&lt;br /&gt;
E&#8217; possibile implementare una funzione che fornito un limite superiore l restituisca la lista delle coppie di numeri fidanzati le cui componenti siano comprese tra 1 ed l:&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;numfidanzati :: Int&amp;#8594; [(Int,Int)]&lt;/cite&gt;&lt;br /&gt;
&lt;cite&gt;numfidanzati l = [(x,y) | x&amp;lt;-[1..l], y&amp;lt;-[1..l], fidanzati (x,y)]&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;Sar&#224; il fatto che ormai il pc ha qualche annetto ma &#232; stato interessante fare una prova con un limite pari a 1000 e constatare che ci ha messo un bel po&#8217;.  :P&lt;br /&gt;
E&#8217; interessante notare che anche nella matematica i numeri amici non possono essere fidanzati &#8230; ma di questo parleremo un&#8217;altra volta.&lt;/p&gt;</description>
      <pubDate>Thu, 21 Apr 2011 08:16:27 GMT</pubDate>
      <guid>http://www.digitalwaters.net/post/%20show/san-valentino-in-haskell</guid>
      <author>Juna</author>
    </item>
    <item>
      <title>La prova che Babbo Natale esiste</title>
      <link>http://www.digitalwaters.net/posts/la-prova-che-babbo-natale-esiste</link>
      <description>&lt;p&gt;Siamo ormai giunti alle porte del Natale e come ogni anno ci approntiamo a scambiare doni con amici e parenti.  E allora quale miglior regalo per tutti coloro che non hanno mai rinunciato all&#8217; idea che un ilare vecchietto vestito di rosso se ne vada a zonzo nella notte della Nativit&#224;, che una prova formale dell&#8217; esistenza di Babbo Natale?&lt;/p&gt;
&lt;p&gt;Si consideri la seguente prova dell&#8217;esistenza di Babbo Natale:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;em&gt;Se questa proposizione &#232; vera allora Babbo Natale esiste&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Siano&lt;/p&gt;
&lt;p&gt;A:  &#8220;Questa proposizione &#232; vera&#8221;&lt;/p&gt;
&lt;p&gt;B:  &#8220;Babbo Natale esiste&#8221;&lt;/p&gt;
&lt;p&gt;Poich&#233; la  proposizione &#232; della forma &#8220;se A allora B&#8221;, si assume A per dimostrare che segue B. Si osserva tuttavia che se si prende per buona A allora implicitamente si accetta che sia vera l&#8217;intera proposizione poich&#233; nell&#8217; interpretazione data &#8220;questa proposizione &#232; vera&#8221;. Inoltre affinch&#233; una implicazione sia vera, dato l&#8217; antecedente vero deve essere vero anche il conseguente: se A &#232; vera allora deve esserlo anche B &#8230; quindi Babbo Natale esiste(!).&lt;/p&gt;
&lt;p&gt;E&#8217; stato lo stesso Curry  a definire questo paradosso e a dimostrare che non solo esso si manifesta utilizzando il linguaggio naturale ma &#232; anche possibile darne una dimostrazione formale. Infatti assumendo:&lt;/p&gt;
&lt;p&gt;A &amp;#8594; A&lt;/p&gt;
&lt;p&gt;Per sostituzione si ottiene:&lt;/p&gt;
&lt;p&gt;A &amp;#8594; (A &amp;#8594; B)&lt;/p&gt;
&lt;p&gt;Da cui si deduce:&lt;/p&gt;
&lt;p&gt;A &amp;#8594; B&lt;/p&gt;
&lt;p&gt;Poich&#233; inoltre A equivale ad A &amp;#8594; B, si dimostra:&lt;/p&gt;
&lt;p&gt;A&lt;/p&gt;
&lt;p&gt;Da cui segue&lt;/p&gt;
&lt;p&gt;B&lt;/p&gt;
&lt;p&gt;Come sciogliere allora il paradosso? Con il passare del tempo sono state fornite diverse soluzioni, tra le quali vale la pena di ricordare le pi&#249; significative: il dialettismo, attraverso il quale si &#232; ritenuto possibile considerare una proposizione contemporaneamente vera e falsa; l&#8217;idea di Tarski di stabilire una gerarchia di livelli del linguaggio ; il tentativo di discernere in quali casi alcune particolari affermazioni potessero generare paradossi oppure non costituire un problema al fine della determinazione della loro stessa verit&#224; o falsit&#224; (Kripke).&lt;/p&gt;
&lt;p&gt;Il primo approccio non annichilisce il paradosso; il secondo  non ammette l&#8217;utilizzo del predicato &#8220;vero&#8221; in enunciati di livello zero ed in livelli superiori quando non si riferisca ad enunciati di un livello inferiore. L&#8217;organizzazione gerarchica di Tarski contribuisce pertanto ad eliminare ogni forma di circolarit&#224; negli enunciati. Eppure lo fa pagando un prezzo altissimo: l&#8217;impossibilit&#224; di trovare applicazione per tutti quegli enunciati la cui verit&#224; dipende da altri enunciati e per i quali &#232; impossibile determinare il livello di gerarchia linguistica.&lt;/p&gt;
&lt;p&gt;Solo Kripke mise in evidenza l&#8217;impossibilit&#224; di stabilire a priori se ci si trovi o meno in presenza di un enunciato autoreferenziale. Un enunciato della forma:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&#8220;Questo enunciato &#232; vero&#8221;&lt;/p&gt;
&lt;p&gt;pu&#242; essere definito paradossale solo se per &#8220;questo&#8221; si intende proprio l&#8217;enunciato citato e ad esempio non si fa riferire la parola &#8220;questo&#8221; ad un qualsiasi altro enunciato. Peraltro anche nel primo caso sarebbe improprio parlare di &#8220;paradossalit&#224;&#8221; e sarebbe pi&#249; esatto parlare di &#8220;arbitrariet&#224;&#8221;:  &#232; lo stesso enunciato a definire il proprio valore di verit&#224;.&lt;/p&gt;
&lt;p&gt;E ora una domanda per il lettore: Babbo Natale esiste oppure no?&lt;/p&gt;</description>
      <pubDate>Thu, 21 Apr 2011 08:06:58 GMT</pubDate>
      <guid>http://www.digitalwaters.net/post/%20show/la-prova-che-babbo-natale-esiste</guid>
      <author>Juna</author>
    </item>
  </channel>
</rss>

