<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><!-- 

  Movable Type 4.x FeedBurner Atom Template

  This is a free template for Movable Type blogging platform.
  This template creates a valid Atom feed to submit to FeedBurner.

  For further information about FeedBurner visit http://www.feedburner.com/.

  Please do not change or remove this section.

  @category   MovableType
  @package    MovableType-4.x
  @author     Simone Carletti <weppos@weppos.net>
  @copyright  2003-2008 The Authors
  @license    
  @version    
  @link       http://www.simonecarletti.com/
  @source     http://github.com/weppos/movabletype-templates/

--><feed xmlns="http://www.w3.org/2005/Atom" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
  <title>Simone Carletti's Blog</title>
  <link rel="alternate" type="text/html" href="http://www.simonecarletti.com/blog/" />
  
  <id>tag:www.simonecarletti.com,2008-08-13:/blog//1</id>
  <updated>2008-11-19T21:38:16Z</updated>
  <subtitle>Un piccolo spazio nel web con approfondimenti su programmazione, feed RSS / Atom, motori di ricerca e marketing.</subtitle>
  <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.2-en</generator>
  
  <!-- start entries -->
  
  <!-- start entry 812 -->
  <link rel="self" href="http://feeds.feedburner.com/simonecarletti" type="application/atom+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><entry>
    <title>Introduzione a ActiveRecord (video)</title>
    <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/simonecarletti/~3/458852200/video-activerecord.php" />
    <id>tag:www.simonecarletti.com,2008:/blog//1.812</id>
  
    <published>2008-11-19T21:27:07Z</published>
    <updated>2008-11-19T21:38:16Z</updated>
  
    <summary>Dopo l'introduzione al framework Ruby on Rails ecco una panoramica su ActiveRecord, la libreria Ruby che consente a Rails di interagire con i database.</summary>
    <author>
      <name>Simone Carletti</name>
      <uri>http://www.simonecarletti.com</uri>
    </author>
      
    <!-- start categories -->
    
      <category term="Ruby" scheme="http://www.sixapart.com/ns/types#category" />
    
      <category term="Video" scheme="http://www.sixapart.com/ns/types#category" />
    
    <!-- end categories -->
    
    <!-- start tags -->
    
      <category term="activerecord" label="activerecord" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="htmlit" label="html.it" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="ictv" label="ictv" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="rails" label="rails" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="ruby" label="ruby" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="video" label="video" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <!-- end tags -->
    
    <content type="html" xml:lang="en" xml:base="http://www.simonecarletti.com/blog/">
      &lt;p&gt;Dopo l'&lt;a href="http://www.ictv.it/file/vedi/675/ruby-on-rails/" title="Ruby on Rails | Focus | developer | ICTv"&gt;introduzione al framework Ruby on Rails&lt;/a&gt; ecco una panoramica su ActiveRecord, la libreria Ruby che consente a Rails di interagire con i database.&lt;/p&gt;

&lt;p&gt;Giusto per essere chiaro, la verve da dinosauro preistorico con limitata capacità espressiva che ho dimostrato in questo video è dovuta al fatto che descrivere a voce un codice sorgente leggendo da un copione senza ottenere un video incomprensibile è più difficile di quanto si pensi. Ad ogni modo, vi invito ad apprezzare i contenuti del video che ritengo offra un'ottima panoramica sulle caratteristiche principali di questa splendida libreria.&lt;/p&gt;
      &lt;div class="centered"&gt;
&lt;script type='text/javascript' src='http://common.html.it/bin/player/show_video.js?uid=0bFimekn+gB8t9Vc6cH1cQ3OrIU='&gt;&lt;/script&gt;&lt;object id='html-it-video-player' type='application/x-shockwave-flash' data='http://common.html.it/bin/player/player.swf?external=1&amp;amp;autoplay=0&amp;amp;uid=0bFimekn+gB8t9Vc6cH1cQ3OrIU=' width='470' height='405'&gt;&lt;param name='movie' value='http://common.html.it/bin/player/player.swf?external=1&amp;amp;autoplay=0&amp;amp;uid=0bFimekn+gB8t9Vc6cH1cQ3OrIU='/&gt;&lt;param name='allowScriptAccess' value='always' /&gt;&lt;!-- inserisci contenuto alternativo in assenza del Flash Player --&gt;&lt;/object&gt;
&lt;/div&gt;

      &lt;hr /&gt;
      &lt;p&gt;News Source: &lt;a href="http://www.simonecarletti.com/blog/2008/11/video-activerecord.php" title="Introduzione a ActiveRecord (video)"&gt;Introduzione a ActiveRecord (video)&lt;/a&gt;&lt;br /&gt;
      News URI: http://www.simonecarletti.com/blog/2008/11/video-activerecord.php&lt;/p&gt;
      &lt;p&gt;Copyright &amp;copy; 2005-2008 &lt;strong&gt;&lt;a href="http://www.simonecarletti.com"&gt;Simone Carletti&lt;/a&gt;&lt;/strong&gt;. This Feed is for non-commercial use only and licensed under &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.5/"&gt;Creative Common Attribution-NonCommercial-ShareAlike 2.5&lt;/a&gt; license. If you are not reading this material in your feed aggregator, the site you are looking at may be guilty of copyright infringement. Please contact me, so I can take appropriate action.&lt;/p&gt;    

    
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/simonecarletti?a=mgg6y4"&gt;&lt;img src="http://feeds.feedburner.com/~a/simonecarletti?i=mgg6y4" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=AeDcN"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=AeDcN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=U13aN"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=U13aN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=XfOan"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=XfOan" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=LpaQn"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=LpaQn" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simonecarletti/~4/458852200" height="1" width="1"/&gt;</content>
     
    <!-- slash namespace -->
    <slash:comments>0</slash:comments>
     
  <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=simonecarletti&amp;itemurl=http%3A%2F%2Fwww.simonecarletti.com%2Fblog%2F2008%2F11%2Fvideo-activerecord.php</feedburner:awareness><feedburner:origLink>http://www.simonecarletti.com/blog/2008/11/video-activerecord.php</feedburner:origLink></entry>
  <!-- end entry 812 -->
  
  <!-- start entry 811 -->
  <entry>
    <title>In principio era l'ASP... poi arrivò Ruby e nulla fu più come prima</title>
    <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/simonecarletti/~3/456461599/in-principio-era-asp-poi-arrivo-ruby.php" />
    <id>tag:www.simonecarletti.com,2008:/blog//1.811</id>
  
    <published>2008-11-17T21:51:14Z</published>
    <updated>2008-11-17T21:59:33Z</updated>
  
    <summary>Un esempio di migrazione di un codice di una pagina web da ASP a Ruby con Rails.</summary>
    <author>
      <name>Simone Carletti</name>
      <uri>http://www.simonecarletti.com</uri>
    </author>
      
    <!-- start categories -->
    
      <category term="Programmazione" scheme="http://www.sixapart.com/ns/types#category" />
    
    <!-- end categories -->
    
    <!-- start tags -->
    
      <category term="asp" label="asp" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="ruby" label="ruby" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="wepposcom" label="weppos.com" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <!-- end tags -->
    
    <content type="html" xml:lang="en" xml:base="http://www.simonecarletti.com/blog/">
      &lt;p&gt;Dopo &lt;a href="http://www.simonecarletti.com/blog/2008/06/nuovo-sito-per-asp-stats-generator.php"&gt;il sito di ASP Stats Generator&lt;/a&gt;, sto rimettendo mano a &lt;a href="http://www.weppos.com/"&gt;Weppos.com&lt;/a&gt; per convertire l'ultimo progetto ancora in ASP che mi obbliga a tenere in piedi un server Windows (sì, server non hosting).&lt;/p&gt;

&lt;p&gt;Non so a voi, ma dopo aver gustato PHP, Java e soprattutto Ruby devo dire che ASP non mi manca per nulla.&lt;/p&gt;
      &lt;p&gt;Direttamente dal 2003...&lt;/p&gt;

&lt;pre name="code" class="vb"&gt;
&lt;%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%&gt;
&lt;% Option Explicit %&gt;
&lt;!--#include file="../common.asp"--&gt;
&lt;!--#include file="../../functions/utils.feed.asp"--&gt;
&lt;!--#include file="../../functions/utils.asp-error.asp"--&gt;
&lt;%

Dim strPageName
Dim dtmErrorDate
Dim strErrorTitle
'Dim strErrorSummary
Dim strFunctionSyntax
Dim strErrorContent
Dim strErrorMessageEn
Dim strErrorMessageIt
Dim intErrorViews
Dim strLayout

' Ricava nome pagina e funzione
strPageName = getPageName()
strErrorTitle = convertPageToError(strPageName)
intErrorID = 0
ii = 1

' Richiama informazioni funzione
strSQL = "SELECT * " &amp;_
"FROM tbl_asp_error " &amp;_
"WHERE Showitem = 1 AND Error_title = '" &amp; strErrorTitle &amp; "' "
objRs.Open strSQL, objConn
if not objRs.EOF then
	intErrorID = Cint(objRs("Error_ID"))
	strErrorTitle = objRs("Error_title")
	dtmErrorDate = Cdate(objRs("Error_date"))
	strErrorSummary = objRs("Error_summary")
	strErrorContent = objRs("Error_content")
	strErrorMessageEn = objRs("Error_message_en")
	strErrorMessageIt = objRs("Error_message_it")
	intErrorViews = Clng(objRs("No_of_views"))
end if
objRs.Close

' 
if intErrorID &lt;&gt; 0 then
	
	' Aggiornamento letture
	strSQL = "UPDATE tbl_asp_error SET No_of_views = No_of_views + 1 WHERE Error_ID = " &amp; intErrorID
	objConn.Execute(strSQL)

else
	
	Set objRs = Nothing
	objConn.Close
	Set objConn = Nothing
	Response.Redirect("default.asp")
	
end if

' Titolo
strLayout = vbCrLf &amp; "&lt;h2&gt;&lt;img src=""/images/icons/folder.gif"" alt=""" &amp; strErrorTitle &amp; """ /&gt; " &amp; strErrorTitle &amp; "&lt;/h2&gt;"

' Informazioni
strLayout = strLayout &amp; vbCrLf &amp; "&lt;small&gt;Inserito il " &amp; FormatDateTime(dtmErrorDate, vbShortDate) &amp;_
" - letto " &amp; intErrorViews &amp; " volte&lt;/small&gt;"

' Messaggi di errore
if Len(strErrorMessageEn) &gt; 0 then
	strLayout = strLayout &amp; vbCrLf &amp; "&lt;div id=""error-message-en""&gt;" &amp;_
	"&lt;h3&gt;Messaggio di errore in Inglese&lt;/h3&gt;" &amp;_
	"&lt;code&gt;" &amp; strErrorMessageEn &amp; "&lt;/code&gt;&lt;/div&gt;"
end if
if Len(strErrorMessageIt) &gt; 0 then
	strLayout = strLayout &amp; vbCrLf &amp; "&lt;div id=""error-message-en""&gt;" &amp;_
	"&lt;h3&gt;Messaggio di errore in Italiano&lt;/h3&gt;" &amp;_
	"&lt;code&gt;" &amp; strErrorMessageIt &amp; "&lt;/code&gt;&lt;/div&gt;"
end if
		
' Contenuto
strLayout = strLayout &amp; vbCrLf &amp;_
"&lt;h3&gt;Da cosa dipende e come risolvere il problema...&lt;/h3&gt;" &amp;_
"&lt;p&gt;" &amp; strErrorContent &amp; "&lt;/p&gt;"
		
strPageTitle = strErrorTitle &amp; " | " &amp; arySectionsAsp(1, 5)
strPageTitle2 = strErrorTitle
strPageContent = strLayout
strNavinfoMenu = navyHome("/", true) &amp; navySection("", true, arySections(1, 4), arySections(3, 4)) &amp; navyLevel("default.asp", true, arySectionsAsp(1, 5))  

%&gt;
&lt;!--#include file="includes/template.inc.asp"--&gt;
&lt;/pre&gt;

&lt;p&gt;... ad oggi.&lt;/p&gt;

&lt;pre name="code" class="ruby"&gt;
def show
  @error = Error.find(params[:id])
  @error.increment!(:nof_views)
end
&lt;/pre&gt;

&lt;pre name="code" class="html"&gt;
&lt;div id="asperror" class="item"&gt;
  
  &lt;!-- start content --&gt;
  &lt;div class="item-content"&gt;

    ...

  &lt;/div&gt;
  &lt;!-- end content --&gt;

  &lt;div class="item-footer"&gt;
    &lt;% admin_block(:class =&gt; 'alignleft') do %&gt;
      &lt;%= link_to 'Edit', edit_error_path(@error), :class =&gt; 'adminIcon iconEdit' %&gt; &amp;middot;
      &lt;%= link_to 'Destroy', @error, :confirm =&gt; 'Are you sure?', :method =&gt; :delete, :class =&gt; 'adminIcon iconDestroy' %&gt;
    &lt;% end %&gt;
    Views: &lt;strong&gt;&lt;%= @error.nof_views %&gt;&lt;/strong&gt; &amp;middot;
    Date:  &lt;strong&gt;&lt;%= @error.published_at.to_s(:long) %&gt;&lt;/strong&gt;
  &lt;/div&gt;

&lt;/div&gt;

&lt;% title "Error #{@error.title}" -%&gt;

&lt;% sidebar do %&gt;
  &lt;%= render :partial =&gt; 'layouts/sections_asp' %&gt;
  &lt;br /&gt;
  &lt;%= render :partial =&gt; 'latest_errors', :locals =&gt; { :latest_errors =&gt; latest_errors } %&gt;
&lt;% end %&gt;
&lt;/pre&gt;

      &lt;hr /&gt;
      &lt;p&gt;News Source: &lt;a href="http://www.simonecarletti.com/blog/2008/11/in-principio-era-asp-poi-arrivo-ruby.php" title="In principio era l'ASP... poi arrivò Ruby e nulla fu più come prima"&gt;In principio era l'ASP... poi arrivò Ruby e nulla fu più come prima&lt;/a&gt;&lt;br /&gt;
      News URI: http://www.simonecarletti.com/blog/2008/11/in-principio-era-asp-poi-arrivo-ruby.php&lt;/p&gt;
      &lt;p&gt;Copyright &amp;copy; 2005-2008 &lt;strong&gt;&lt;a href="http://www.simonecarletti.com"&gt;Simone Carletti&lt;/a&gt;&lt;/strong&gt;. This Feed is for non-commercial use only and licensed under &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.5/"&gt;Creative Common Attribution-NonCommercial-ShareAlike 2.5&lt;/a&gt; license. If you are not reading this material in your feed aggregator, the site you are looking at may be guilty of copyright infringement. Please contact me, so I can take appropriate action.&lt;/p&gt;    

    
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/simonecarletti?a=Lebee2"&gt;&lt;img src="http://feeds.feedburner.com/~a/simonecarletti?i=Lebee2" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=zJtuN"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=zJtuN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=LZNRN"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=LZNRN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=Qw0an"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=Qw0an" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=w5Man"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=w5Man" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simonecarletti/~4/456461599" height="1" width="1"/&gt;</content>
     
    <!-- slash namespace -->
    <slash:comments>3</slash:comments>
     
  <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=simonecarletti&amp;itemurl=http%3A%2F%2Fwww.simonecarletti.com%2Fblog%2F2008%2F11%2Fin-principio-era-asp-poi-arrivo-ruby.php</feedburner:awareness><feedburner:origLink>http://www.simonecarletti.com/blog/2008/11/in-principio-era-asp-poi-arrivo-ruby.php</feedburner:origLink></entry>
  <!-- end entry 811 -->
  
  <!-- start entry 810 -->
  <entry>
    <title>Movable Type o WordPress? Difficile decisione...</title>
    <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/simonecarletti/~3/455193278/movabletype-o-wordpress.php" />
    <id>tag:www.simonecarletti.com,2008:/blog//1.810</id>
  
    <published>2008-11-16T19:19:10Z</published>
    <updated>2008-11-16T20:52:12Z</updated>
  
    <summary>Un confronto tra le funzionalità delle piattaforme per blog WordPress e Movable Type.</summary>
    <author>
      <name>Simone Carletti</name>
      <uri>http://www.simonecarletti.com</uri>
    </author>
      
    <!-- start categories -->
    
      <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
    
      <category term="Piattaforme Blog" scheme="http://www.sixapart.com/ns/types#category" />
    
    <!-- end categories -->
    
    <!-- start tags -->
    
      <category term="movabletype" label="movabletype" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="wordpress" label="wordpress" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <!-- end tags -->
    
    <content type="html" xml:lang="en" xml:base="http://www.simonecarletti.com/blog/">
      &lt;p&gt;Sono innegabilmente un grande fan di Movable Type. Utilizzo questa piattaforma fin dal primo giorno e gestisce felicemente, oltre a questo sito, anche numerosi altri progetti tra i quali &lt;a href="http://www.rss-world.info/" title="RSS World - Un mondo dedicato ai feed RSS, Atom e Blog"&gt;RSS World&lt;/a&gt;.
In tutto questo tempo ho sempre preferito MovableType a WordPress per vari motivi che ho raccontato qua e là nel tempo.&lt;/p&gt;

&lt;p&gt;Tuttavia, questi motivi sono andati scemando poco per volta a partire dal rilascio di &lt;strong&gt;WordPress 2.5 che, lo ammetto, comincia ad essere un bel prodottino&lt;/strong&gt;. Lasciando da parte l'eventuale massacro che sarebbe la migrazione, vorrei mettere sul piatto pro e contro delle due soluzioni.&lt;br /&gt;
E' probabile che dovrò fare una scelta prima del completamento del nuovo sito, ma preferisco attendere WordPress 2.7 per valutare la nuova piattaforma.&lt;/p&gt;

&lt;p&gt;Nel frattempo vi regalo qualche impressione sulle due piattaforme a confronto. Questo non vuole essere il solito post &lt;em&gt;meglio questo o quello&lt;/em&gt; ma semplicemente una mia personale riflessione ad alta voce.&lt;/p&gt;
      &lt;h2&gt;Pro di WordPress&lt;/h2&gt;

&lt;h3&gt;Editor WYSIWYG&lt;/h3&gt;

&lt;p&gt;&lt;img src="http://www.simonecarletti.com/blog/public/2008/11/movabletype-o-wordpress/editor-wordpress.png" width="400" height="195" alt="editor-wordpress.png" class="centered" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;L'editor di WordPress mi è sempre piaciuto.&lt;/strong&gt; Intendiamoci, detesto gli editor WYSIWYG, ma l'implementazione di TinyMCE su WordPress mi ha sempre stuzzicato come un'amante perversa.&lt;br /&gt;
Anche MovableType ha un editor WYSIWYG a partire dalla release 4.0, ma Six Apart continua ad ostinarsi a svilupparlo in casa offrendo una soluzione che, a confronto, ha la potenza di una pistola paragonata con una testata nucleare.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.simonecarletti.com/blog/public/2008/11/movabletype-o-wordpress/editor-movabletype.png" width="400" height="284" alt="editor-movabletype.png" class="centered" /&gt;&lt;/p&gt;

&lt;h3&gt;Linguaggio comprensibile&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;WordPress è scritto in PHP&lt;/strong&gt; che, almeno per il sottoscritto, è decisamente più comprensibile rispetto a Perl. Più volte è rimbalzata un'indiscrezione di una possibile riscrittura di Movable Type in Ruby, ma credo che fosse solo una bufala di dubbio gusto.&lt;/p&gt;

&lt;p&gt;WordPress non brilla certo per la qualità del codice. Non ci sono unit test, il team di ostina a voler mantenere compatibilità con PHP 4 riempiendo così l'applicazione di hack e workaround senza sfruttare a pieno le caratteristiche di PHP 5. Insomma, &lt;strong&gt;un PHP decisamente migliorabile&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Tuttavia, essendo scritto in PHP ho modo di realizzare da me i plugin, correggere eventuali errori e soprattutto indagare perché la funzione che dovrebbe funzionare non funziona.&lt;/p&gt;

&lt;h3&gt;Aggiornamento automatico&lt;/h3&gt;

&lt;p&gt;L'introduzione dell'aggiornamento automatico del plugin è stato un vero e proprio colpo al cuore per un fedele di MovableType come il sottoscritto.&lt;br /&gt;
L'aggiornamento automatico della piattaforma, previsto per WordPress 2.7, è il colpo di grazia, un'orgasmo informatico che da solo vale l'intera release.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.simonecarletti.com/blog/public/2008/11/movabletype-o-wordpress/autoupdate.png" width="400" height="86" alt="autoupdate.png" class="centered" /&gt;&lt;/p&gt;

&lt;h3&gt;Velocità&lt;/h3&gt;

&lt;p&gt;MovableType non ha mai brillato per velocità, soprattutto in alcune funzioni come il modulo di ricerca. Più volte mi sono ritrovato di fronte ad una triste &lt;a href="http://www.simonecarletti.com/blog/2008/08/in-caso-di-internal-server-error.php" title="In caso di Internal Server Error"&gt;pagina di internal server error&lt;/a&gt; causata da sovraccarico del server (e relativa policy di Dreamhost di killare tutti i processi attivi oltre un limitato periodo di tempo). La funzionalità di ricerca di WordPress è rapida, l'amministrazione quasi immediata e la pubblicazione dei post non richiede rebuild, come recentemente introdotto da MovableType.&lt;/p&gt;

&lt;p&gt;La scrittura statica dei template di MovableType è un'ottima soluzione per risparmiare risorse ma alcune letture mi hanno confermato che diversi plugin per WordPress introducono &lt;a href="http://wordpress.org/extend/plugins/wp-cache/" title="WordPress &amp;#8250; WP-Cache &amp;laquo; WordPress Plugins"&gt;supporto evoluto&lt;/a&gt; &lt;a href="http://wordpress.org/extend/plugins/wp-super-cache/" title="WordPress &amp;#8250; WP Super Cache &amp;laquo; WordPress Plugins"&gt;al caching&lt;/a&gt; in grado di soddisfare anche i palati più esigenti.&lt;/p&gt;

&lt;p&gt;Certo, se solo il listing di un post non richiedesse 18 query...&lt;/p&gt;

&lt;h3&gt;Community&lt;/h3&gt;

&lt;p&gt;&lt;img src="http://www.simonecarletti.com/blog/public/2008/11/movabletype-o-wordpress/wordpress-family.png" width="250" height="250" alt="wordpress-family.png" class="alignright" /&gt;
&lt;strong&gt;La community è senza dubbio uno dei punti di forza di WordPress&lt;/strong&gt;, da sempre.&lt;/p&gt;

&lt;p&gt;La community ha prodotto centinaia di plugin di qualità, la rete è piena di tutoria e guide dedicate a WordPress che permettono di sviscerare la piattaforma in ogni suo dettaglio. La community ha creato software ad hoc per WordPress, un sistema di gestione via iPhone e decine di altri gadget gustosi.&lt;/p&gt;

&lt;p&gt;Automattic è particolarmente attento alla community e le acquisizioni di Gravatar, IntenseDebate e PollDaddy sono un'ottima dimostrazione della volontà di crescere e migliorare costantemente la piattaforma.&lt;/p&gt;

&lt;p&gt;Senza dubbio un ottimo punto a favore di WordPress!&lt;/p&gt;


&lt;h2&gt;Cosa mi dispiacerebbe abbandonare&lt;/h2&gt;

&lt;h3&gt;Amministrazione Utenti&lt;/h3&gt;

&lt;p&gt;Un'eccellente sistema di gestione dei permessi e degli utenti... ma che cavolo, scrivo solo io su questo blog!&lt;/p&gt;

&lt;h3&gt;Multiblog&lt;/h3&gt;

&lt;p&gt;Qui arriviamo al punto dolente, uno dei principali motivi (se non il principale) che mi ha tenuto lontano da WordPress fino ad oggi e che continua a giocare un ruolo importante nella scelta: il &lt;strong&gt;multiblog&lt;/strong&gt;.&lt;br /&gt;
Ogni installazione di WordPress gestisce un blog ed uno solo, salvo plugin, accrocchi o stratagemmi vari.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MovableType invece gestirsce illimitati blog in contemporanea&lt;/strong&gt; consentendomi di condividere risorse, template ed elementi tra le varie istanze in modo del tutto trasparente. Una installazione, illimitati blog.&lt;/p&gt;

&lt;h3&gt;Gestione TrackBack e Commenti&lt;/h3&gt;

&lt;p&gt;Su questo punto WordPress ha ancora molta strada da fare. La gestione dei commenti e dei trackback in MovableType è decisamente più evoluta e permette di visualizzare, moderare e gestire questi due tipi di feedback in modo più efficace.&lt;br /&gt;
Non per ultimo, l'interfaccia di scrittura dei post consente di indicare URL per l'invio dei trackback, mentre lato amministrazione è possibile abilitare/disabilitare le funzionalità o alterarne il comportamento.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.simonecarletti.com/blog/public/2008/11/movabletype-o-wordpress/manual-trackback.png" width="302" height="161" alt="manual-trackback.png" class="centered" /&gt;&lt;/p&gt;

&lt;h3&gt;Template Tag&lt;/h3&gt;

&lt;p&gt;Anche se WordPress mi consente di utilizzare PHP, &lt;strong&gt;i template Tag di MovableType sono un'inestimabile risorsa&lt;/strong&gt;. Permettono di interagire con praticamente qualsiasi contenuto del blog in modo semplice ed efficare.&lt;br /&gt;
Non nego che siano complessi da imparare, ma una volta memorizzati permettono di scrivere un template decisamente più pulito di quelli di WordPress.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.simonecarletti.com/blog/public/2008/11/movabletype-o-wordpress/template-tags.png" width="218" height="206" alt="template-tags.png" class="centered" /&gt;&lt;/p&gt;

&lt;h3&gt;Gestione dei template&lt;/h3&gt;

&lt;p&gt;La gestione dei template è sempre stata molto soggettiva. Conosco decine di utenti ai quali viene il mal di testa al solo pensiero di aprire il pannello di MovableType, ma vi assicuro che il sistema offre funzionalità molto più evolute rispetto a WordPress.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.simonecarletti.com/blog/public/2008/11/movabletype-o-wordpress/template-management.png" width="400" height="315" alt="template-management.png" class="centered" /&gt;&lt;/p&gt;

&lt;p&gt;Il pannello di modifica di un template di WordPress si limita ad aprire un'area di testo infilandoci dentro il contenuto del file corrispondente. La gestione dei template di MovableType è gerarchica rispetto al blog e agli altri blog disponbili.&lt;br /&gt;
E' possibile creare template e moduli (tipo i parziali in Rails), associare a ciascuno operazioni di caching e di pubblicazione personalizzate, creare illimitati nuovi template per generare feed, pagine e listing in pochi click usando i template tag.&lt;/p&gt;

&lt;p&gt;Eh sì, la gestione dei template mi mancherebbe proprio!&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.simonecarletti.com/blog/public/2008/11/movabletype-o-wordpress/template-edit.png" width="400" height="444" alt="template-edit.png" class="centered" /&gt;&lt;/p&gt;

&lt;h3&gt;E se io non volessi MySQL?&lt;/h3&gt;

&lt;p&gt;Recentemente in azienda abbiamo iniziato la migrazione della infrastruttura database a &lt;a href="http://www.postgresql.org/" title="PostgreSQL: 
The world's most advanced open source database"&gt;PostreSQL&lt;/a&gt;, conosciuto come il più evoluto database open source.&lt;br /&gt;
I risultati non si sono fatti attendere sia dal piano delle performance che dell'affidabilità.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MovableType supporta nativamente MySQL ma anche SQLite e PostreSQL&lt;/strong&gt;. WordPress invece consente solo di utilizzare MySQL e l'intera architettura è strettamente fusa con il programma, rendendo impossibile oltre che improbabile il supporto futuro ad altri database.&lt;/p&gt;


&lt;h2&gt;A pari merito&lt;/h2&gt;

&lt;h3&gt;Upload&lt;/h3&gt;

&lt;p&gt;La gestione e upload di risorse esterne è notevolmente migliorata nelle ultime versioni di WordPress e supera di gran lunga in semplicità e caratteristiche la versione base di MovableType. Tuttavia, su quest'ultimo ho da tempo installato &lt;a href="http://www.simonecarletti.com/blog/2006/12/better_file_uploader_2.php" title="Movable Type Plugin: Upload senza confini con Better File Uploader 2.0 - Simone Carletti's Blog"&gt;Better File Uploader&lt;/a&gt; colmando (e superando) così il divario tra le due piattaforme. In fin dei conti, posso attribuire un pareggio.&lt;/p&gt;

&lt;h3&gt;Gestione Post e Pagine&lt;/h3&gt;

&lt;p&gt;Escluse differenze cosmetiche e minimamente funzionali, la gestione dei post e delle pagine si equivale su entrambe le piattaforme. Leggermente più evoluta, a mio avviso, l'interfaccia per la scrittura dei post in Movable Type 4.2 rispetto a WordPress 2.6, ma presumo che le cose potrebbero cambiare con WordPress 2.7.&lt;/p&gt;

&lt;p&gt;Per ora un meritato pareggio.&lt;/p&gt;

&lt;h3&gt;Antispam&lt;/h3&gt;

&lt;p&gt;Akismet è da sempre il compagno fedele di WordPress fin dalle prime versioni. Da un paio d'anni è disponibile un &lt;a href="http://www.simonecarletti.com/blog/2006/04/akismet_movable_type.php" title="Akismet alla prova su Movable Type"&gt;plugin ufficiale anche per MovableType&lt;/a&gt; che adotto per impostazione predefinita su qualsiasi istanza della piattaforma.&lt;br /&gt;
Anche in questo caso un pareggio, nonostante vorrei sottolineare ancora una volta che la gestione dei commenti offre maggiore flessibilità su MovableType. In questo caso è possibile determinare il peso di Akismet nel processo di valutazione del commento e limitare eventuali falsi positivi.&lt;/p&gt;


&lt;h2&gt;In conclusione&lt;/h2&gt;

&lt;p&gt;Anche se avrei potuto andare avanti ancora per un po', direi che ci sono sufficienti spunti di riflessione.
Giusto per confondermi le idee... &lt;strong&gt;voi perché avete scelto WordPress o MovableType&lt;/strong&gt;?&lt;/p&gt;

      &lt;hr /&gt;
      &lt;p&gt;News Source: &lt;a href="http://www.simonecarletti.com/blog/2008/11/movabletype-o-wordpress.php" title="Movable Type o WordPress? Difficile decisione..."&gt;Movable Type o WordPress? Difficile decisione...&lt;/a&gt;&lt;br /&gt;
      News URI: http://www.simonecarletti.com/blog/2008/11/movabletype-o-wordpress.php&lt;/p&gt;
      &lt;p&gt;Copyright &amp;copy; 2005-2008 &lt;strong&gt;&lt;a href="http://www.simonecarletti.com"&gt;Simone Carletti&lt;/a&gt;&lt;/strong&gt;. This Feed is for non-commercial use only and licensed under &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.5/"&gt;Creative Common Attribution-NonCommercial-ShareAlike 2.5&lt;/a&gt; license. If you are not reading this material in your feed aggregator, the site you are looking at may be guilty of copyright infringement. Please contact me, so I can take appropriate action.&lt;/p&gt;    

    
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/simonecarletti?a=8zeNHl"&gt;&lt;img src="http://feeds.feedburner.com/~a/simonecarletti?i=8zeNHl" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=OEPYN"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=OEPYN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=QxYcN"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=QxYcN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=sI6Xn"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=sI6Xn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=murwn"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=murwn" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simonecarletti/~4/455193278" height="1" width="1"/&gt;</content>
     
    <!-- slash namespace -->
    <slash:comments>13</slash:comments>
     
  <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=simonecarletti&amp;itemurl=http%3A%2F%2Fwww.simonecarletti.com%2Fblog%2F2008%2F11%2Fmovabletype-o-wordpress.php</feedburner:awareness><feedburner:origLink>http://www.simonecarletti.com/blog/2008/11/movabletype-o-wordpress.php</feedburner:origLink></entry>
  <!-- end entry 810 -->
  
  <!-- start entry 808 -->
  <entry>
    <title>Parallels Desktop 4 per Mac: performance, software ed integrazione</title>
    <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/simonecarletti/~3/454820111/parallels-4-per-mac.php" />
    <id>tag:www.simonecarletti.com,2008:/blog//1.808</id>
  
    <published>2008-11-16T11:17:11Z</published>
    <updated>2008-11-17T13:25:42Z</updated>
  
    <summary>Parallels ha annunciato il rilascio di Parallels Desktop 4, la quarta versione del software di virtualizzazione più famoso per Mac OSX.</summary>
    <author>
      <name>Simone Carletti</name>
      <uri>http://www.simonecarletti.com</uri>
    </author>
      
    <!-- start categories -->
    
      <category term="Software" scheme="http://www.sixapart.com/ns/types#category" />
    
    <!-- end categories -->
    
    <!-- start tags -->
    
      <category term="macosx" label="macosx" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="parallels" label="parallels" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="virtualmachine" label="virtual machine" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="virtualizzazione" label="virtualizzazione" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="windows" label="windows" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <!-- end tags -->
    
    <content type="html" xml:lang="en" xml:base="http://www.simonecarletti.com/blog/">
      &lt;div class="partner partner-parallels alignright"&gt;
&lt;a href="http://send.onenetworkdirect.net/z/13586/CD108258/&amp;subid1=page+parallels4"&gt;&lt;img src="http://send.onenetworkdirect.net/42/108258/13586/&amp;subid1=page+parallels4" alt="Parallels Desktop 4.0 for Mac" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;!--&lt;img src="http://www.simonecarletti.com/static/images/logo/parallels-logo.png" alt="Parallels Logo" class="alignright" /&gt;--&gt;

&lt;p&gt;Parallels &lt;a href="http://www.parallels.com/news/id,16310" title="Parallels"&gt;ha annunciato&lt;/a&gt; la settimana scorsa il rilascio di &lt;strong&gt;Parallels Desktop 4&lt;/strong&gt;, la quarta versione del software di virtualizzazione più famoso per Mac OSX. &lt;/p&gt;

&lt;p&gt;Parallels permette di eseguire Windows o Linux su un qualsiasi Mac basato su architettura Intel, attraverso la creazione di una virtual machine. Per maggiori dettagli sul funzionamento consiglio di leggere l'&lt;a href="http://www.simonecarletti.com/blog/2007/04/parallels-desktop-overview.php" title="Parallels Desktop e Mac: accoppiata vincente, anche per Windows - Simone Carletti's Blog"&gt;introduzione a Parallels Desktop&lt;/a&gt; ed i &lt;a href="http://www.simonecarletti.com/blog/2007/04/consigli-suggerimenti-parallels-desktop.php" title="Parallels Desktop e Mac: consigli e suggerimenti su Parallels e Virtual Machine - Simone Carletti's Blog"&gt;consigli su Parallels e Virtual Machine&lt;/a&gt;, pubblicati su questo blog.&lt;/p&gt;

&lt;p&gt;La nuova versione di Parallels promette un &lt;strong&gt;incremento delle performance&lt;/strong&gt;, secondo Parallels fino al 50% rispetto a Parallels Desktop 3.0, un miglioramento dell'integrazione del sistema operativo guest con il Mac, il supporto a DirectX 9.0, DirectX Pixel Shader 2.0 e OpenGL 2.0 con conseguente incremento delle prestazioni grafiche.&lt;/p&gt;
      &lt;p&gt;Rinnovata anche la suite di prodotti in bundle che da sempre ha contraddistinto questo prodotto. Con Parallels Desktop 4 sono disponibili le versioni complete di Kaspersky Antivirus e Firewall così come Acronis True Image Home, un eccellente prodotto per la gestione dei backup, e Acronis Disk Director Suite per un &lt;strong&gt;totale di $175 di software compresi nel prezzo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Parallels Desktop 4 è disponibile al prezzo di $79.99. Gli utenti in possesso di una licenza di Parallels Desktop 3 possono acquistare l'aggiornamento per $49.99. &lt;strong&gt;Fino al 30 Novembre 2008 l'aggiornamento è in promozione a $39.99&lt;/strong&gt;. In questo caso attenzione al processo di acquisto, automaticamente verrà inserito anche il prodotto &lt;strong&gt;Extended Download for Parallels Desktop 4.0 for Mac Upgrade&lt;/strong&gt; che, personalmente, mi sembra del tutto inutile.
Chi è in possesso di una licenza di Parallels Desktop 3 acquistata dopo il 1 Settembre 2008 ha diritto all'&lt;strong&gt;aggiornamento gratuito&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Dato il successo riscosso dagli altri miei post su Parallels Desktop che continuano a ricevere visite e commenti, nei prossimi giorni cercherò di pubblicare qualche impressione post-installazione di Parallels Desktop 4. Tra l'altro, mi sono ripromesso di &lt;a href="http://www.vmware.com/products/fusion/" title="VMware Fusion"&gt;provare anche VMware Fusion&lt;/a&gt; che dalla versione 2.0 promette decisamente bene.&lt;/p&gt;

&lt;p&gt;Utenti Mac, voi cosa usate per virtualizzare? Parallels, WMware o altro?&lt;/p&gt;


      &lt;hr /&gt;
      &lt;p&gt;News Source: &lt;a href="http://www.simonecarletti.com/blog/2008/11/parallels-4-per-mac.php" title="Parallels Desktop 4 per Mac: performance, software ed integrazione"&gt;Parallels Desktop 4 per Mac: performance, software ed integrazione&lt;/a&gt;&lt;br /&gt;
      News URI: http://www.simonecarletti.com/blog/2008/11/parallels-4-per-mac.php&lt;/p&gt;
      &lt;p&gt;Copyright &amp;copy; 2005-2008 &lt;strong&gt;&lt;a href="http://www.simonecarletti.com"&gt;Simone Carletti&lt;/a&gt;&lt;/strong&gt;. This Feed is for non-commercial use only and licensed under &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.5/"&gt;Creative Common Attribution-NonCommercial-ShareAlike 2.5&lt;/a&gt; license. If you are not reading this material in your feed aggregator, the site you are looking at may be guilty of copyright infringement. Please contact me, so I can take appropriate action.&lt;/p&gt;    

    
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/simonecarletti?a=SaMwIc"&gt;&lt;img src="http://feeds.feedburner.com/~a/simonecarletti?i=SaMwIc" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=ClM3N"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=ClM3N" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=asH3N"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=asH3N" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=tBqnn"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=tBqnn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=0amEn"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=0amEn" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simonecarletti/~4/454820111" height="1" width="1"/&gt;</content>
     
    <!-- slash namespace -->
    <slash:comments>3</slash:comments>
     
  <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=simonecarletti&amp;itemurl=http%3A%2F%2Fwww.simonecarletti.com%2Fblog%2F2008%2F11%2Fparallels-4-per-mac.php</feedburner:awareness><feedburner:origLink>http://www.simonecarletti.com/blog/2008/11/parallels-4-per-mac.php</feedburner:origLink></entry>
  <!-- end entry 808 -->
  
  <!-- start entry 807 -->
  <entry>
    <title>Recensione libro Design Patterns in Ruby</title>
    <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/simonecarletti/~3/441924733/design-patterns-in-ruby.php" />
    <id>tag:www.simonecarletti.com,2008:/blog//1.807</id>
  
    <published>2008-11-04T09:38:24Z</published>
    <updated>2008-11-04T09:42:23Z</updated>
  
    <summary>Recensione del libro Design Patters in Ruby, dedicato all'implementazione dei Design Pattern nel linguaggio di programmazione Ruby.</summary>
    <author>
      <name>Simone Carletti</name>
      <uri>http://www.simonecarletti.com</uri>
    </author>
      
    <!-- start categories -->
    
      <category term="Ho letto" scheme="http://www.sixapart.com/ns/types#category" />
    
      <category term="Ruby" scheme="http://www.sixapart.com/ns/types#category" />
    
    <!-- end categories -->
    
    <!-- start tags -->
    
      <category term="addisonwesley" label="addison wesley" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="designpattern" label="design pattern" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="libri" label="libri" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="programmazione" label="programmazione" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="recensioni" label="recensioni" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="ruby" label="ruby" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="software" label="software" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <!-- end tags -->
    
    <content type="html" xml:lang="en" xml:base="http://www.simonecarletti.com/blog/">
      &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0321490452?ie=UTF8&amp;tag=simonecarletti-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321490452"&gt;&lt;img border="0" src="http://www.simonecarletti.com/static/images/amazon/51NG5mF-SAL._SL160_.jpg" class="alignleft"&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=rssworld-20&amp;l=as2&amp;o=1&amp;a=0321490452" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;
Pubblicato quest'anno, &lt;strong&gt;Design Patters in Ruby&lt;/strong&gt; è il primo libro interamente dedicato all'&lt;strong&gt;implementazione Ruby dei principali Design Pattern&lt;/strong&gt; definiti dalla Gang of Four (GoF).&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0321490452?ie=UTF8&amp;tag=simonecarletti-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321490452"&gt;Design Patterns in Ruby&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=simonecarletti-20&amp;l=as2&amp;o=1&amp;a=0321490452" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;, scritto da &lt;a href="http://www.russolsen.com/" title="Technology As If People Mattered : Weblog"&gt;Russ Olsen&lt;/a&gt;, è edito dalla Addison-Wesley ed è parte della &lt;strong&gt;Professional Ruby Series&lt;/strong&gt; gestita da &lt;a href="http://obiefernandez.com/" title="Obie Fernandez"&gt;Obie Fernandez&lt;/a&gt;. Questa serie è senza dubbio sinonimo di qualità e garanzia per chi è alla ricerca di un &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2Fs%3Fie%3DUTF8%26x%3D0%26ref%255F%3Dnb%255Fss%255Fgw%26y%3D0%26field-keywords%3DAddison-Wesley%2520Professional%2520Ruby%2520Series%26url%3Dsearch-alias%253Daps&amp;tag=simonecarletti-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=390957"&gt;libro su Ruby o Rails&lt;/a&gt;&lt;img src="https://www.assoc-amazon.com/e/ir?t=simonecarletti-20&amp;amp;l=ur2&amp;amp;o=1" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;.&lt;/p&gt;

&lt;p&gt;Rispetto alla media delle mie ultime letture, questa pubblicazione è stata decisamente molto più fluida e mi ha impegnato non più di una settimana, dedicando un'oretta al giorno in tram.
A patto che abbiate una certa dimestichezza con &lt;strong&gt;Ruby&lt;/strong&gt; ed &lt;strong&gt;Object Oriented Programming&lt;/strong&gt;, Design Patterns in Ruby è una lettura scorrevole e non troppo impegnativa.&lt;/p&gt;

      &lt;h2&gt;Requisiti&lt;/h2&gt;

&lt;p&gt;Stando alla prefazione dell'autore, per leggere questo libro non è necessaria alcuna particolare competenza né di Ruby né di Design Pattern. Tuttavia, è consigliata una certa familiarità con le dinamiche dell'object oriented programming.&lt;/p&gt;

&lt;p&gt;Dopo averlo letto, confesso di trovarmi parzialmente in disaccordo. &lt;strong&gt;Affrontare la lettura di questo libro senza una certa dimestichezza con Ruby potrebbe rivelarsi controproducente&lt;/strong&gt;, considerando che alcuni design pattern utilizzano caratteristiche come la metaprogrammazione, la riflessione, i moduli, i simboli, i Mixin, blocchi e procedure.
Mentre i primi possono essere aspetti comuni a molti linguaggi, a partire dai simboli in avanti si entra in un territorio tipico di Ruby e pochi altri linguaggi.&lt;/p&gt;

&lt;p&gt;Il secondo capitolo del libro offre una breve introduzione a Ruby, ma questi 30 minuti di lettura sono nulla paragonato a qualche mese di programmazione pratica o ad una lettura di qualche pubblicazione specifica, come ad esempio l'eccellente &lt;a href="http://www.simonecarletti.com/blog/2008/02/learn-to-program.php" title="Libro Learn to Program"&gt;Learn to Program&lt;/a&gt; o l'&lt;a href="http://www.simonecarletti.com/blog/2007/10/programming-ruby.php" title="Libro Programming Ruby"&gt;antologia Programming Ruby&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Confermo invece l'affermazione riguardo ad eventuali competenze sui Design Pattern. Questo libro affronta i principali Design Pattern sia in forma teorica sia in forma pratica, colmando così eventuali lacune del lettore su argomenti specifici.&lt;/p&gt;

&lt;h2&gt;Struttura del Libro&lt;/h2&gt;

&lt;p&gt;Il libro è diviso in tre parti.&lt;/p&gt;

&lt;p&gt;La prima parte, &lt;strong&gt;Patterns and Ruby&lt;/strong&gt;, è una veloce introduzione ai design patterns ed al linguaggio di programmazione Ruby. Come già anticipato, non fate troppo affidamento al secondo capitolo dato che non potrà mai fornirvi tutte le basi necessarie per entrare nell'ottica di un linguaggio particolare come Ruby.&lt;/p&gt;

La seconda parte, &lt;strong&gt;Patterns in Ruby&lt;/strong&gt;, è il cuore del libro. Ogni capitolo affronta uno dei diversi pattern &lt;p&gt;originariamente discussi dalla GoF, riportando una breve introduzione, esempi pratici di implementazione in Ruby ed alcuni esempi reali di utilizzo, prendendo spunto da librerie Ruby famose come &lt;code&gt;Rails&lt;/code&gt; e &lt;code&gt;URI&lt;/code&gt;.
Al termine di ogni capitolo un paragrafo riassuntivo riepiloga le principali caratteristiche del Design Pattern in oggetto.&lt;/p&gt;

&lt;p&gt;La terza parte, &lt;strong&gt;Patterns for Ruby&lt;/strong&gt;, prende in considerazione tre pattern non inclusi nel libro originale ma emersi con l'introduzione e lo sviluppo del linguaggio Ruby.&lt;/p&gt;

&lt;h2&gt;Design Pattern discussi&lt;/h2&gt;

&lt;p&gt;Questa è la lista dei design pattern trattati nel libro:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Template&lt;/li&gt;
  &lt;li&gt;Strategy&lt;/li&gt;
  &lt;li&gt;Observer&lt;/li&gt;
  &lt;li&gt;Composite&lt;/li&gt;
  &lt;li&gt;Iterator&lt;/li&gt;
  &lt;li&gt;Commands&lt;/li&gt;
  &lt;li&gt;Adapter&lt;/li&gt;
  &lt;li&gt;Proxy&lt;/li&gt;
  &lt;li&gt;Decorator&lt;/li&gt;
  &lt;li&gt;Singleton&lt;/li&gt;
  &lt;li&gt;Factory&lt;/li&gt;
  &lt;li&gt;Builder&lt;/li&gt;
  &lt;li&gt;Interpreter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questi invece i pattern specific per Ruby trattati nel terzo capitolo: &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Domain-Specific Language (DSL)&lt;/li&gt;
  &lt;li&gt;Meta-Programming&lt;/li&gt;
  &lt;li&gt;Convention Over Configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;In conclusione&lt;/h2&gt;

&lt;p&gt;Ancora una volta, la Addison-Wesley e la Professional Ruby Serie non ha tradito le aspettative.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/0321490452?ie=UTF8&amp;tag=simonecarletti-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321490452"&gt;Design Patterns in Ruby&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=simonecarletti-20&amp;l=as2&amp;o=1&amp;a=0321490452" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt; &lt;strong&gt;è una lettura assolutamente consigliata&lt;/strong&gt; per i programmatori che desiderano amplicare le proprie competenze di sviluppo in Ruby e &lt;strong&gt;portare le proprie capacità ad un livello ancora più professionale&lt;/strong&gt;. I Design Patterns sono una soluzione professionale ai problemi più comuni legati allo sviluppo di software e dovrebbero essere parte del bagaglio culturale di ogni sviluppatore.&lt;/p&gt;

&lt;p&gt;Russ Olsen ha saputo scrivere una pubblicazione facilmente leggibile, fluida e scorrevole. L'organizzazione del libro permette la lettura di singoli capitoli anche a distanza di tempo.&lt;/p&gt;

&lt;p&gt;L'unica nota dolente è il prezzo, decisamente più elevato rispetto alla media dei libri simili.&lt;/p&gt;

      &lt;hr /&gt;
      &lt;p&gt;News Source: &lt;a href="http://www.simonecarletti.com/blog/2008/11/design-patterns-in-ruby.php" title="Recensione libro Design Patterns in Ruby"&gt;Recensione libro Design Patterns in Ruby&lt;/a&gt;&lt;br /&gt;
      News URI: http://www.simonecarletti.com/blog/2008/11/design-patterns-in-ruby.php&lt;/p&gt;
      &lt;p&gt;Copyright &amp;copy; 2005-2008 &lt;strong&gt;&lt;a href="http://www.simonecarletti.com"&gt;Simone Carletti&lt;/a&gt;&lt;/strong&gt;. This Feed is for non-commercial use only and licensed under &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.5/"&gt;Creative Common Attribution-NonCommercial-ShareAlike 2.5&lt;/a&gt; license. If you are not reading this material in your feed aggregator, the site you are looking at may be guilty of copyright infringement. Please contact me, so I can take appropriate action.&lt;/p&gt;    

    
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/simonecarletti?a=sR182P"&gt;&lt;img src="http://feeds.feedburner.com/~a/simonecarletti?i=sR182P" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=eHfIN"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=eHfIN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=9amqN"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=9amqN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=F7tnn"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=F7tnn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=dD50n"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=dD50n" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simonecarletti/~4/441924733" height="1" width="1"/&gt;</content>
     
    <!-- slash namespace -->
    <slash:comments>0</slash:comments>
     
  <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=simonecarletti&amp;itemurl=http%3A%2F%2Fwww.simonecarletti.com%2Fblog%2F2008%2F11%2Fdesign-patterns-in-ruby.php</feedburner:awareness><feedburner:origLink>http://www.simonecarletti.com/blog/2008/11/design-patterns-in-ruby.php</feedburner:origLink></entry>
  <!-- end entry 807 -->
  
  <!-- start entry 801 -->
  <entry>
    <title>Leggendo i log ho scoperto... #10 - PDF Search Engine</title>
    <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/simonecarletti/~3/440691258/leggendo-i-log-10.php" />
    <id>tag:www.simonecarletti.com,2008:/blog//1.801</id>
  
    <published>2008-11-03T07:01:01Z</published>
    <updated>2008-11-02T17:42:23Z</updated>
  
    <summary>Dai log è possibile individuare nuovi motori di ricerca come PDFind, un motore di ricerca per l'indicizzazione di documenti PDF.</summary>
    <author>
      <name>Simone Carletti</name>
      <uri>http://www.simonecarletti.com</uri>
    </author>
      
    <!-- start categories -->
    
      <category term="Internet" scheme="http://www.sixapart.com/ns/types#category" />
    
      <category term="Motori di Ricerca" scheme="http://www.sixapart.com/ns/types#category" />
    
    <!-- end categories -->
    
    <!-- start tags -->
    
      <category term="log" label="log" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="loganalysis" label="log analysis" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="pdf" label="pdf" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <!-- end tags -->
    
    <content type="html" xml:lang="en" xml:base="http://www.simonecarletti.com/blog/">
      &lt;p&gt;... &lt;a href="http://www.pdfind.com/" title="PDF Search Engine | PDFind"&gt;PDFind.com&lt;/a&gt;, un motore di ricerca che non conoscevo specifico per l'indicizzazione di file &lt;acronym title="Portable Document Format"&gt;PDF&lt;/acronym&gt;.&lt;/p&gt;

&lt;p&gt;Il motore di ricerca dispone di un &lt;a href="http://www.pdfind.com/crawler.html" title="PDFind.com - Find PDF files!"&gt;proprio crawler&lt;/a&gt;, chiamato PDFBot ed identificato dalla user agent &lt;code&gt;PDFBot (crawler@pdfind.com)&lt;/code&gt;.&lt;/p&gt;

&lt;pre class="code"&gt;
83.233.122.64 - - [15/Aug/2008:02:27:53 -0700] "GET /robots.txt HTTP/1.0" 200 405 "-" "PDFBot (crawler@pdfind.com)"
&lt;/pre&gt;

&lt;p&gt;Il crawler individua e scarica file pdf. Il motore di ricerca analizza i file, mantiene una copia cache ed indicizza i documenti nel proprio archivio. E' possibile visualizzare un'anteprima del PDF direttamente online.&lt;/p&gt;
      

      &lt;hr /&gt;
      &lt;p&gt;News Source: &lt;a href="http://www.simonecarletti.com/blog/2008/11/leggendo-i-log-10.php" title="Leggendo i log ho scoperto... #10 - PDF Search Engine"&gt;Leggendo i log ho scoperto... #10 - PDF Search Engine&lt;/a&gt;&lt;br /&gt;
      News URI: http://www.simonecarletti.com/blog/2008/11/leggendo-i-log-10.php&lt;/p&gt;
      &lt;p&gt;Copyright &amp;copy; 2005-2008 &lt;strong&gt;&lt;a href="http://www.simonecarletti.com"&gt;Simone Carletti&lt;/a&gt;&lt;/strong&gt;. This Feed is for non-commercial use only and licensed under &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.5/"&gt;Creative Common Attribution-NonCommercial-ShareAlike 2.5&lt;/a&gt; license. If you are not reading this material in your feed aggregator, the site you are looking at may be guilty of copyright infringement. Please contact me, so I can take appropriate action.&lt;/p&gt;    

    
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/simonecarletti?a=YNRqJv"&gt;&lt;img src="http://feeds.feedburner.com/~a/simonecarletti?i=YNRqJv" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=PrUqN"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=PrUqN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=uW7WN"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=uW7WN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=ilXLn"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=ilXLn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=Zqy9n"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=Zqy9n" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simonecarletti/~4/440691258" height="1" width="1"/&gt;</content>
     
    <!-- slash namespace -->
    <slash:comments>0</slash:comments>
     
  <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=simonecarletti&amp;itemurl=http%3A%2F%2Fwww.simonecarletti.com%2Fblog%2F2008%2F11%2Fleggendo-i-log-10.php</feedburner:awareness><feedburner:origLink>http://www.simonecarletti.com/blog/2008/11/leggendo-i-log-10.php</feedburner:origLink></entry>
  <!-- end entry 801 -->
  
  <!-- start entry 767 -->
  <entry>
    <title>Recensione libro Pragmatic Version Control Using Git</title>
    <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/simonecarletti/~3/439195840/pragmatic-version-control-using-git.php" />
    <id>tag:www.simonecarletti.com,2008:/blog//1.767</id>
  
    <published>2008-11-01T17:09:34Z</published>
    <updated>2008-11-01T17:16:50Z</updated>
  
    <summary>Recensione del libro Pragmatic Version Control Using Git dedicato al software di controllo delle versioni inventato da Linus Torvalds.</summary>
    <author>
      <name>Simone Carletti</name>
      <uri>http://www.simonecarletti.com</uri>
    </author>
      
    <!-- start categories -->
    
      <category term="Ho letto" scheme="http://www.sixapart.com/ns/types#category" />
    
      <category term="Programmazione" scheme="http://www.sixapart.com/ns/types#category" />
    
      <category term="Software" scheme="http://www.sixapart.com/ns/types#category" />
    
    <!-- end categories -->
    
    <!-- start tags -->
    
      <category term="git" label="git" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="libri" label="libri" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="pragmaticprogrammers" label="pragmatic programmers" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="programmazione" label="programmazione" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="recensioni" label="recensioni" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="software" label="software" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <!-- end tags -->
    
    <content type="html" xml:lang="en" xml:base="http://www.simonecarletti.com/blog/">
      &lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/1934356158?ie=UTF8&amp;tag=simonecarletti-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1934356158"&gt;&lt;img src="http://www.simonecarletti.com/static/images/pragprog/190x228/tsgit.jpg" class="alignleft" /&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=rssworld-20&amp;l=as2&amp;o=1&amp;a=1934356158" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;
&lt;strong&gt;Pragmatic Version Control Using Git&lt;/strong&gt; è l'ultima pubblicazione sfornata da Pragmatic Bookshelf che, dopo a Pragmatic Version Control Using CVS e Pragmatic Version Control Using Subversion, abbraccia il campo dei &lt;acronym title="Distributed Version Control Systems"&gt;DVCS&lt;/acronym&gt; sfornando questo libro dedicato a &lt;a href="http://git.or.cz/" title="Git - Fast Version Control System"&gt;Git&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Per chi non lo conoscesse, &lt;strong&gt;Git è un sistema di controllo delle versioni&lt;/strong&gt; così come &lt;a href="http://www.simonecarletti.com/blog/2007/03/strumenti-sviluppo-subversion-svn.php" title="Strumenti di sviluppo: Subversion (SVN)"&gt;Subversion&lt;/a&gt;. In realtà, sebbene lo scopo finale sia comune, l'&lt;strong&gt;architettura di Git differisce alla base rispetto a Subversion&lt;/strong&gt; poiché si tratta di un &lt;strong&gt;sistema distribuito&lt;/strong&gt; che non necessita di far capo ad un repository principale. Ogni copia del repository, in gergo &lt;em&gt;clone&lt;/em&gt;, è a tutti gli effetti un repository completo che include l'intera cronologia così come &lt;em&gt;log&lt;/em&gt;, &lt;em&gt;branch&lt;/em&gt; e quan'altro.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.amazon.com/gp/product/1934356158?ie=UTF8&amp;tag=simonecarletti-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1934356158"&gt;Pragmatic Version Control using Git&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=simonecarletti-20&amp;l=as2&amp;o=1&amp;a=1934356158" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt; si propone come una &lt;strong&gt;guida a diversi aspetti di Git&lt;/strong&gt; che spaziano dall'apprendimento delle basi del funzionamento fino all'integrazione con strumenti di terze parti, passando per la creazione, gestione ed amministrazione di repository Git.&lt;br /&gt;
&lt;strong&gt;In Git le branch costituiscono uno degli elementi essenziali&lt;/strong&gt;: non manca quindi un capitolo interamente dedicato aall'approfondimento di questo concetto che include sia le competenze tecniche essenziali per lavorare con le branch, sia nozioni di project management utili a comprendere quando e come dirottare lo sviluppo di un prodotto verso un ramo parallelo.&lt;/p&gt;
      &lt;h2&gt;Confessa, non l'hai letto!&lt;/h2&gt; 

&lt;p&gt;La pubblicazione del libro è estremamente recente e qualcuno di voi si potrebbe chiedere come sia possibile che io l'abbia già letto. Anzi, &lt;a href="http://www.amazon.com/gp/product/1934356158?ie=UTF8&amp;tag=simonecarletti-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1934356158"&gt;stando ad Amazon.com&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=simonecarletti-20&amp;l=as2&amp;o=1&amp;a=1934356158" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;, la versione definitiva del libro non è ancora stata pubblicata.&lt;/p&gt;

&lt;p&gt;Per abitudine, &lt;strong&gt;su questo blog ho sempre pubblicato fino ad ora recensione di libri che ho sfogliato personalmente&lt;/strong&gt; e questo vale anche per Pragmatic Version Control Using Git.&lt;br /&gt;
Ho cominciato ad usare Git già qualche mese prima che la Pragmatic Bookshelf pre-annunciasse la disponibilità del libro e, non appena possibile, mi sono precipitato ad acquistarne la beta in Pdf.&lt;/p&gt;

&lt;p&gt;Ho assistito alla scrittura del libro fin dall'inizio, quando ancora era presente poco più che qualche capitolo.&lt;br /&gt;
E' vero, in un certo senso è come sbirciare un regalo prima del compleanno, ma non ho saputo resistere. Non appena pubblicato, riceverò una versione cartacea che sarò bel lieto di conservare in libreria.&lt;/p&gt;

&lt;p&gt;Questo mi ha permesso di preparare questa recensione con adeguato anticipo ed arricchirla con alcune considerazioni su capitoli e aneddoti pre-release.&lt;/p&gt;

&lt;h2&gt;Struttura del libro&lt;/h2&gt;

&lt;p&gt;Il libro è organizzato in due macro parti: &lt;strong&gt;Welcome to the Distributed World&lt;/strong&gt; e &lt;strong&gt;Everyday Gi&lt;/strong&gt;t.&lt;/p&gt;

&lt;p&gt;La prima parte contiene alcuni capitoli d'&lt;strong&gt;introduzione ai software di controllo delle versioni distribuiti&lt;/strong&gt;. L'autore &lt;a href="http://www.travisswicegood.com/"&gt;Travis Swicegood&lt;/a&gt; analizza le caratteristiche alla base di questi prodotti accentuando i vantaggi rispetto ai tradizionali sistemi centralizzati come Subversion e CVS.&lt;/p&gt;

&lt;p&gt;La seconda parte rappresenta invece il cuore del libro. Oltre 10 capitoli interamente dedicati a Git, &lt;strong&gt;dai comandi base fino all'interazione evoluta&lt;/strong&gt;.&lt;br /&gt;
I temi affrontati includono:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Creazione ed amministrazione di repository&lt;/li&gt;
  &lt;li&gt;Utilizzo consapevole ed efficace di branch e tag&lt;/li&gt;
  &lt;li&gt;Esecuzione di merge tra branch differenti, con analisi delle varianti cherry-pick e squash&lt;/li&gt;
  &lt;li&gt;Gestione e risoluzione dei conflitti&lt;/li&gt;
  &lt;li&gt;Organizzazione di più repository ed integrazione di un sistema decentralizzato all'interno di un workflow aziendale strutturato&lt;/li&gt;
  &lt;li&gt;Installazione ed amministrazione di Git su server remoti&lt;/li&gt;
  &lt;li&gt;Interazione con repositori remoti&lt;/li&gt;
  &lt;li&gt;Analisi e consultazione della cronologia delle revisioni&lt;/li&gt;
  &lt;li&gt;Migrazione a Git, con particolare riferimento all'importazione di repository CVS e Subversion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Non solo tecnicismi&lt;/h2&gt;

&lt;p&gt;Una delle caratteristiche che più ho apprezzato di questo libro è la capacità di miscelare in ogni capitolo il &lt;strong&gt;giusto quantitativo di tecnicismi con esempi e nozioni di organizzazione&lt;/strong&gt;.&lt;br /&gt;
Git è uno strumento molto potente. Conoscere a memoria tutti i comandi non è sufficiente per apprezzarne tutte le caratteristiche. Per sfruttare al meglio Git è necessario sapere quando usare una caratteristica piuttosto che un'altra, quando organizzare la struttura con un repository intermedio ed in che modo.&lt;/p&gt;

&lt;p&gt;Questo libro &lt;strong&gt;affronta l'uso di Git in modo globale&lt;/strong&gt;. Non si limita ad elencare e commentare i comandi ma ne dimostra l'efficacia corredando ogni sezione da elementi di project management.&lt;br /&gt;
Questa caratteristica espande il target del libro che può così spaziare da chi desidera conoscere l'uso di Git a chi già ne conosce i comandi ma non ha mai beneficiato di una formazione mentale sul corretto uso del software.&lt;/p&gt;

&lt;h2&gt;Git non è semplice&lt;/h2&gt;

&lt;p&gt;Chiunque vi dirà che "ad imparare Git ci vuole un attimo", a mio avviso, pecca di presunzione. Conoscere a memoria uno o cento comandi è banale ma conoscere Git non è semplice, utilizzare Git non è immediato.&lt;br /&gt;
La curva di apprendimento di Git è notevolmente più lunga di altri strumenti come ad esempio Subversion.&lt;/p&gt;

&lt;p&gt;Il motivo è da ricondurre sia alla natura distribuita del software sia alle caratteristiche del software stesso. Potrebbe sembrare un controsenso ma apprendere l'uso di un sistema distribuito è tendenzialmente più complesso di un sistema centralizzato poiché a più potere corrispondono più funzioni e potenzialmente più problemi dedicati alla gestione del repository.&lt;br /&gt;
Inoltre, paragonato ad altri sistemi distribuiti come Mercurial, la complessità di Git è maggiore e riconducibile ad una filosofia di sviluppo strettamente legata al mondo Linux da cui proviene.&lt;/p&gt;

&lt;p&gt;Ne consegue che &lt;strong&gt;la lettura di questo libro, in alcuni capitoli, non è molto fluida&lt;/strong&gt;. Sebbene Travis Swicegood abbia tentato di esporre al meglio l'argomento, in alcuni casi sono necessarie anche due o tre letture di una sezione per assimilarne al meglio il contenuto.&lt;/p&gt;

&lt;h2&gt;In conclusione&lt;/h2&gt;

&lt;p&gt;Come anticipato, &lt;a href="http://www.amazon.com/gp/product/1934356158?ie=UTF8&amp;tag=simonecarletti-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1934356158"&gt;Pragmatic Version Control using Git&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=simonecarletti-20&amp;l=as2&amp;o=1&amp;a=1934356158" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt; è una lettura consigliata sia per chi desidera avvicinarsi a Git, sia per chi già lo conosce ma sente l'esigenza di utilizzarlo in modo efficace ed efficiente.&lt;br /&gt;
E' probabilmente una delle poche risorse complete sull'argomento in grado di offire una panoramica dalle basi alle funzionalità più evolute.&lt;/p&gt;

&lt;p&gt;Gli utenti che provengono da altri SCM apprezzeranno senza dubbio i capitoli più discorsivi che offrono molto spesso confronti obiettivi con altri strumenti, in primo luogo Subversion.
Agli utenti completamente a digiuno di SCM consiglio, prima della lettura, la visione dello &lt;a href="http://peepcode.com/products/git" title="Git | PeepCode Screencasts for Ruby on Rails Developers"&gt;screencast su Git&lt;/a&gt; in vendita su Peepcode.&lt;/p&gt;

&lt;p&gt;Dopo Git, Subversion e CVS spero che arrivi presto il momento di una pubblicazione dedicata a &lt;a href="http://www.selenic.com/mercurial/" title="Mercurial - Mercurial"&gt;Mercurial&lt;/a&gt;.&lt;/p&gt;


      &lt;hr /&gt;
      &lt;p&gt;News Source: &lt;a href="http://www.simonecarletti.com/blog/2008/11/pragmatic-version-control-using-git.php" title="Recensione libro Pragmatic Version Control Using Git"&gt;Recensione libro Pragmatic Version Control Using Git&lt;/a&gt;&lt;br /&gt;
      News URI: http://www.simonecarletti.com/blog/2008/11/pragmatic-version-control-using-git.php&lt;/p&gt;
      &lt;p&gt;Copyright &amp;copy; 2005-2008 &lt;strong&gt;&lt;a href="http://www.simonecarletti.com"&gt;Simone Carletti&lt;/a&gt;&lt;/strong&gt;. This Feed is for non-commercial use only and licensed under &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.5/"&gt;Creative Common Attribution-NonCommercial-ShareAlike 2.5&lt;/a&gt; license. If you are not reading this material in your feed aggregator, the site you are looking at may be guilty of copyright infringement. Please contact me, so I can take appropriate action.&lt;/p&gt;    

    
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/simonecarletti?a=5Fh8wR"&gt;&lt;img src="http://feeds.feedburner.com/~a/simonecarletti?i=5Fh8wR" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=ZDqQN"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=ZDqQN" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=ZiR2N"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=ZiR2N" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=9zgen"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=9zgen" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=8QxHn"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=8QxHn" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simonecarletti/~4/439195840" height="1" width="1"/&gt;</content>
     
    <!-- slash namespace -->
    <slash:comments>0</slash:comments>
     
  <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=simonecarletti&amp;itemurl=http%3A%2F%2Fwww.simonecarletti.com%2Fblog%2F2008%2F11%2Fpragmatic-version-control-using-git.php</feedburner:awareness><feedburner:origLink>http://www.simonecarletti.com/blog/2008/11/pragmatic-version-control-using-git.php</feedburner:origLink></entry>
  <!-- end entry 767 -->
  
  <!-- start entry 802 -->
  <entry>
    <title>Leggendo i log ho scoperto... #9 - Errori nella configurazione server</title>
    <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/simonecarletti/~3/419655914/leggendo-i-log-9.php" />
    <id>tag:www.simonecarletti.com,2008:/blog//1.802</id>
  
    <published>2008-10-13T16:04:03Z</published>
    <updated>2008-10-06T00:43:59Z</updated>
  
    <summary>Analizzando i log è possibile individuare tempestivamente errori nella configurazione server del proprio sito.</summary>
    <author>
      <name>Simone Carletti</name>
      <uri>http://www.simonecarletti.com</uri>
    </author>
      
    <!-- start categories -->
    
      <category term="Internet" scheme="http://www.sixapart.com/ns/types#category" />
    
      <category term="Sicurezza" scheme="http://www.sixapart.com/ns/types#category" />
    
    <!-- end categories -->
    
    <!-- start tags -->
    
      <category term="log" label="log" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="loganalysis" label="log analysis" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <!-- end tags -->
    
    <content type="html" xml:lang="en" xml:base="http://www.simonecarletti.com/blog/">
      &lt;p&gt;... quanto sia facile accorgersi tempestivamente di configurazioni errate sul proprio server.&lt;/p&gt;

&lt;p&gt;Torniamo indietro di qualche settimana quando &lt;a href="http://simone.cabrino.it/" title="Cabrino Simone&amp;#8217;s Blog"&gt;Simone Cabrino&lt;/a&gt; mi segnalò un &lt;a href="http://www.simonecarletti.com/blog/2008/08/una-regola-e-troppo-poca-due-sono-troppe.php" title="Una regola &amp;egrave; troppo poca, due sono troppe - Simone Carletti's Blog"&gt;problema nella configurazione del sito&lt;/a&gt;. A causa di un errore nelle regole del file &lt;a href="http://www.simonecarletti.com/blog/2008/08/una-regola-e-troppo-poca-due-sono-troppe.php" title="Una regola &amp;egrave; troppo poca, due sono troppe - Simone Carletti's Blog"&gt;.htaccess&lt;/a&gt;, ogni richiesta inviata ad un URL specifico di questo blog era indirizzata ad un percorso invalido nel sito, composto dall'indirizzo del blog più l'indirizzo fisico di questo blog sul server.&lt;br /&gt;
Questo problema, oltre ad essere fastidioso e prevenire l'indicizzazione di alcune pagine del sito, è pericoloso poiché &lt;strong&gt;espone all'esterno informazioni preziose sull'archittura del sito e del server&lt;/strong&gt; che potrebbero comprometterne la sicurezza.&lt;/p&gt;

&lt;p&gt;Questo problema avrebbe potuto essere individuato prima se avessi analizzato più attentamente i log, eventualmente prevedendo una qualche utility che mi avvisi nel caso in cui &lt;strong&gt;qualche richiesta contenga dei percorsi anomali come il percorso fisico sul server&lt;/strong&gt;.&lt;/p&gt;
      &lt;pre name="code" class="bash"&gt;
$ zgrep '/home/simonecarletti/simonecarletti.com' access.log.*.gz
64.34.195.155 - - [15/Aug/2008:12:14:00 -0700] "GET /blog//home/simonecarletti/simonecarletti.com/blog HTTP/1.1" 200 1963 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1; aggregator:Tailrank (Spinn3r 2.2); http://spinn3r.com/robot) Gecko/20021130" 
74.6.31.165 - - [15/Aug/2008:12:51:12 -0700] "GET /blog/home/simonecarletti/simonecarletti.com/blog HTTP/1.0" 200 1963 "-" "Mozilla/5.0 (compatible; Yahoo! DE Slurp; http://help.yahoo.com/help/us/ysearch/slurp)" 
82.63.157.52 - - [27/Aug/2008:01:34:50 -0700] "GET /blog//home/simonecarletti/simonecarletti.com/blog HTTP/1.1" 200 2000 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_4; en-us) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1" 
82.63.157.52 - - [27/Aug/2008:01:36:01 -0700] "GET //home/simonecarletti/simonecarletti.com/code HTTP/1.1" 404 596 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_4; en-us) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1" 
87.28.229.37 - - [27/Aug/2008:01:50:15 -0700] "GET /blog//home/simonecarletti/simonecarletti.com/blog HTTP/1.1" 200 2000 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; it; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1" 
87.28.229.37 - - [27/Aug/2008:01:50:17 -0700] "GET /blog/styles.css HTTP/1.1" 200 4454 "http://www.simonecarletti.com/blog//home/simonecarletti/simonecarletti.com/blog" "Mozilla/5.0 (Windows; U; Windows NT 6.0; it; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1"
&lt;/pre&gt;

&lt;p&gt;Ad oggi, conoscendo l'errore e la causa, anche il problema appare molto più semplice. Vediamo come potrei procedere se mi trovassi di fronte a questo problema per la prima volta.&lt;/p&gt;

&lt;p&gt;Come prima cosa è fondamentale ottenere le informazioni filtrate, da analizzare singolarmente. Possiamo procedere esportando la lista delle corrispondenze in un file chiamato, ad esempio, &lt;code&gt;file.txt&lt;/code&gt;.&lt;/p&gt;

&lt;pre name="code" class="bash"&gt;
zgrep '/home/simonecarletti/simonecarletti.com' access.log.*.gz &gt; file.txt
&lt;/pre&gt;

&lt;p&gt;A questo punto, cominciamo a leggere il file alla ricerca di qualche dettaglio utile. A seconda del tipo di problema, oltre alla riga di log contenente l'errore potrei aver bisogno di tutte quelle correlate appartenenti alla sessione di navigazione. &lt;/p&gt;

&lt;p&gt;In questo caso, ecco due righe di log che potrebbero fornirmi un indizio.&lt;/p&gt;

&lt;pre name="code" class="bash"&gt;
64.34.195.137 - - [15/Aug/2008:02:45:35 -0700] "GET /blog HTTP/1.1" 301 610 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1; aggregator:Tailrank (Spinn3r 2.2); http://spinn3r.com/robot) Gecko/20021130" 
64.34.195.137 - - [15/Aug/2008:02:45:36 -0700] "GET /blog//home/simonecarletti/simonecarletti.com/blog HTTP/1.1" 200 1963 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1; aggregator:Tailrank (Spinn3r 2.2); http://spinn3r.com/robot) Gecko/20021130"
&lt;/pre&gt;

&lt;p&gt;Come potete osservare, in un client richiede la pagina &lt;code&gt;/blog//home/simonecarletti/simonecarletti.com/blog&lt;/code&gt;. Immediatamente prima, lo stesso client ha inviato una richiesta al percorso &lt;code&gt;/blog&lt;/code&gt; ottenendo in risposta un &lt;code&gt;redirect 301&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A questo punto, conosco il problema e l'origine. Non mi resta che individuare la causa e correggerla.&lt;/p&gt;

&lt;p&gt;In conclusione, analizzate sempre i log del server alla ricerca di &lt;strong&gt;richieste anomale&lt;/strong&gt;. Se non sapete cosa cercare, cominciate con il verificare richieste che contengono all'interno &lt;strong&gt;percorsi a file fisici sul vostro server&lt;/strong&gt;.&lt;/p&gt;

      &lt;hr /&gt;
      &lt;p&gt;News Source: &lt;a href="http://www.simonecarletti.com/blog/2008/10/leggendo-i-log-9.php" title="Leggendo i log ho scoperto... #9 - Errori nella configurazione server"&gt;Leggendo i log ho scoperto... #9 - Errori nella configurazione server&lt;/a&gt;&lt;br /&gt;
      News URI: http://www.simonecarletti.com/blog/2008/10/leggendo-i-log-9.php&lt;/p&gt;
      &lt;p&gt;Copyright &amp;copy; 2005-2008 &lt;strong&gt;&lt;a href="http://www.simonecarletti.com"&gt;Simone Carletti&lt;/a&gt;&lt;/strong&gt;. This Feed is for non-commercial use only and licensed under &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.5/"&gt;Creative Common Attribution-NonCommercial-ShareAlike 2.5&lt;/a&gt; license. If you are not reading this material in your feed aggregator, the site you are looking at may be guilty of copyright infringement. Please contact me, so I can take appropriate action.&lt;/p&gt;    

    
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/simonecarletti?a=A40DZX"&gt;&lt;img src="http://feeds.feedburner.com/~a/simonecarletti?i=A40DZX" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=FGgSM"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=FGgSM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=pF8gM"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=pF8gM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=PzBEm"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=PzBEm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=Rez1m"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=Rez1m" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simonecarletti/~4/419655914" height="1" width="1"/&gt;</content>
     
    <!-- slash namespace -->
    <slash:comments>0</slash:comments>
     
  <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=simonecarletti&amp;itemurl=http%3A%2F%2Fwww.simonecarletti.com%2Fblog%2F2008%2F10%2Fleggendo-i-log-9.php</feedburner:awareness><feedburner:origLink>http://www.simonecarletti.com/blog/2008/10/leggendo-i-log-9.php</feedburner:origLink></entry>
  <!-- end entry 802 -->
  
  <!-- start entry 806 -->
  <entry>
    <title>Miti e leggende SEO #3 - I motori di ricerca non leggono JavaScript e CSS</title>
    <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/simonecarletti/~3/414780020/miti-e-leggende-seo-3.php" />
    <id>tag:www.simonecarletti.com,2008:/blog//1.806</id>
  
    <published>2008-10-08T02:34:59Z</published>
    <updated>2008-10-08T12:30:07Z</updated>
  
    <summary>Alcune informazioni su come i crawler dei motori di ricerca interpretano i file JavaScript e CSS.</summary>
    <author>
      <name>Simone Carletti</name>
      <uri>http://www.simonecarletti.com</uri>
    </author>
      
    <!-- start categories -->
    
      <category term="Motori di Ricerca" scheme="http://www.sixapart.com/ns/types#category" />
    
    <!-- end categories -->
    
    <!-- start tags -->
    
      <category term="ask" label="ask" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="crawler" label="crawler" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="css" label="css" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="google" label="google" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="msn" label="msn" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="yahoo" label="yahoo" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <!-- end tags -->
    
    <content type="html" xml:lang="en" xml:base="http://www.simonecarletti.com/blog/">
      &lt;p&gt;E' abitudine diffusa affermare che i crawler dei motori di ricerca non siano in grado di &lt;strong&gt;leggere file JavaScript o CSS&lt;/strong&gt;. In realtà quest'affermazione è falsa e facilmente documentabile da una semplice analisi dei log.&lt;/p&gt;

&lt;p&gt;Ma allora, come mai frasi come &lt;strong&gt;Google non legge i JavaScript&lt;/strong&gt; o &lt;strong&gt;Yahoo! non capisce i CSS sono così diffuse&lt;/strong&gt;? Come in ogni leggenda che si rispetti, anche in questa c'è un fondo di verità. In questo articolo cercherò di dimostrare entrambi i punti di vista.&lt;/p&gt;
      &lt;h2&gt;I motori di ricerca leggono JavaScript e CSS&lt;/h2&gt;

&lt;p&gt;Cominciamo dalla parte più facile, ovvero dimostrare che &lt;strong&gt;i motori di ricerca leggono i file JavaScript e CSS&lt;/strong&gt;. Per fugare definitivamente ogni dubbio possiamo &lt;strong&gt;analizzare i log di accesso&lt;/strong&gt; di un comune sito web.&lt;br /&gt;&lt;/p&gt;

&lt;h3&gt;I motori di ricerca ed i file CSS&lt;/h3&gt;

&lt;p&gt;Proviamo, ad esempio, a controllare tutti gli accessi ai un file CSS di questo blog.&lt;/p&gt;

&lt;pre name="code" class="bash"&gt;
$ grep '.css' access.log
85-18-66-25.ip.fastwebnet.it - - [20/Sep/2008:13:03:31 -0700] "GET /blog/styles.css HTTP/1.1" 200 720 "http://www.simonecarletti.com/blog/2006/02/perche_ho_scelto_feeddemon.php" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)" 
85-18-66-25.ip.fastwebnet.it - - [20/Sep/2008:13:03:31 -0700] "GET /static/mt4/themes-base/blog.css HTTP/1.1" 200 9767 "http://www.simonecarletti.com/blog/2006/02/perche_ho_scelto_feeddemon.php" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)" 
85-18-66-25.ip.fastwebnet.it - - [20/Sep/2008:13:03:31 -0700] "GET /static/mt4/support/themes/professional-blue/professional-blue.css HTTP/1.1" 200 13665 "http://www.simonecarletti.com/blog/2006/02/perche_ho_scelto_feeddemon.php" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)" 
85-18-66-25.ip.fastwebnet.it - - [20/Sep/2008:13:03:32 -0700] "GET /static/stylesheets/blog.css HTTP/1.1" 200 5559 "http://www.simonecarletti.com/blog/2006/02/perche_ho_scelto_feeddemon.php" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)" 
85-18-66-25.ip.fastwebnet.it - - [20/Sep/2008:13:03:32 -0700] "GET /static/stylesheets/alignments.css HTTP/1.1" 200 1815 "http://www.simonecarletti.com/blog/2006/02/perche_ho_scelto_feeddemon.php" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)" 
85-18-66-25.ip.fastwebnet.it - - [20/Sep/2008:13:03:32 -0700] "GET /static/stylesheets/messages.css HTTP/1.1" 200 3198 "http://www.simonecarletti.com/blog/2006/02/perche_ho_scelto_feeddemon.php" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)" 
85-18-66-25.ip.fastwebnet.it - - [20/Sep/2008:13:03:32 -0700] "GET /static/mt4/SyntaxHighlighter/Styles/SyntaxHighlighter.css HTTP/1.1" 200 4352 "http://www.simonecarletti.com/blog/2006/02/perche_ho_scelto_feeddemon.php" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)" 
crawl-66-249-70-72.googlebot.com - - [20/Sep/2008:13:06:07 -0700] "GET /static/tools/style.css HTTP/1.1" 200 10046 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 
host64-86-dynamic.61-82-r.retail.telecomitalia.it - - [20/Sep/2008:13:10:22 -0700] "GET /blog/styles.css HTTP/1.1" 200 721 "http://www.simonecarletti.com/blog/2007/03/individuare-cloni-fake.php" "Opera/9.52 (Windows NT 5.1; U; it)" 
host64-86-dynamic.61-82-r.retail.telecomitalia.it - - [20/Sep/2008:13:10:22 -0700] "GET /static/mt4/themes-base/blog.css HTTP/1.1" 200 9767 "http://www.simonecarletti.com/blog/2007/03/individuare-cloni-fake.php" "Opera/9.52 (Windows NT 5.1; U; it)" 
host64-86-dynamic.61-82-r.retail.telecomitalia.it - - [20/Sep/2008:13:10:22 -0700] "GET /static/stylesheets/blog.css HTTP/1.1" 200 5560 "http://www.simonecarletti.com/blog/2007/03/individuare-cloni-fake.php" "Opera/9.52 (Windows NT 5.1; U; it)"
&lt;/pre&gt;

&lt;p&gt;Non notate nulla di strano? Alla riga numero 8 è presente un accesso da un client con useragent &lt;code&gt;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&lt;/code&gt;: il crawler di Google!&lt;/p&gt;
&lt;p&gt;La user agent è facilmente modificabile e chiunque può spacciarsi, senza troppa fatica, per il crawler di Google. Per rendere il test ancora più affidabile è quindi necessario eseguire un &lt;strong&gt;reverse DNS dell'indirizzo IP&lt;/strong&gt;. Per semplicità ho delegato ad Apache questo lavoro, così che il log contenga direttamente il nome dell'host al posto del corrispondente IP.&lt;/p&gt;
&lt;p&gt;Come potete vedere, l'host associato a quella richiesta corrisponde a &lt;code&gt;crawl-66-249-70-72.googlebot.com&lt;/code&gt;, un host di proprietà di Google. A questo punto, vale la pena eseguire una ricerca mirata nei log solo per questo host, limitando ovviamente i risultati ai soli file CSS.&lt;/p&gt;

&lt;pre name="code" class="bash"&gt;
$ zgrep '.css ' access.* | egrep '^.*?\.googlebot\.com'
crawl-66-249-70-72.googlebot.com - - [20/Sep/2008:01:44:17 -0700] "GET /static/mt4/support/themes/professional-blue/professional-blue.css HTTP/1.1" 200 13666 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 
crawl-66-249-70-72.googlebot.com - - [20/Sep/2008:13:06:07 -0700] "GET /static/tools/style.css HTTP/1.1" 200 10046 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 
crawl-66-249-70-72.googlebot.com - - [22/Sep/2008:12:00:41 -0700] "GET /static/stylesheets/messages.css HTTP/1.1" 200 3199 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 
crawl-66-249-70-72.googlebot.com - - [22/Sep/2008:16:28:17 -0700] "GET /static/stylesheets/messages.css HTTP/1.1" 304 256 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 
crawl-66-249-70-72.googlebot.com - - [24/Sep/2008:21:32:38 -0700] "GET /mt4/mt-search.cgi?IncludeBlogs=1&amp;amp;search=css HTTP/1.1" 200 18391 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 
crawl-66-249-70-72.googlebot.com - - [25/Sep/2008:09:11:06 -0700] "GET /static/stylesheets/blog.css HTTP/1.1" 200 5560 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 
crawl-66-249-70-72.googlebot.com - - [25/Sep/2008:12:09:48 -0700] "GET /static/mt4/themes-base/blog.css HTTP/1.1" 200 9768 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 
crawl-66-249-70-72.googlebot.com - - [03/Oct/2008:17:09:31 -0700] "GET /static/toolsdesign/style.css HTTP/1.1" 200 10046 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 
crawl-66-249-70-72.googlebot.com - - [04/Oct/2008:11:06:55 -0700] "GET /static/tools/style.css HTTP/1.1" 200 10046 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
&lt;/pre&gt;

&lt;p&gt;In modo del tutto analogo, andiamo alla ricerca di tracce del bot di MSN e Yahoo!.&lt;/p&gt;
&lt;p&gt;Il primo si identifica normalmente con un host che termina per &lt;code&gt;search.msn.com&lt;/code&gt;.&lt;/p&gt;

&lt;pre name="code" class="bash"&gt;
$ zgrep '.css ' access.* | egrep '^.*?\.search\.msn\.com'
msnbot-65-55-110-231.search.msn.com - - [06/Oct/2008:23:09:26 -0700] "GET /static/mt4/themes-base/blog.css HTTP/1.0" 200 9767 "http://www.simonecarletti.com/mt4/mt-search.cgi?tag=luca conti&amp;amp;blog_id=1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)" 
msnbot-65-55-110-231.search.msn.com - - [06/Oct/2008:23:09:27 -0700] "GET /static/stylesheets/blog.css HTTP/1.0" 200 5535 "http://www.simonecarletti.com/mt4/mt-search.cgi?tag=luca conti&amp;amp;blog_id=1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)" 
msnbot-65-55-110-231.search.msn.com - - [06/Oct/2008:23:09:27 -0700] "GET /static/stylesheets/alignments.css HTTP/1.0" 200 1815 "http://www.simonecarletti.com/mt4/mt-search.cgi?tag=luca conti&amp;amp;blog_id=1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)" 
msnbot-65-55-110-231.search.msn.com - - [06/Oct/2008:23:09:27 -0700] "GET /static/stylesheets/messages.css HTTP/1.0" 200 3198 "http://www.simonecarletti.com/mt4/mt-search.cgi?tag=luca conti&amp;amp;blog_id=1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)" 
msnbot-65-55-110-231.search.msn.com - - [06/Oct/2008:23:09:27 -0700] "GET /static/mt4/support/themes/professional-blue/professional-blue.css HTTP/1.0" 200 13666 "http://www.simonecarletti.com/mt4/mt-search.cgi?tag=luca conti&amp;amp;blog_id=1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)" 
msnbot-65-55-110-231.search.msn.com - - [06/Oct/2008:23:09:27 -0700] "GET /static/mt4/SyntaxHighlighter/Styles/SyntaxHighlighter.css HTTP/1.0" 200 4352 "http://www.simonecarletti.com/mt4/mt-search.cgi?tag=luca conti&amp;amp;blog_id=1" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)"
&lt;/pre&gt;

&lt;p&gt;Il secondo, invece, utilizza un host tipo &lt;code&gt;*.crawl.yahoo.net&lt;/code&gt;.&lt;/p&gt;

&lt;pre name="code" class="bash"&gt;
$ zgrep '.css ' access.* | egrep '^.*?\.crawl\.yahoo\.net'
llf320045.crawl.yahoo.net - - [07/Oct/2008:00:02:22 -0700] "GET /blog/styles.css HTTP/1.0" 304 218 "http://www.simonecarletti.com/blog/2006/05/piu_trackback_per_tutti.php" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" 
llf320045.crawl.yahoo.net - - [07/Oct/2008:00:02:25 -0700] "GET /static/mt4/themes-base/blog.css HTTP/1.0" 304 220 "http://www.simonecarletti.com/blog/styles.css" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" 
llf320045.crawl.yahoo.net - - [07/Oct/2008:00:02:25 -0700] "GET /static/stylesheets/blog.css HTTP/1.0" 304 219 "http://www.simonecarletti.com/blog/styles.css" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" 
llf320045.crawl.yahoo.net - - [07/Oct/2008:00:02:27 -0700] "GET /static/stylesheets/alignments.css HTTP/1.0" 304 218 "http://www.simonecarletti.com/static/stylesheets/blog.css" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" 
llf320045.crawl.yahoo.net - - [07/Oct/2008:00:02:27 -0700] "GET /static/stylesheets/messages.css HTTP/1.0" 304 219 "http://www.simonecarletti.com/static/stylesheets/blog.css" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" 
llf320045.crawl.yahoo.net - - [07/Oct/2008:00:02:35 -0700] "GET /static/mt4/support/themes/professional-blue/professional-blue.css HTTP/1.0" 304 220 "http://www.simonecarletti.com/blog/styles.css" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)" 
llf320045.crawl.yahoo.net - - [07/Oct/2008:00:02:35 -0700] "GET /static/mt4/SyntaxHighlighter/Styles/SyntaxHighlighter.css HTTP/1.0" 304 219 "http://www.simonecarletti.com/blog/2006/05/piu_trackback_per_tutti.php" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)"
&lt;/pre&gt;

&lt;p&gt;Fermi tutti, abbiamo dimenticato Ask.com! Quest'ultimo si identifica normalmente con un host tipo &lt;code&gt;*.ask.com&lt;/code&gt;.&lt;/p&gt;

&lt;pre name="code" class="bash"&gt;
$ zgrep '.css ' access.* | egrep '^.*?\.ask\.com'

$ zgrep '.css ' access.* | egrep '^.*?\.ask.com' | wc -l
0
$ egrep '^.*?\.ask.com' access.* | wc -l
29
&lt;/pre&gt;

&lt;p&gt;Niente da fare! Una ricerca per Ask.com non fornisce alcun risultato per i file CSS, mentre fornisce 29 risultati per richieste a normali pagine del blog. Possiamo quindi affermare che, &lt;strong&gt;tra Google, Yahoo, MSN ed Ask, Ask è l'unico motore di ricerca a non leggere alcun file .css&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;I motori di ricerca ed i file JavaScript&lt;/h3&gt;

&lt;p&gt;Fino ad ora abbiamo parlato soltanto dei file CSS. Possiamo affermare che i motori di ricerca leggono anche i file JavaScript? Proviamo!&lt;/p&gt;

&lt;pre name="code" class="bash"&gt;
$ zgrep '.js ' access.* | egrep '^.*?\.googlebot\.com' | wc -l
26
$ zgrep '.js ' access.* | egrep '^.*?\.search\.msn\.com' | wc -l
2485
$ zgrep '.js ' access.* | egrep '^.*?\.crawl\.yahoo\.net' | wc -l
1
$ zgrep '.js ' access.* | egrep '^.*?\.ask.com' | wc -l
79
&lt;/pre&gt;

&lt;p&gt;Per i file JavaScript lo scenario è nettamente differente. &lt;strong&gt;Ask.com legge i file JavaScript mentre, così come Google e MSN&lt;/strong&gt; che, nello specifico, non sembra preoccuparsi che file identici linkati da documenti differenti... sono identici!&lt;/p&gt;
&lt;p&gt;La sorpresa, in questo caso, è Yahoo! che sembra aver letto 1 solo file in 30 giorni. Come se non bastasse, questo file non è in alcun modo collegato alle pagine del blog ma si tratta di un file che avevo creato per eseguire la registrazione di un nuovo handler di feed con Firefox 2.0.&lt;/p&gt;

&lt;pre name="code" class="bash"&gt;
llf520133.crawl.yahoo.net - - [23/Sep/2008:01:54:53 -0700] "GET /blog/public/2006/11/firefox_new_feed_handler/firefox2-registerFeedHandler.js HTTP/1.0" 200 1623 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)"
&lt;/pre&gt;

&lt;h3&gt;Frequenza di accesso&lt;/h3&gt;

&lt;p&gt;Per i più curiosi, ecco la frequenza di accesso ai file JavaScript e CSS calcolata negli ultimi 30 giorni, suddivisa per motori.&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;th&gt;Motore di Ricerca&lt;/th&gt;
      &lt;th&gt;CSS&lt;/th&gt;
      &lt;th&gt;JavaScript&lt;/th&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Google&lt;/td&gt;
      &lt;td&gt;9&lt;/td&gt;
      &lt;td&gt;26&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;MSN&lt;/td&gt;
      &lt;td&gt;2915&lt;/td&gt;
      &lt;td&gt;2485&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Yahoo!&lt;/td&gt;
      &lt;td&gt;1887&lt;/td&gt;
      &lt;td&gt;1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Ask&lt;/td&gt;
      &lt;td&gt;0&lt;/td&gt;
      &lt;td&gt;79&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3&gt;Scaricare non vuol dire leggere!&lt;/h3&gt;

&lt;p&gt;A questo punto qualcuno potrebbe obiettare che, analizzando i log, non è dato sapere se il crawler abbia realmente letto il contenuto file o se si è limitato a richiederlo. E' vero, ma è illogico pensare che un crawler decida di sua spontanea volontà di scaricare un file JavaScript collegato esternamente da un tag script... solo per generare accessi al server!&lt;/p&gt;
&lt;p&gt;Inoltre ci sono diversi modi per dimostrare come il file, in seguito, in effetti venga letto. Non mi dilungo ulteriormente, alcuni di questi sono contenuti leggendo tra le righe nei paragrafi seguenti.&lt;/p&gt;

&lt;h2&gt;Leggere vs Interpretare vs Eseguire&lt;/h2&gt;

&lt;p&gt;Fermi, dove scappate... non è mica ancora finito l'articolo! Prima di tornare al menu di navigazione con link in JavaScript è importante essere a conoscenza della sottile &lt;strong&gt;differenza tra leggere, interpretare ed eseguire&lt;/strong&gt;. Questi tre verbi potrebbero sembrare sinonimi, ma non è così.&lt;/p&gt;
&lt;p&gt;I crawler normalmente leggono i file JavaScript e CSS ma, come scrissi un anno fa nell'articolo &lt;a href="http://webmarketing.html.it/articoli/leggi/2304/cosa-gli-spider-dei-motori-di-ricerca-non-sanno-fare/" title="Cosa gli spider dei motori di ricerca non sanno fare"&gt;Cosa gli spider dei motori di ricerca non sanno fare&lt;/a&gt;, questo non significa necessariamente che intendano eseguirlo.&lt;/p&gt;
&lt;p&gt;In altre parole. I crawler scaricano il contenuto dei file, i sorgenti all'interno vengono normalmente interpretati (soprattutto nel caso di JavaScript) ma quasi mai eseguiti. Questo significa, ad esempio, che un crawler può facilmente scoprire il significato della funzione seguente ma non vuol dire che il dominio &lt;code&gt;paradise.god&lt;/code&gt; sarà indicizzato.&lt;/p&gt;

&lt;pre name="code" class="javascript"&gt;
function redirect_me_to_paradise {
  document.location.href = 'http://paradise.god';
}
&lt;/pre&gt;

&lt;p&gt;Per questo motivo spesso si tende ad affermare, in modo improprio, che i crawler non leggono JavaScript o CSS indicando che il loro contenuto non viene eseguito come ci si potrebbe aspettare e come avviene invece con un normale browser.&lt;/p&gt;

&lt;h2&gt;Perché i motori di ricerca leggono i file JavaScript e CSS?&lt;/h2&gt;

&lt;p&gt;L'esempio precedente dovrebbe cominciare a chiarire alcune delle motivazioni per le quali i motori di ricerca hanno cominciato a leggere ed interpretare il contenuto di file JavaScript e CSS. In passato entrambi i linguaggi sono stati largamente utilizzati per nascondere agli occhi degli utenti contenuti realizzati esclusivamente per i motori di ricerca, all'unico scopo di sfruttarne il posizionamento a favore di terze pagine. Per approfondimenti sul tema vi consiglio l'articolo &lt;a href="http://www.kerouac3001.com/testo-nascosto-guida-allo-spam-52.htm"&gt;Testo Nascosto&lt;/a&gt;, scritto da Vincenzo.&lt;/p&gt;
&lt;p&gt;Tecniche come &lt;strong&gt;redirect in javascript&lt;/strong&gt;, &lt;strong&gt;doorway page&lt;/strong&gt;, &lt;strong&gt;blocchi di testo nascosto&lt;/strong&gt; sono oggi nel mirino dei filtri antispam di quasi i motori di ricerca. Per individuarle è necessario analizzare ed interpretare il contenuto di questi file, spesso inseriti esterni alla pagina nella (vana) speranza di eludere il crawler del motore di ricerca.&lt;/p&gt;
&lt;p&gt;Per calcare ulteriormente la mano su questo punto vi consiglio alcune letture direttamente dal blog di Matt Cutts:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href="http://www.mattcutts.com/blog/seo-mistakes-sneaky-javascript/" title="SEO Mistakes: sneaky JavaScript"&gt;SEO Mistakes: sneaky JavaScript&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.mattcutts.com/blog/seo-mistakes-software-mistakes/" title="SEO Mistakes: software mistakes"&gt;SEO Mistakes: software mistakes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.mattcutts.com/blog/seo-mistakes-crappy-doorway-pages/" title="SEO Mistakes: crappy doorway pages"&gt;SEO Mistakes: crappy doorway pages&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.mattcutts.com/blog/seo-mistakes-spam-in-other-languages/" title="SEO Mistakes: Spam in other languages"&gt;SEO Mistakes: Spam in other languages&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.mattcutts.com/blog/ramping-up-on-international-webspam/" title="Ramping up on international webspam"&gt;Ramping up on international webspam&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.mattcutts.com/blog/seo-advice-clean-house-before-press-releases/" title="SEO Advice: clean house before press releases"&gt;SEO Advice: clean house before press releases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://www.mattcutts.com/blog/undetectable-spam/" title="&amp;#8220;Undetectable&amp;#8221; spam"&gt;"Undetectable" spam&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;In conclusione&lt;/h2&gt;

&lt;p&gt;Webmaster, SEO, spammer ed utenti siete avvisati! Qualunque sia il vostro scopo finale, siate consapevoli del fatto che &lt;strong&gt;i motori di ricerca leggono JavaScript e CSS, normalmente li interpretano, raramente li eseguono&lt;/strong&gt;. Ovviamente non è escluso che il comportamento possa variare in futuro.&lt;/p&gt;


      &lt;hr /&gt;
      &lt;p&gt;News Source: &lt;a href="http://www.simonecarletti.com/blog/2008/10/miti-e-leggende-seo-3.php" title="Miti e leggende SEO #3 - I motori di ricerca non leggono JavaScript e CSS"&gt;Miti e leggende SEO #3 - I motori di ricerca non leggono JavaScript e CSS&lt;/a&gt;&lt;br /&gt;
      News URI: http://www.simonecarletti.com/blog/2008/10/miti-e-leggende-seo-3.php&lt;/p&gt;
      &lt;p&gt;Copyright &amp;copy; 2005-2008 &lt;strong&gt;&lt;a href="http://www.simonecarletti.com"&gt;Simone Carletti&lt;/a&gt;&lt;/strong&gt;. This Feed is for non-commercial use only and licensed under &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.5/"&gt;Creative Common Attribution-NonCommercial-ShareAlike 2.5&lt;/a&gt; license. If you are not reading this material in your feed aggregator, the site you are looking at may be guilty of copyright infringement. Please contact me, so I can take appropriate action.&lt;/p&gt;    

    
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/simonecarletti?a=SQjQ55"&gt;&lt;img src="http://feeds.feedburner.com/~a/simonecarletti?i=SQjQ55" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=VGIFM"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=VGIFM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=ee7PM"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=ee7PM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=QDkpm"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=QDkpm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=psrFm"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=psrFm" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simonecarletti/~4/414780020" height="1" width="1"/&gt;</content>
     
    <!-- slash namespace -->
    <slash:comments>16</slash:comments>
     
  <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=simonecarletti&amp;itemurl=http%3A%2F%2Fwww.simonecarletti.com%2Fblog%2F2008%2F10%2Fmiti-e-leggende-seo-3.php</feedburner:awareness><feedburner:origLink>http://www.simonecarletti.com/blog/2008/10/miti-e-leggende-seo-3.php</feedburner:origLink></entry>
  <!-- end entry 806 -->
  
  <!-- start entry 795 -->
  <entry>
    <title>Leggendo i log ho scoperto... #8 - iearthworm</title>
    <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/simonecarletti/~3/412409260/leggendo-i-log-8.php" />
    <id>tag:www.simonecarletti.com,2008:/blog//1.795</id>
  
    <published>2008-10-06T03:00:16Z</published>
    <updated>2008-10-07T19:28:44Z</updated>
  
    <summary>Sotto analisi un altro crawler della scuderia Yahoo, appartenente alla versione cinese del colosso delle ricerche.</summary>
    <author>
      <name>Simone Carletti</name>
      <uri>http://www.simonecarletti.com</uri>
    </author>
      
    <!-- start categories -->
    
      <category term="Yahoo!" scheme="http://www.sixapart.com/ns/types#category" />
    
    <!-- end categories -->
    
    <!-- start tags -->
    
      <category term="crawler" label="crawler" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="log" label="log" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="loganalysis" label="log analysis" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="yahoo" label="yahoo" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <!-- end tags -->
    
    <content type="html" xml:lang="en" xml:base="http://www.simonecarletti.com/blog/">
      &lt;p&gt;... che Yahoo sembrerebbe avere una collezione di crawler non documentati particolarmente ricca. Dopo il &lt;a href="http://www.simonecarletti.com/blog/2008/08/leggendo-i-log-4.php" title="Leggendo i log ho scoperto che... #4 - Simone Carletti's Blog"&gt;Yahoo-MMCrawler&lt;/a&gt; ed il bot travestito da utente, è la volta di &lt;code&gt;iearthworm&lt;/code&gt;, un'altro misteriosa creatura di Yahoo! in versione sol levante.&lt;/p&gt;

&lt;p&gt;Di &lt;code&gt;iearthworm&lt;/code&gt; non se ne parla molto in giro, giusto &lt;a href="http://www.webmasterworld.com/search_engine_spiders/3095061.htm" title="iearthworm"&gt;qualche&lt;/a&gt; &lt;a href="http://forums.seochat.com/search-engines-alternative-25/iearthworm-yodao-117126.html" title="IEarthWorm &amp;amp; YoDao - SEO Chat"&gt;post&lt;/a&gt; neppure troppo recente.
Secondo approfondimenti, questo crawler sembra prediligere elementi come immagini ed icone.&lt;/p&gt;

&lt;p&gt;Anche l'analisi recente dei miei log lo conferma.&lt;/p&gt;
      &lt;pre name="code" class="bash"&gt;
$ zgrep 'iearthworm' access.log*
[17/Sep/2008:10:21:11 -0700] "HEAD /blog/public/2008/04/ce-posta-per-te/mailwasher-on-action.png HTTP/1.1" 200 361 "-" "iearthworm/1.0, mailto:iearthworm@yahoo.com.cn" 
[16/Sep/2008:18:57:27 -0700] "HEAD /blog/public/2008/05/benvenuto-ruby-html/guida_thumb_975ccb77f298cabc.gif HTTP/1.1" 200 361 "-" "iearthworm/1.0, mailto:iearthworm@yahoo.com.cn" 
[17/Aug/2008:09:09:11 -0700] "HEAD /blog/public/2008/05/benvenuto-ruby-html/guida_thumb_975ccb77f298cabc.gif HTTP/1.1" 200 361 "-" "iearthworm/1.0, mailto:iearthworm@yahoo.com.cn" 
[18/Aug/2008:01:59:30 -0700] "HEAD /blog/public/2008/04/ce-posta-per-te/mailwasher-on-action.png HTTP/1.1" 200 361 "-" "iearthworm/1.0, mailto:iearthworm@yahoo.com.cn" 
[21/Aug/2008:09:59:42 -0700] "HEAD /blog/public/2008/05/benvenuto-ruby-html/guida_thumb_975ccb77f298cabc.gif HTTP/1.1" 200 361 "-" "iearthworm/1.0, mailto:iearthworm@yahoo.com.cn" 
[22/Aug/2008:03:08:28 -0700] "HEAD /blog/public/2008/04/ce-posta-per-te/mailwasher-on-action.png HTTP/1.1" 200 361 "-" "iearthworm/1.0, mailto:iearthworm@yahoo.com.cn" 
[25/Aug/2008:07:22:58 -0700] "HEAD /blog/public/2008/05/benvenuto-ruby-html/guida_thumb_975ccb77f298cabc.gif HTTP/1.1" 200 361 "-" "iearthworm/1.0, mailto:iearthworm@yahoo.com.cn" 
[25/Aug/2008:23:56:43 -0700] "HEAD /blog/public/2008/04/ce-posta-per-te/mailwasher-on-action.png HTTP/1.1" 200 361 "-" "iearthworm/1.0, mailto:iearthworm@yahoo.com.cn" 
[29/Aug/2008:06:28:52 -0700] "HEAD /blog/public/2008/05/benvenuto-ruby-html/guida_thumb_975ccb77f298cabc.gif HTTP/1.1" 200 361 "-" "iearthworm/1.0, mailto:iearthworm@yahoo.com.cn" 
&lt;/pre&gt;
&lt;p&gt;Il fatto curioso è che l'accesso, almeno sul sito analizzato, avviene essenzialmente ad un paio di risorse ben precise. Inoltre, il crawler sembra aver cambiato nel tempo anche funzione o comportamento, essendo passato dall'uso del metodo HTTP &lt;code&gt;GET&lt;/code&gt; a &lt;code&gt;HEAD&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;L'uso del metodo HEAD è comune nel caso in cui sia sufficiente analizzare gli header HTTP di una risorsa, in genere per validarne la presenza sul server. Azzardando qualche ipotesi, si direbbe che il compito di questo crawler sia di verificare la presenza sul server di una risorsa, ad esempio, per mantenerla nell'indice di ricerca.&lt;/p&gt;

&lt;p&gt;La conferma che si tratta di un crawler di Yahoo! e non di un falso arriva, ancora una volta, da un reverse dns.&lt;/p&gt;

&lt;pre name="code" class="bash"&gt;
$ nslookup 203.209.240.151
Server:         85.37.17.16
Address:        85.37.17.16#53

Non-authoritative answer:
151.240.209.203.in-addr.arpa    name = dlk06.image.cn3.yahoo.com.

Authoritative answers can be found from:
&lt;/pre&gt;


      &lt;hr /&gt;
      &lt;p&gt;News Source: &lt;a href="http://www.simonecarletti.com/blog/2008/10/leggendo-i-log-8.php" title="Leggendo i log ho scoperto... #8 - iearthworm"&gt;Leggendo i log ho scoperto... #8 - iearthworm&lt;/a&gt;&lt;br /&gt;
      News URI: http://www.simonecarletti.com/blog/2008/10/leggendo-i-log-8.php&lt;/p&gt;
      &lt;p&gt;Copyright &amp;copy; 2005-2008 &lt;strong&gt;&lt;a href="http://www.simonecarletti.com"&gt;Simone Carletti&lt;/a&gt;&lt;/strong&gt;. This Feed is for non-commercial use only and licensed under &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.5/"&gt;Creative Common Attribution-NonCommercial-ShareAlike 2.5&lt;/a&gt; license. If you are not reading this material in your feed aggregator, the site you are looking at may be guilty of copyright infringement. Please contact me, so I can take appropriate action.&lt;/p&gt;    

    
&lt;p&gt;&lt;a href="http://feeds.feedburner.com/~a/simonecarletti?a=ttmtT5"&gt;&lt;img src="http://feeds.feedburner.com/~a/simonecarletti?i=ttmtT5" border="0"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=DXkwM"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=DXkwM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=haU3M"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=haU3M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=x5sCm"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=x5sCm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simonecarletti?a=IJLtm"&gt;&lt;img src="http://feeds.feedburner.com/~f/simonecarletti?i=IJLtm" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simonecarletti/~4/412409260" height="1" width="1"/&gt;</content>
     
    <!-- slash namespace -->
    <slash:comments>2</slash:comments>
     
  <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=simonecarletti&amp;itemurl=http%3A%2F%2Fwww.simonecarletti.com%2Fblog%2F2008%2F10%2Fleggendo-i-log-8.php</feedburner:awareness><feedburner:origLink>http://www.simonecarletti.com/blog/2008/10/leggendo-i-log-8.php</feedburner:origLink></entry>
  <!-- end entry 795 -->
  
  <!-- start entry 799 -->
  <entry>
    <title>Miti e leggende SEO #2 - Meta Tag, Ottimizzazione e Posizionamento</title>
    <link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/simonecarletti/~3/407842659/miti-e-leggende-seo-2.php" />
    <id>tag:www.simonecarletti.com,2008:/blog//1.799</id>
  
    <published>2008-10-01T02:32:50Z</published>
    <updated>2008-10-08T12:32:38Z</updated>
  
    <summary>E' opinione diffusa che inserire qualche meta tag nelle pagine web qui e là possa far scalare le posizioni dei risultati di una ricerca. Ma è veramente così?</summary>
    <author>
      <name>Simone Carletti</name>
      <uri>http://www.simonecarletti.com</uri>
    </author>
      
    <!-- start categories -->
    
      <category term="SEO" scheme="http://www.sixapart.com/ns/types#category" />
    
    <!-- end categories -->
    
    <!-- start tags -->
    
      <category term="keyword" label="keyword" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="metatag" label="meta tag" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="posizionamento" label="posizionamento" scheme="http://www.sixapart.com/ns/types#tag" />
    
      <category term="tag" label="tag" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <!-- end tags -->
    
    <content type="html" xml:lang="en" xml:base="http://www.simonecarletti.com/blog/">
      &lt;p&gt;Numerosissime guide per l'ottimizzazione ai motori di ricerca dedicano i primi capitoli a documentare tutte le possibili tecniche per utilizzare al meglio i meta tag di una pagina web, in particolare il &lt;strong&gt;meta tag keywords&lt;/strong&gt;. Troppo spesso queste guide si dimenticano di concludere spiegando che l'uso dei meta tag potrebbe non portare gli effetti attesi e, alcuni di essi, sono ad oggi totalmente ignorati dagli algoritmi dei motori di ricerca.&lt;/p&gt; 

&lt;p&gt;Il risultato? E' opinione diffusa che inserire qualche meta tag nelle pagine web qui e là possa far &lt;strong&gt;scalare le posizioni dei risultati di una ricerca&lt;/strong&gt;. Ma è veramente così?&lt;/p&gt;
      &lt;h2&gt;Che cosa sono i meta tag&lt;/h2&gt;

&lt;p&gt;Prima di addentrarci nello specifico vorrei assicurarmi che tutti abbiate ben presente che cosa sono i &lt;strong&gt;meta tag HTML&lt;/strong&gt; ma, soprattutto, abbiate ben chiaro il loro scopo e le loro specifiche.&lt;/p&gt;

&lt;p&gt;Il &lt;a href="http://www.w3.org/TR/REC-html40/struct/global.html#h-7.4.4" title="The global structure of an HTML document"&gt;capitolo Meta data delle specifiche HTML&lt;/a&gt; recita&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;HTML lets authors specify meta data -- information about a document rather than document content -- in a variety of ways.&lt;/p&gt;
&lt;p&gt;For example, to specify the author of a document, one may use the &lt;code&gt;META&lt;/code&gt; element as follows:&lt;/p&gt;
&lt;code&gt;&amp;lt;META name="Author" content="Dave Raggett"&gt;&lt;/code&gt;
&lt;p&gt;The &lt;code&gt;META&lt;/code&gt; element specifies a property (here "Author") and assigns a value to it (here "Dave Raggett").&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In altre parole, è possibile descrivere una pagina con dei &lt;strong&gt;metadati&lt;/strong&gt; utilizzando il tag &lt;code&gt;META&lt;/code&gt;. Sempre continuando nella lettura, le specifiche indicano la composizione di questo tag ed il suo contenuto. &lt;/p&gt;

&lt;p&gt;Semplificando quanto riportato, possiamo affermare che un tag &lt;code&gt;META&lt;/code&gt; (aka meta tag) è composto essenzialmente da una &lt;strong&gt;coppia di chiave/valore&lt;/strong&gt;, specificata come attributi del tag. La chiave è contenuta nell'attributo &lt;code&gt;name&lt;/code&gt;, il valore corrispondente nell'attributo obbligatorio &lt;code&gt;content&lt;/code&gt;.&lt;/p&gt;

&lt;pre name="code" class="html"&gt;
&amp;lt;META name="Chiave" content="Valore"&gt;
&lt;/pre&gt;

&lt;p&gt;Anche se non ci sono particolari restrizioni per quanto riguarda il &lt;strong&gt;nome del meta&lt;/strong&gt;, esistono alcuni nomi oramai standard come &lt;code&gt;Author&lt;/code&gt;, &lt;code&gt;Description&lt;/code&gt;, &lt;code&gt;Keyword&lt;/code&gt;, &lt;code&gt;Copyright&lt;/code&gt;...&lt;/p&gt;

&lt;pre name="code" class="html"&gt;
&amp;lt;META name="Author"      content="Simone Carletti"&gt;
&amp;lt;META name="Keyword"     content="keyword, keyword, keyword"&gt;
&amp;lt;META name="Description" content="A description."&gt;
&lt;/pre&gt;

&lt;p&gt;Ecco un esempio di meta tag reali, tratti dal codice HTML di una pagina web.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.simonecarletti.com/blog/public/2008/09/miti-e-leggende-seo-2/meta-tag.png"&gt;&lt;img src="http://www.simonecarletti.com/blog/public/2008/09/miti-e-leggende-seo-2/meta-tag-thumb-400x137.png" width="400" height="137" alt="meta-tag.png" class="centered" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;HTTP Equivalent meta tag&lt;/h3&gt;

&lt;p&gt;Esiste un particolare tipo di meta tag identificato dall'attributo &lt;code&gt;http-equiv&lt;/code&gt;. Questo meta, &lt;a href="http://www.w3.org/TR/REC-html40/struct/global.html#adef-http-equiv" title="The global structure of an HTML document"&gt;come indicato dalle specifiche&lt;/a&gt;, è adottato da client e server per raccogliere &lt;strong&gt;informazioni da utilizzare al posto dei rispettivi header HTTP&lt;/strong&gt; in una richiesta/risposta HTTP.&lt;/p&gt;

&lt;p&gt;Ad esempio, il meta tag seguente contiene l'indicazione del charset e della codifica della pagina e può essere utilizzato dal server per impostare l'opportuno header HTTP, in mancanza o in sostituzione ad eventuali header già presenti nell'intestazione di una risposta.&lt;/p&gt;

&lt;pre name="code" class="html"&gt;
&amp;lt;META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
&lt;/pre&gt;

&lt;p&gt;Vediamo un altro esempio. L'inserimento del codice seguente all'interno della sezione &lt;code&gt;HEAD&lt;/code&gt; di una pagina web provoca il reindirizzamento del browser all'URL indicato dopo il numero di secondi stabilito.&lt;/p&gt;

&lt;pre name="code" class="html"&gt;
&amp;lt;META http-equiv="refresh" content="5; URL=http://www.simonecarletti.com/directory"&gt;
&lt;/pre&gt;

&lt;p&gt;Anche in questo caso, il meta tag non ha lo scopo di descrivere la pagina bensì di istruire un particolare &lt;strong&gt;comportamento specifico per la singola richiesta/risposta HTTP&lt;/strong&gt;.&lt;/p&gt;


&lt;h3&gt;Specifiche tag META e motori di ricerca&lt;/h3&gt;

&lt;p&gt;Curiosamente, anche le specifiche HTML menzionano l'uso dei tag meta rispetto ai motori di ricerca. Ecco un estratto.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A common use for &lt;code&gt;META&lt;/code&gt; is to specify keywords that a search engine &lt;strong&gt;may&lt;/strong&gt; use to improve the quality of search results. When several &lt;code&gt;META&lt;/code&gt; elements provide language-dependent information about a document, search engines &lt;strong&gt;may&lt;/strong&gt; filter on the lang attribute to display search results using the language preferences of the user. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Un lettore distratto potrebbe, preso dall'entusiasmo, affermare quindi che i motori di ricerca calcolino il posizionamento di un sito basandosi sui meta tag. In realtà, è importante notare l'uso del verbo &lt;strong&gt;may&lt;/strong&gt; (NdR. che in italiano significa &lt;strong&gt;potrebbero&lt;/strong&gt;) proprio per indicare che non necessariamente questa è la strategia adottata.&lt;/p&gt;


&lt;h3&gt;Tag TITLE&lt;/h3&gt;

&lt;p&gt;Il tag &lt;code&gt;TITLE&lt;/code&gt; non corrisponde ad un vero e proprio meta tag, tuttavia vale la pena menzionarlo in questo articolo poiché la sua presenza, come vedremo in seguito, è &lt;strong&gt;rilevante in una strategia di search engine optimization&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Il tag &lt;code&gt;TITLE&lt;/code&gt; indica il titolo della pagina web e va inserito nella sezione &lt;code&gt;HEAD&lt;/code&gt; di una pagina HTML. Normalmente il suo contenuto viene inserito come titolo della finestra del browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.simonecarletti.com/blog/public/2008/09/miti-e-leggende-seo-2/title-tag-browser.png"&gt;&lt;img src="http://www.simonecarletti.com/blog/public/2008/09/miti-e-leggende-seo-2/title-tag-browser-thumb-400x42.png" width="400" height="42" alt="title-tag-browser.png" class="centered" /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;I meta tag non sono uno strumento magico&lt;/h2&gt;

&lt;p&gt;Già nel 2007 Danny Sullivan scriveva che &lt;a href="http://searchenginewatch.com/showPage.html?page=2167931" title="How To Use HTML Meta Tags - Search Engine Watch (SEW)"&gt;i meta tag non sono una soluzione magica&lt;/a&gt;. Pensare che le keyword inserite nel &lt;strong&gt;meta tag keywords&lt;/strong&gt; possano farci balzare nelle prime posizioni è errato e controproducente. Nella maggior parte dei casi &lt;strong&gt;i meta tag possono aiutarci a controllare come una pagina viene indicizzata dai motori di ricerca&lt;/strong&gt;, in altri casi possono addirittura prevenirne l'indicizzazione.&lt;/p&gt;

&lt;p&gt;I primi algoritmi dei motori di ricerca erano estremamente semplici. Per comodità, o mancanza di alternative, i meta tag erano uno dei primi elementi a disposizione per analizzare e descrivere il contenuto di una pagina. &lt;strong&gt;Non è un segreto che i primi algoritmi attribuissero una forte rilevanza a questi elementi&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ben presto i programmatori si scontrarono con la realtà dei fatti. Dare troppa libertà ai webmaster, affidarsi ciecamente a quanto inserito all'interno delle pagine, soprattutto se nascosto agli occhi dei normali utenti, &lt;strong&gt;non garantiva una qualità dei risultati&lt;/strong&gt;.
Per questo motivo, il peso dei meta tag negli algoritmi di posizionamento cominciò a diminuire fino ad arrivare, nella maggior parte dei casi, ad essere completamente inutile.&lt;/p&gt;

&lt;p&gt;Ma è bene non fare di tutta l'erba un fascio. Mentre da una parte meta tag storici hanno perso utilità, come il meta tag keywords, dall'altra gli stessi motori di ricerca hanno introdotto meta tag a loro discrezione per specifici scopi. E' altrettanto importante ricordare che non tutti gli algoritmi ragionano in ugual modo: ciò che vale per alcuni motori di ricerca potrebbe non essere valido per altri, come dimostra la &lt;a href="http://searchenginewatch.com/showPage.html?page=2167891#keysupport" title="Search Engine Features For Webmasters - Search Engine Watch (SEW)"&gt;tabella pubblicata su Search Engine Watch&lt;/a&gt; qualche anno fa o il più recente articolo sul &lt;a href="http://www.simonecarletti.com/blog/2007/04/google-yahoo-ask-nofollow.php" title="Come Google, Yahoo e Ask.com gestiscono l'attributo No Follow nei link - Simone Carletti's Blog"&gt;supporto all'attributo nofollow&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Vediamo allora &lt;strong&gt;quali sono i meta tag che ancora contano&lt;/strong&gt; e quelli che, invece, hanno perso valore.&lt;/p&gt;


&lt;h2&gt;I meta tag che (ancora) contano&lt;/h2&gt;

&lt;h3&gt;Tag title&lt;/h3&gt;

&lt;p&gt;Il &lt;strong&gt;tag &lt;code&gt;TITLE&lt;/code&gt;&lt;/strong&gt; (non è un meta, vedi paragrafo ad inizio post) è probabilmente il tag più influente sul posizionamento tra tutti quelli citati in questo contesto. Spesso è possibile &lt;strong&gt;scalare posizioni semplicemente studiando un titolo adeguato per la pagina&lt;/strong&gt;, in tema con i contenuti e correttamente inserito nel contesto del sito.&lt;/p&gt;

&lt;p&gt;Il tag &lt;code&gt;TITLE&lt;/code&gt; non è l'unico fattore che incide sul posizionamento. Non si pensi dunque che il solo inserimento di keyword ad alta competitività nel titolo di una pagina possa garantire il posizionamento della pagina stessa.&lt;br /&gt;
Tuttavia, per siti che godono di una buona visibilità è particolarmente facile sfruttare il contenuto di questo tag per posizionare specifiche keyword.&lt;/p&gt;

&lt;p&gt;Inizialmente era fondamentale l'ordine nel quale i termini comparivano all'interno di questo tag. Scrivere un titolo come &lt;code&gt;Analisi dei motori di ricerca&lt;/code&gt; non aveva la stessa rilevanza di &lt;code&gt;Simonecarletti.com - Analisi nuda e cruda senza fronzoli del funzionamento di un motore di ricerca&lt;/code&gt;. I motivi sono facilmente intuibili:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Posizione dei termini all'interno della frase&lt;/li&gt;
  &lt;li&gt;Prossimità dei termini tra loro&lt;/li&gt;
  &lt;li&gt;Uso di preposizioni e termini ignorati (&lt;strong&gt;stopwords&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;L'evoluzione di motori di ricerca ha profondamente modificato il comportamento alla base del tag &lt;code&gt;TITLE&lt;/code&gt;. &lt;strong&gt;Molti algoritmi ora considerano sinomini, termini correlati&lt;/strong&gt; e la posizione o prossimità non sono più fattori determinanti.&lt;br /&gt;
Non è raro, ad esempio, che alcune pagine siano posizionate con termini solo parzialmente presenti nel titolo, anche se si tratta di keyword molto competitive.&lt;/p&gt;

&lt;p&gt;Il contenuto del tag title non è utile solo ai motori di ricerca ma anche (e soprattutto) agli utenti. Il suo contenuto è visualizzato nelle finestre dei browser. Inserire un titolo come &lt;code&gt;loading...&lt;/code&gt;, &lt;code&gt;homepage&lt;/code&gt; o peggio ancora ignorarlo limita l'usabilità della pagina.&lt;br /&gt;
Inoltre, &lt;strong&gt;un titolo adeguato può influenzare la scelta di un utente&lt;/strong&gt; e motivarlo a selezionare il nostro sito tra i risultati di ricerca anche se la nostra posizione è successiva ad altri risultati meno accattivanti. Ad esempio, quale risultato secondo voi cattura maggiormente l'attenzione nello screenshot seguente?&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.simonecarletti.com/blog/public/2008/09/miti-e-leggende-seo-2/blog.webnews.it.png"&gt;&lt;img src="http://www.simonecarletti.com/blog/public/2008/09/miti-e-leggende-seo-2/blog.webnews.it-thumb-400x216.png" width="400" height="216" alt="blog.webnews.it.png" class="centered" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Data l'importanza di questo elemento ritengo opportuno citare l'ottimo articolo &lt;a href="http://www.mauriziopetrone.com/blog/ottimizzare-il-title-tag-tecniche-avanzate/" title="Ottimizzare il Title tag: tecniche avanzate | Petro"&gt;Ottimizzare il Title tag: tecniche avanzate&lt;/a&gt; scritto da Maurizio, contenente consigli e suggerimenti per ottimizzare il tag &lt;code&gt;TITLE&lt;/code&gt;.&lt;/p&gt;


&lt;h3&gt;Meta tag description&lt;/h3&gt;

&lt;p&gt;Il &lt;strong&gt;meta tag description&lt;/strong&gt; è un altro meta tag che merita attenzione. Per molti corrisponde all'unico meta tag influente, insieme al tag &lt;code&gt;TITLE&lt;/code&gt;, se si escludono i meta specifici introdotti dai motori di ricerca.&lt;/p&gt;

&lt;p&gt;Questo elemento svolge un ruolo spesso fondamentale: quando presente ed in tema con il resto della pagina, il suo contenuto è utilizzato dai principali motori di ricerca per generare la mini descrizione mostrata per ogni sito nella pagina dei risultati di una ricerca. In gergo, questa descrizione è chiamata &lt;strong&gt;snippet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;E' opinione diffusa che anche il meta tag description possa favorire il posizionamento. L'origine di questa supposizione deriva dalla presenza di numerose pagine ben posizionate per termini di ricerca non contenuti nel title ma nella description. In realtà, questo comportamento è conseguenza dell'evoluzione degli algoritmi dei motori di ricerca già discussa nella sezione precedente.
Solo Google ad oggi ha &lt;a href="http://googlewebmastercentral.blogspot.com/2007/12/answering-more-popular-picks-meta-tags.html" title="Official Google Webmaster Central Blog: Answering more popular picks: meta tags and web search"&gt;ufficialmente smentito&lt;/a&gt; una qualche influenza del meta tag description nel posizionamento.&lt;/p&gt;

&lt;p&gt;Torniamo alla descrizione nella pagina dei risultati. Un buon snippet ha una lunghezza massima, in genere consigliata intorno ai 160 caratteri, termina con un punto e costituisce una descrizione semplice e concisa del contenuto della pagina.&lt;/p&gt;

&lt;p&gt;I motori di ricerca adottano diverse strategie per &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;amp;answer=35264"&gt;selezionare il contenuto di uno snippet&lt;/a&gt;. Candidati per questo processo sono, in ordine di priorità:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Il contenuto del meta tag description&lt;/li&gt;
  &lt;li&gt;Il contenuto della descrizione del sito in &lt;a href="http://dmoz.org" title="ODP - Open Directory Project"&gt;Dmoz&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Un'elaborazione automatica del contenuto della pagina&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Come per il tag &lt;code&gt;TITLE&lt;/code&gt;, online è possibile trovare numerose risorse su come ottenere una buona descrizione. Ecco ad esempio un valido contributo da Google: &lt;a href="http://googlewebmastercentral.blogspot.com/2007/09/improve-snippets-with-meta-description.html" title="Official Google Webmaster Central Blog: Improve snippets with a meta description makeover"&gt;Improve snippets with a meta description makeover&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A conferma dell'importanza di una buona description segnalo due approfondimenti interessanti scritti da Francesco de Francesco (fradefra), dal titolo &lt;a href="http://www.yoyoformazione.it/2008/03/effetto-description-su-click-rate.php" title="Una buona description aumenta le visite"&gt;Una buona description aumenta le visite&lt;/a&gt; e &lt;a href="http://www.yoyoformazione.it/2008/02/comunicazione-serp-sit-articolo.php" title="Comunicazione SERP/Sito/Articolo"&gt;Comunicazione SERP/Sito/Articolo&lt;/a&gt;.&lt;/p&gt;


&lt;h3&gt;Meta tag robots&lt;/h3&gt;

&lt;p&gt;Il &lt;strong&gt;meta tag robots&lt;/strong&gt; è uno di quei meta specifici per i crawler dei motori di ricerca. A differenza di altri, questo meta tag non solo è considerato dagli algoritmi di indicizzazione ma può anche modificare radicalmente il comportamento e la presenza di una pagina nei risultati di una ricerca.&lt;/p&gt;

&lt;p&gt;Il suo contenuto è una lista di termini separata da virgola, di norma minuscoli, ciascuno corrispondente ad uno specifico comportamento.&lt;/p&gt;

&lt;dl&gt;
  &lt;dt&gt;noindex&lt;/dt&gt;
  &lt;dd&gt;indica di non indicizzare la pagina.&lt;/dd&gt;
  &lt;dt&gt;nofollow&lt;/dt&gt;
  &lt;dd&gt;indica di non seguire i collegamenti all'interno della pagina.&lt;/dd&gt;
  &lt;dt&gt;nosnippet&lt;/dt&gt;
  &lt;dd&gt;indica di non mostrare una descrizione per la pagina nei risultati delle ricerche.&lt;/dd&gt;
  &lt;dt&gt;noarchive&l