<?xml version="1.0" encoding="UTF-8"?>

<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns="http://purl.org/rss/1.0/"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
>

<channel rdf:about="http://developer.it">
<title>Developer.it</title>
<link>http://developer.it</link>
<description>Riflessioni e risorse sullo sviluppo software</description>
<dc:language>it-it</dc:language>
<dc:rights>Copyright 2008, Developer.it</dc:rights>
<dc:date>2010-07-30T15:19+01:00</dc:date>
<dc:subject>Ultimi post</dc:subject>
<syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
<syn:updateFrequency>1</syn:updateFrequency>
<syn:updatePeriod>hourly</syn:updatePeriod>
<items>
 <rdf:Seq>
  <rdf:li rdf:resource="http://www.developer.it/post/solving-a-pycon-puzzle-in-haskell" />
  <rdf:li rdf:resource="http://www.developer.it/post/caccia-ai-prezzi-con-shell-e-xmlstarlet" />
  <rdf:li rdf:resource="http://www.developer.it/post/minimi-locali-e-touch-typing" />
  <rdf:li rdf:resource="http://www.developer.it/post/gravatars-why-publishing-your-email-s-hash-is-not-a-good-idea" />
  <rdf:li rdf:resource="http://www.developer.it/post/modelli-di-controllo-di-accessi-come-tipi-haskell" />
  <rdf:li rdf:resource="http://www.developer.it/post/debugging-croce-e-delizia" />
  <rdf:li rdf:resource="http://www.developer.it/post/pillole-di-haskell-ricerca-di-duplicati" />
  <rdf:li rdf:resource="http://www.developer.it/post/il-paradosso-di-php" />
  <rdf:li rdf:resource="http://www.developer.it/post/storie-di-database-l-elefante-il-delfino-e-la-piuma" />
  <rdf:li rdf:resource="http://www.developer.it/post/conversione-di-html-in-pdf-con-openoffice-e-word-2007" />
 </rdf:Seq>
</items>
</channel>
<item rdf:about="http://www.developer.it/post/solving-a-pycon-puzzle-in-haskell">
<title>Solving a Pycon puzzle... in Haskell</title>
<link>http://www.developer.it/post/solving-a-pycon-puzzle-in-haskell</link>
<description>&#x3C;p&#x3E;I was at &#x3C;a href=&#x22;http://www.python.ie/pyconireland&#x22;&#x3E;Pycon Ireland&#x3C;/a&#x3E; last week-end. The event was quite successful and amazingly so considering it was a first for Dublin.&#x3C;/p&#x3E;

&#x3C;p&#x3E;One of the highlights was one of those puzzles made of 13 plastic pieces to reassemble into a 4x4x4 cube (all pieces composed by 5 or 4 basic 1x1x1 cubes), brought by the guy at the Google stand. On Sunday, during the sprint session, the most successful one in terms of attendance and enthusiasm was an effort to solve the puzzle in python, cut short by the end of Pycon. The project &#x3C;a href=&#x22;http://github.com/dublindan/pycon_cube&#x22;&#x3E;seems to be ongoing&#x3C;/a&#x3E; at this time.&#x3C;/p&#x3E;

&#x3C;p&#x3E;As the problem is very combinatorial in flavour, I thought the best tool for the job would be Haskell, which lends itself to concise expression of mathematical ideas. So I made an attempt at the implementation. Running it all night long gave me a few tens of solutions.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Some Haskell constructs are particularly interesting in the solution.&#x3C;/p&#x3E;

&#x3C;p&#x3E;The monadic &#x26;gt;&#x26;gt;= operation for lists was used for the generation of all possible roto-translations of the pieces. If a function&#x3C;/p&#x3E;

&#x3C;pre class=&#x22;code&#x22;&#x3E;
f :: Bitmap -&#x3E; [ Bitmap ]
f bm = ... a certain list of Bimaps derived from bm ...
&#x3C;/pre&#x3E;

yields a family of variations of a piece representation (for instance all translations, or all rotations around an axis), and &#x3C;span class=&#x22;code&#x22;&#x3E;g&#x3C;/span&#x3E; is another such function, then the expression

&#x3C;pre class=&#x22;code&#x22;&#x3E;
f bm &#x26;gt;&#x26;gt;= g
&#x3C;/pre&#x3E;

returns all variations generated by g of all variations generated by f of the initial piece &#x3C;span class=&#x22;code&#x22;&#x3E;bm&#x3C;/span&#x3E;.

&#x3C;p&#x3E;In the solution this is used in&#x3C;/p&#x3E;

&#x3C;pre class=&#x22;code&#x22;&#x3E;
-- All 24 rotations
rotations bm = rotationsx bm &#x3E;&#x3E;= axischangex
&#x3C;/pre&#x3E;

&#x3C;p&#x3E;which generates all the

</description>
</item>
<item rdf:about="http://www.developer.it/post/caccia-ai-prezzi-con-shell-e-xmlstarlet">
<title>Caccia ai prezzi con shell e xmlstarlet</title>
<link>http://www.developer.it/post/caccia-ai-prezzi-con-shell-e-xmlstarlet</link>
<description>Mettiamo che abbiate trovato un&#x27;offerta imperdibile in rete e che mentre state pagando vi venga mostrato un messaggio d&#x27;errore:

&#x3C;blockquote&#x3E;&#x3C;strong&#x3E;Il sistema non pu&#xC3;&#xB2; elaborare il vostro ordine. Vi preghiamo di riprovare&#x3C;/strong&#x3E;&#x3C;/blockquote&#x3E;

&#x3C;p&#x3E;Ripetete diligentemente i passi. Stesso risultato. Finch&#xC3;&#xA9; tornate all&#x27;elenco prodotti e scoprite che l&#x27;ultima frullocentrifuga 18 velocit&#xC3;&#xA0; con 4 braccia orbitali controrotanti ora &#xC3;&#xA8; in vendita a 8000 euro. Evidentemente l&#x27;ultima in offerta &#xC3;&#xA8; stata comprata da qualcuno prima che portaste a termine l&#x27;ordine.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Niente da dire: non sarebbe furbo da parte del sito di e-commerce riservarvi il prodotto solo perch&#xC3;&#xA9; l&#x27;avete nel carrello e vi viene assegnato solo quando portate a termine il pagamento. E&#x27; come per l&#x27;ultima bomba alla crema che avete adocchiato al bar: se un altro riesce a raggiungerla per prima &#xC3;&#xA8; sua e rimanete a bocca asciutta. Al pi&#xC3;&#xB9; potete ripiegare su un cornetto integrale (nota: episodio capitato di recente all&#x27;autore).&#x3C;/p&#x3E;

&#x3C;p&#x3E;Ci sar&#xC3;&#xA0; un&#x27;offerta del genere nel prossimo futuro? E se ci sar&#xC3;&#xA0;, riusciremo a scoprirlo in tempo e non all&#x27;ultimo momento? Ah, se avessimo un assistente personale che controllasse i prezzi ogni 10 minuti e ci avvertisse se i prezzi si abbassano...&#x3C;/p&#x3E;

</description>
</item>
<item rdf:about="http://www.developer.it/post/minimi-locali-e-touch-typing">
<title>Minimi locali e touch-typing</title>
<link>http://www.developer.it/post/minimi-locali-e-touch-typing</link>
<description>C&#x27;&#xC3;&#xA8; una situazione ricorrente nell&#x27;esperienza umana, che si presenta in varie forme nella vita dei singoli e in quella collettiva.

&#x3C;p&#x3E;Un laureando in ingegneria vuole guadagnare un po&#x27; di soldi e passa il pomeriggio a lavorare in una copisteria. Cos&#xC3;&#xAC; facendo, rallenta gli studi e comincia a lavorare sei mesi pi&#xC3;&#xB9; tardi, perdendo nel complesso molti pi&#xC3;&#xB9; soldi di quanti ne abbia guadagnati nel suo lavoretto part-time&#x3C;/p&#x3E;

&#x3C;p&#x3E;Nel salto in alto, nel tempo ci sono stati piccoli miglioramenti tecnici e nelle prestazioni finch&#xC3;&#xA9; nel 1968 Dick Fosbury vinse i mondiali con il suo salto dorsale (volgendo la schiena all&#x27;asticella). La nuova tecnica si impose ed &#xC3;&#xA8; ora universalmente adottata.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Un contadino vive in una vallata. Nel tempo e con sacrifici riesce a comprare il terreno pi&#xC3;&#xB9; produttivo della valle. Poco al di l&#xC3;&#xA0; delle montagne ci sono pianure fertilissime di cui non conosce l&#x27;esistenza.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Queste situazioni hanno molto in comune con l&#x27;idea matematica dei &#x3C;strong&#x3E;minimi locali&#x3C;/strong&#x3E;.

</description>
</item>
<item rdf:about="http://www.developer.it/post/gravatars-why-publishing-your-email-s-hash-is-not-a-good-idea">
<title>Gravatars: why publishing your email&#x27;s hash is not a good idea</title>
<link>http://www.developer.it/post/gravatars-why-publishing-your-email-s-hash-is-not-a-good-idea</link>
<description>&#x3C;p&#x3E;The guys at &#x3C;a href=&#x22;http://gravatar.com&#x22;&#x3E;gravatar.com&#x3C;/a&#x3E; offer a nice service: for website owners, they let you automatically associate an avatar to your users, through the user&#x27;s email address. The users who register to gravatars.com are able to change their gravatar and the change will be visible on all gravatar-enabled websites where they registered with the same email.&#x3C;/p&#x3E;

&#x3C;p&#x3E;The association email -&#x3E; avatar is done through a &#x3C;strong&#x3E;MD5 hash function&#x3C;/strong&#x3E;.
If you register to a website with username@mailprovider.com, the website will compute the hash of your email address (in this case 476c8a979eed603fb855dca149c7af6b) and associate the avatar url
&#x3C;pre class=&#x22;code&#x22;&#x3E;http://www.gravatar.com/avatar/476c8a979eed603fb855dca149c7af6b?d=identicon&#x3C;/pre&#x3E;

to your profile.
All other websites using gravatars will associate the same url to your profile, because the computation of

&#x3C;pre class=&#x22;code&#x22;&#x3E;md5sum ( username@mailprovider.com )&#x3C;/pre&#x3E;

will always yield the same result.&#x3C;/p&#x3E;

</description>
</item>
<item rdf:about="http://www.developer.it/post/modelli-di-controllo-di-accessi-come-tipi-haskell">
<title>Modelli di controllo di accessi come tipi Haskell</title>
<link>http://www.developer.it/post/modelli-di-controllo-di-accessi-come-tipi-haskell</link>
<description>&#x3C;p&#x3E;Prendendo spunto dalla lettura di &#x3C;a href=&#x22;http://geekinfosecurity.blogspot.com/2009/09/suvery-su-access-control-modes.html&#x22;&#x3E;uno dei miei blog preferiti&#x3C;/a&#x3E;, mi &#xC3;&#xA8; capitato di dare una scorsa al documento intitolato &#x3C;a href=&#x22;http://csrc.nist.gov/news_events/privilege-management-workshop/PvM-Model-Survey-Aug26-2009.pdf&#x22;&#x3E;A Survey of Access Control Models&#x3C;/a&#x3E;, che descrive modelli di controllo di accessi di complessit&#xC3;&#xA0; crescente. Questa complessit&#xC3;&#xA0; crescente si manifesta nella dipendenza da fattori intermedi sempre pi&#xC3;&#xB9; ricchi e mi &#xC3;&#xA8; venuta la tentazione di esprimere queste dipendenze come signature di funzioni in Haskell. Ecco cosa ne &#xC3;&#xA8; uscito fuori.&#x3C;/p&#x3E;
</description>
</item>
<item rdf:about="http://www.developer.it/post/debugging-croce-e-delizia">
<title>Debugging: croce e delizia</title>
<link>http://www.developer.it/post/debugging-croce-e-delizia</link>
<description>&#x3C;p&#x3E;Lo sviluppatore divide il suo tempo tra programmazione e debugging. O meglio, tra analisi, programmazione e debugging.&#x3C;/p&#x3E;

&#x3C;p&#x3E;In realt&#xC3;&#xA0; tra analisi, programmazione, debugging e studio di nuove tecnologie e linguaggi.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Per dirla tutta, a dire il vero si divide tra analisi, programmazione, debugging, studio di nuove tecnologie e linguaggi e cazzeggio su internet. Comunque sia, il debugging gli prende una buona fetta del tempo lavorativo.&#x3C;/p&#x3E;

&#x3C;p&#x3E;Ricordo con raccapriccio i vari giorni passati a capire perch&#xC3;&#xA9; la mia libreria di array dinamici in C++ non funzionasse come doveva. Stavo imparando il linguaggio e quando liberavo la memoria non chiamavo il distruttore per ogni singolo oggetto. Persi giornate a scervellarmi, a fare prove su prove, rompendo quello che funzionava, guardando il codice con l&#x27;intensit&#xC3;&#xA0; con cui guarderei dalla finestra se avessi la Cucinotta come dirimpettaia, finch&#xC3;&#xA9;...&#x3C;/p&#x3E;

</description>
</item>
<item rdf:about="http://www.developer.it/post/pillole-di-haskell-ricerca-di-duplicati">
<title>Pillole di Haskell - ricerca di duplicati</title>
<link>http://www.developer.it/post/pillole-di-haskell-ricerca-di-duplicati</link>
<description>&#x3C;p&#x3E;Di recente ho dovuto scrivere una funzioncina in Haskell per trovare elementi duplicati in una lista. Anche se non necessariamente il pi&#xC3;&#xB9; furbo, trovo che il metodo che ho usato fornisca un esempio interessante di programmazione funzionale in questo linguaggio.&#x3C;/p&#x3E;
&#x3C;p&#x3E;L&#x27;idea (semplice) &#xC3;&#xA8; la seguente: ordiniamo la lista (il che richiede che gli elementi siano confrontabili, cio&#xC3;&#xA8; che appartengano alla classe Ord) e poi cerchiamo due elementi consecutivi uguali. Mostro come implementare quest&#x27;idea, procedendo per applicazioni consecutive di funzioni.&#x3C;/p&#x3E;

</description>
</item>
<item rdf:about="http://www.developer.it/post/il-paradosso-di-php">
<title>Il paradosso di PHP</title>
<link>http://www.developer.it/post/il-paradosso-di-php</link>
<description>&#x3C;p&#x3E;Negli ultimi giorni ho installato e personalizzato un sito basato su &#x3C;a href=&#x22;http://www.drupal.org&#x22;&#x3E;Drupal&#x3C;/a&#x3E;. Dopo un po&#x27; di anni in cui ho tenuto pi&#xC3;&#xB9; o meno d&#x27;occhio questo CMS, per la prima volta l&#x27;ho utilizzato per un progetto abbastanza complesso, studiando la documentazione, installando moduli, provando temi, dando un&#x27;occhiata al DB (per la cronaca, ho scelto &#x3C;a href=&#x22;/post/storie-di-database-l-elefante-il-delfino-e-la-piuma&#x22;&#x3E;PostgreSQL&#x3C;/a&#x3E;).
Niente da dire: un prodotto complesso, configurabile, con una miriade di moduli che si installano in maniera semplice e pulita (ognuno vive nella sua directory) e arricchiscono l&#x27;interfaccia di nuove funzionalit&#xC3;&#xA0;, sia per l&#x27;utente che per l&#x27;amministratore. In un fine settimana ho messo in piedi un sito di una certa complessit&#xC3;&#xA0;, arrivando ad un risultato che soddisfa appieno le mie esigenze ed &#xC3;&#xA8; aperto a nuovi sviluppi.&#x3C;/p&#x3E;
&#x3C;p&#x3E;E per l&#x27;ennesima volta, come mi &#xC3;&#xA8; capitato anche facendo esperimenti con &#x3C;a href=&#x22;http://www.piwik.org&#x22;&#x3E;Piwik&#x3C;/a&#x3E;, sono rimasto un po&#x27; perplesso.&#x3C;/p&#x3E;
&#x3C;p&#x3E;&#x3C;strong&#x3E;PHP come linguaggio di programmazione fa schifo.&#x3C;/strong&#x3E;

</description>
</item>
<item rdf:about="http://www.developer.it/post/storie-di-database-l-elefante-il-delfino-e-la-piuma">
<title>Storie di database: l&#x27;elefante, il delfino e la piuma</title>
<link>http://www.developer.it/post/storie-di-database-l-elefante-il-delfino-e-la-piuma</link>
<description>&#x3C;p&#x3E;Di recente si &#xC3;&#xA8; verificata una curiosa successione di avvenimenti: la &#x3C;strong&#x3E;Sun&#x3C;/strong&#x3E; ha comprato &#x3C;a href=&#x22;http://www.mysql.com&#x22;&#x3E;MySQL&#x3C;/a&#x3E; e a distanza di circa un anno &#x3C;strong&#x3E;Oracle&#x3C;/strong&#x3E; ha comprato Sun.
Questo vuol dire che un mostro dei DB commerciali ora possiede e controlla il pi&#xC3;&#xB9; usato dei DB open source. E gi&#xC3;&#xA0; si ventilano in giro fork e contro-fork che manco il PCI dopo la caduta del Muro.&#x3C;/p&#x3E;

&#x3C;p&#x3E;La questione &#xC3;&#xA8; interessante e sar&#xC3;&#xA0; interessante vedere come la comunit&#xC3;&#xA0; reagir&#xC3;&#xA0; al controllo di un prodotto molto usato e amato da parte di un&#x27;entit&#xC3;&#xA0; commerciale che non ha una grande storia di supporto al Software Libero, ma che ha appena acquistato &#x3C;a href=&#x22;http://www.sun.com&#x22;&#x3E;una societ&#xC3;&#xA0;&#x3C;/a&#x3E; che al Software Libero ha contribuito in maniera enorme.&#x3C;/p&#x3E;

</description>
</item>
<item rdf:about="http://www.developer.it/post/conversione-di-html-in-pdf-con-openoffice-e-word-2007">
<title>Conversione di HTML in PDF con OpenOffice e Word 2007</title>
<link>http://www.developer.it/post/conversione-di-html-in-pdf-con-openoffice-e-word-2007</link>
<description>&#x3C;body&#x3E;
 &#x3C;p align=&#x22;justify&#x22;&#x3E;A quanti di voi non &#x26;egrave; mai  venuto in mente  &#x3C;strong&#x3E;di convertire in modo automatizzato documenti in formato HTML (o anche  da altri formati) in PDF&#x3C;/strong&#x3E;? La prima domanda &#x26;egrave;: cosa utilizzare? Naturalmente un prodotto open source! &#x3C;/p&#x3E;
 &#x3C;p align=&#x22;justify&#x22;&#x3E;A  questo punto iniziate la navigazione su Internet alla ricerca di qualche tool o libreria open source per il vostro linguaggio preferito. E qui purtroppo c&#x27;&#x26;egrave; la prima deroga: il vincolo sul linguaggio pu&#x26;ograve; implicare un vincolo sul tool/API da utilizzare. Non &#x26;egrave; detto infatti che esista l&#x27;API per il linguaggio da voi preferito.&#x3C;/p&#x3E;

</description>
</item>
</rdf:RDF>