<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
> <channel><title>.::  Maurizio Pelizzone ::. &#187; tutorial</title> <atom:link href="http://maurizio.mavida.com/categorie/tutorial/feed/" rel="self" type="application/rss+xml" /><link>http://maurizio.mavida.com</link> <description># yet another WordPress Specialist</description> <lastBuildDate>Sat, 17 Dec 2011 11:14:16 +0000</lastBuildDate> <language>it</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /> <item><title>WordPress e qualità: sistemi di cache manuali</title><link>http://maurizio.mavida.com/2010/12/28/wordpress-e-qualita-sistemi-di-cache-manuali/</link> <comments>http://maurizio.mavida.com/2010/12/28/wordpress-e-qualita-sistemi-di-cache-manuali/#comments</comments> <pubDate>Tue, 28 Dec 2010 14:50:39 +0000</pubDate> <dc:creator>Maurizio Pelizzone</dc:creator> <category><![CDATA[featured]]></category> <category><![CDATA[sviluppo]]></category> <category><![CDATA[tutorial]]></category> <category><![CDATA[wordpress]]></category> <category><![CDATA[cache]]></category> <category><![CDATA[cache_template_part]]></category> <category><![CDATA[nginx]]></category> <category><![CDATA[qualità]]></category> <category><![CDATA[Transients API]]></category> <category><![CDATA[wordpress plugin]]></category> <category><![CDATA[wp_cache_set]]></category> <guid
isPermaLink="false">http://maurizio.mavida.com/?p=2660</guid> <description><![CDATA[Leggi l'orginale su http://maurizio.mavida.comPer parlare di qualità, tra le tante cose, si devono definire requisiti ed obiettivi e poi trovare degli indicatori per poterli misurare. Io sto cercando di intrudurre una serie di linee quida nel mio modo di sviluppare ad una di queste si riferisce alla velocità ed al numero di query con cui [...]]]></description> <content:encoded><![CDATA[<p>Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><p><br
/><p>Per parlare di <strong>qualità</strong>, tra le tante cose, si devono definire <strong>requisiti</strong> ed <strong>obiettivi</strong> e poi trovare degli <strong>indicatori</strong> per poterli <em>misurare</em>.<br
/> Io sto cercando di intrudurre una serie di <strong>linee quida</strong> nel mio modo di sviluppare ad una di queste si riferisce alla velocità ed al numero di <em>query</em> con cui vengono generate le pagine.</p><p><img
src="http://maurizio.mavida.com/wp-content/uploads/2010/12/cache_template_part.jpg" alt="" /></p><p>Gli indicatori che mi danno la misura e mi permettono di capire se sto rispettando i miei requisiti sono di tre tipi:</p><ol><li><strong>Lato browser</strong>: <a
href="http://developer.yahoo.com/yslow/">YSlow</a>, <a
href="http://code.google.com/intl/it-IT/speed/page-speed/">Page Speed</a> ma anche il pannello &#8220;Net &#8221; di <a
href="http://getfirebug.com/">Firebug</a>. Con questi verifico i tempi di caricamento dei singoli componenti della pagina ed eventuali colli di bottiglia nel caricamento di js.</li><li><strong>Lato server</strong>: <strong><a
href="http://mirror.facebook.net/facebook/xhprof/doc.html">XHProf</a></strong> . Si tratta di un profiler gerarchico per verificare i tempi di esecuzione di ogni singola funzione.</li><li><strong>Lato WordPress</strong>: <a
href="http://wordpress.org/extend/plugins/debug-queries/">Debug Query</a> e <a
href="http://wordpress.org/extend/plugins/debug-objects/">Debug Object</a>. Tramite questi plugin ho sotto controllo il numero di query ed un dettaglio dei singoli oggetti interni a <strong><a
href="http://maurizio.mavida.com/categorie/wordpress/">WordPress</a></strong>.</li></ol><p>E&#8217; ovvio che uno dei primi livelli di ottimizzazione sia l&#8217;intruduzione dei sistemi di <strong><a
href="http://it.wikipedia.org/wiki/Cache">cache</a></strong>.<br
/> Un uso appropriato può farci risparmiare diverse <em>query</em> e parecchi ciclo di CPU ma dato che in molti hanno <a
href="http://wordpress.org/extend/plugins/wp-widget-cache/">già</a> <a
href="http://wordpress.org/extend/plugins/w3-total-cache/">parlato</a> dei plugin che possono aiutarci nella gestione &#8220;semiautomatica&#8221; della <strong>cache</strong> vado oltre e vi segnalo solo un <a
href="http://supersoju.com/articles/wordpress-caching-comparision-w3-total-cache-vs-wp-super-cache-vs-wp-cache/">articolo</a> fatto da qualcuno che si è anche preoccupato di andare un po&#8217; più a fondo preparando qualche test.</p><p><span
id="more-2660"></span></p><p>Dalla versione 2.0 nel core di <strong>WordPress</strong> è presente un sistema di <a
href="http://codex.wordpress.org/Function_Reference/WP_Cache">caching non permanente</a> (nel senso che i dati sono residenti in memoria e solo per la durata della singola sessione).</p><p>Qui un breve esempio:</p><div
class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/>2<br
/>3<br
/>4<br
/>5<br
/>6<br
/></div></td><td><div
class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$last5 = wp_cache_get( 'elenco_ultimi_5_post' );<br
/> if ( false == $last5 ) {<br
/> $sql_last5 = &quot;select ID from $wpdb-&amp;gt;posts where post_type = 'post' and post_status = 'publish' order by post_date desc limit 5&quot;;<br
/> $last5 = $wpdb-&amp;gt;get_results( $sql_last5 );<br
/> wp_cache_set( 'elenco_ultimi_5_post', $last5 );<br
/> }</div></td></tr></tbody></table></div><p>Io spesso lo uso anche per salvarmi anche pezzi di html</p><div
class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/>2<br
/>3<br
/>4<br
/>5<br
/>6<br
/>7<br
/></div></td><td><div
class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$last5 = wp_cache_get( 'elenco_ultimi_5_post' );<br
/> if ( false == $last5 ) {<br
/> $sql_last5 = &quot;select ID, post_title &nbsp;from $wpdb-&amp;gt;posts where post_type = 'post' and post_status = 'publish' order by post_date desc limit 5&quot;;<br
/> $last5_data = $wpdb-&amp;gt;get_results( $sql_last5 );<br
/> if ($last5) :<br
/> foreach ($fivesdrafts as $post) :<br
/> $last5 .= &quot;</div></td></tr></tbody></table></div><li><a
href="&quot; . get_permalink( $post-&gt;ID) . &quot;">&#8221; . $post-&gt;post_title. &#8220;</a></li><p>&#8220;;<br
/> endforeach;<br
/> wp_cache_set( &#8216;elenco_ultimi_5_post&#8217;, $last5 );<br
/> endif;<br
/> }</p><p>Usando un sistema di questo tipo se volessi visualizzare l&#8217;elenco degli ultimi 5 post pubblicati nella mia sidebar eviterei di chiedere al database la stessa informazione per ogni pagina visualizzata ma dopo la prima richiesta verrebbe messo in memoria il risultato e reso subito pronto e disponibile per la volte successive.</p><p>Dal rilascio della 2.8 le cose sono anche migliorate con l&#8217;introduzione delle <a
href="http://codex.wordpress.org/Transients_API"><strong>Transients API</strong></a> che offrono sistema &#8220;<em>standardizzato</em>&#8221; per il salvataggio della <strong>cache</strong> su database.<br
/> Questo ci permette di salvare le informazioni &#8220;<em>cross-sessione</em>&#8221; rendendo riutilizzabile la <strong>cache</strong> anche per utenti diversi.</p><p>Questo è il codice con l&#8217;esempio di prima riadattato con le <strong>Transients API</strong></p><div
class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/>2<br
/>3<br
/>4<br
/>5<br
/>6<br
/>7<br
/></div></td><td><div
class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$last5 = get_transient( 'elenco_ultimi_5_post' );<br
/> if ( !$last5 ) {<br
/> $sql_last5 = &quot;select ID, post_title &nbsp;from $wpdb-&amp;gt;posts where post_type = 'post' and post_status = 'publish' order by post_date desc limit 5&quot;;<br
/> $last5_data = $wpdb-&amp;gt;get_results( $sql_last5 );<br
/> if ($last5) :<br
/> foreach ($fivesdrafts as $post) :<br
/> $last5 .= &quot;</div></td></tr></tbody></table></div><li><a
href="&quot; . get_permalink( $post-&gt;ID) . &quot;">&#8221; . $post-&gt;post_title. &#8220;</a></li><p>&#8220;;<br
/> endforeach;<br
/> set_transient( &#8216;elenco_ultimi_5_post&#8217;, $last5,3600 );<br
/> endif;<br
/> }</p><p>Questo piccolo cambiamento rende persistente la mia cache per un ora (3600 secondi) ed accessibile per ogni visitatore.</p><p>Il sistema potrebbe però avere ancora un limite in quanto nel caso venisse modificato o pubblicato un nuovo post questo non verrebbe visualizzato nell&#8217;elenco sino al momento in cui la <strong>cache</strong> non risultasse <em>invalidata</em> e quindi ricreata.<br
/> Tramite un semplice <strong>hook</strong> possiamo pero risolvere il problema&#8230;</p><p>add_action(&#8216;save_post&#8217;, &#8216;delete_last5_cache&#8217;);<br
/> function delete_last5_cache( $post_id  ) {<br
/> global $post;<br
/> if ( $post-&gt;post_status == &#8220;publish&#8221;) {<br
/> // cancello la cache<br
/> delete_transient(&#8216;elenco_ultimi_5_post&#8217;);<br
/> }<br
/> }</p><p>In alcune situazioni però questo non mi bastava ancora in quanto avrei voluto rendere persistente una porzione ancora più grossa (es. tutta la sidebar e/o tutto il footer). Quello che cercavo era qualcosa di simile a <a
href="http://codex.wordpress.org/Function_Reference/get_template_part">get_template_part</a> ma con un salvataggio su <strong>cache</strong>.</p><p>Ho quindi scritto io una funzione che ho chiamato <strong>cache_template_part</strong>.<br
/> Questo il sorgente:</p><p>/*<br
/> * 2010 | maurizio | http:maurizio.mavida.com<br
/> * versione 1.2<br
/> * viene effettuata una cache su disco di una porzione di codice<br
/> *  @param string $file &#8211; nome del template da caricare<br
/> *  @param bool always &#8211; visualizza sempre la cache (anche all&#8217;amministratore)<br
/> *  @param bool rewrite &#8211; ricrea sempre la cache anche se ancora valida<br
/> *  @param int cachetime &#8211; numero di secondi dopo il quale viene invalidata<br
/> *  @param string cachepath &#8211; percorso per il salvataggio della cache<br
/> *<br
/> * es. cache_template_parts(&#8220;sidebar.php&#8221;);<br
/> * es. cache_template_parts(&#8220;sidebar.php&#8221; , array( &#8216;cachetime &#8216; =&gt; 14400 )  );<br
/> */<br
/> function cache_template_part( $file , $args = null  ) {</p><p>$defaults = array(<br
/> &#8216;always&#8217; =&gt; false,<br
/> &#8216;rewrite&#8217; =&gt; false,<br
/> &#8216;cachetime&#8217; =&gt; 3600,<br
/> &#8216;cachepath&#8217; =&gt; &#8216;wp-content/cache/&#8217;,</p><p>);</p><p>$args = wp_parse_args( $args, $defaults );<br
/> extract( $args, EXTR_SKIP );</p><p>$cachefile = $cachepath . str_replace( &#8220;/&#8221;, &#8220;-&#8221;, $file);<br
/> $cachefile_created = ((@file_exists($cachefile))  ) ? @filemtime($cachefile) : 0;</p><p>if ( !$rewrite and ( time() &#8211; $cachetime &lt; $cachefile_created ) and ( $always || !is_user_logged_in())  ) {<br
/> echo  file_get_contents( $cachefile );<br
/> } else {<br
/> //ob_start(ob_gzhandler);<br
/> ob_start();</p><p>include($file);</p><p>if ( $always || !is_user_logged_in() ) {<br
/> // in caso di utente loggato manda subito l&#8217;output<br
/> $b = ob_get_clean();<br
/> //$b = trim(preg_replace(&#8216;/\s+/&#8217;, &#8216; &#8216;, $b));<br
/> $b = preg_replace(&#8216;/[ ]+/&#8217;, &#8216; &#8216;, $b);<br
/> $b = str_replace( array(&#8220;\r\n&#8221;, &#8220;\r&#8221;, &#8220;\n&#8221;, &#8220;\t&#8221; ), &#8221;, $b);</p><p>if ( strlen($b) &gt; 1 ) {<br
/> // controllo che il buffer sia valorizzato<br
/> $b = &#8220;&#8221; . $b;<br
/> file_put_contents( $cachefile , $b);<br
/> }</p><p>echo $b;</p><p>}<br
/> ob_end_flush(); //<br
/> }<br
/> }</p><p>L&#8217;unico argomento obbligatorio è il nome della file da caricare con una serie di argomenti opzionali (che devono essere passati come array).</p><p>Al momento, a differenza delle <strong>Transients API</strong>, ho deciso di salvare la cache su disco sequendo l&#8217;appoccio suggerito anche da altri plugin che in caso di problemi permette un debug più semplice e veloce (una semplice eliminazione dei file forze la rigenerazione della cache )</p><p>Se qualcuno volesse usarla, <strong>debuggarla</strong> e/o suggerirmi come migliorarla la può scaricare da qui sotto.</p> <a
href="http://maurizio.mavida.com/download/cache_template_part.txt"><img
src="http://maurizio.mavida.com/wp-content/plugins/download-monitor/img/download.gif" alt="cache_template_part" /></a><p>Questo vuole essere un&#8217;esempio di quello che intendo per qualità che può essere riassunto in un uso consapevole delle funzionalità core di <strong>WordPress</strong> e la realizzazione di &#8220;utility&#8221; che possano aiutare al raggiungimento dei requisiti.</p><p><strong>Ultima nota finale</strong>:<br
/> Il fatto di usare sistemi di cache manuale non vuol dire che si debbano usare solo quelli.<br
/> Un bella spinta la può dare l&#8217;utilizzo dell&#8217;<strong><a
href="http://wordpress.org/extend/plugins/apc/">APC Object Cache Backend</a></strong> (se il server lo supporta).<br
/> Se siete tra i fortunati ad avere <strong><a
href="http://nginx.org/en/">nginx</a></strong> come web server vi suggerisco <strong><a
href="http://wordpress.org/extend/plugins/nginx-proxy-cache-integrator/">Nginx proxy cache integrator</a></strong>.<br
/> E poi per tutti il forse poco conosciuto <strong><a
href="http://wordpress.org/extend/plugins/wp-widget-cache/">Widget Cache</a></strong></p><hr
style="border-top:black solid 1px" />Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><br
/><a
href="http://maurizio.mavida.com/2010/12/28/wordpress-e-qualita-sistemi-di-cache-manuali/">WordPress e qualità: sistemi di cache manuali</a> was first posted on dicembre 28, 2010 at 3:50 pm.<br
/>]]></content:encoded> <wfw:commentRss>http://maurizio.mavida.com/2010/12/28/wordpress-e-qualita-sistemi-di-cache-manuali/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>WordPress: Alterare il layout durante un loop</title><link>http://maurizio.mavida.com/2010/10/22/wordpress-alterare-il-layout-durante-un-loop/</link> <comments>http://maurizio.mavida.com/2010/10/22/wordpress-alterare-il-layout-durante-un-loop/#comments</comments> <pubDate>Fri, 22 Oct 2010 12:46:03 +0000</pubDate> <dc:creator>Maurizio Pelizzone</dc:creator> <category><![CDATA[featured]]></category> <category><![CDATA[tutorial]]></category> <category><![CDATA[wordpress]]></category> <category><![CDATA[custom post type]]></category> <category><![CDATA[get_post_type]]></category> <category><![CDATA[post_class]]></category> <category><![CDATA[pre_get_posts]]></category> <category><![CDATA[the_terms]]></category> <category><![CDATA[wordpress taxonomies]]></category> <guid
isPermaLink="false">http://maurizio.mavida.com/?p=2524</guid> <description><![CDATA[Leggi l'orginale su http://maurizio.mavida.comLo so. Il titolo è un po&#8217; criptico ma provo a descrivervi lo scenario: Installazione di WordPress. Siamo in homepage. Durante il listing dei contenuti devo gestire, a seconda del tipo e della posizione, il modo con cui i posts vengono visualizzati (es. immagini, allineamento, tassonomie ). Mi spiego meglio. Ho registrato [...]]]></description> <content:encoded><![CDATA[<p>Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><p><br
/><p>Lo so. Il titolo è un po&#8217; criptico ma provo a descrivervi lo scenario:</p><p>Installazione di <strong><a
href="http://maurizio.mavida.com/categorie/wordpress/">WordPress</a></strong>. Siamo in homepage. Durante il listing dei contenuti devo gestire, a seconda del tipo e della posizione, il modo con cui i posts vengono visualizzati (es. immagini, allineamento, tassonomie ).</p><p>Mi spiego meglio. Ho registrato due nuovi tipi (ex. video e libri) ai quali ho associato delle <strong>tassonomie personalizzate</strong> (es. i video hanno i registi mentre i libri gli autori).</p><p><img
src="http://maurizio.mavida.com/wp-content/uploads/2010/10/loop-layout.gif" alt="" title="loop-layout" width="480" height="220" class="alignnone size-full wp-image-2561" /></p><p>Nel mio loop voglio visualizzare film e libri con uno stile che indichi chiarmanete di che tipo è questo contenuto ed inoltre voglio aggiungere le informazioni reletive alla tassonomie proprietarie.</p><p>La cosa si complica ancora perchè i primi <em>n</em> contenuti (nel nostro caso 3) sono considerati &#8220;<em>featured</em>&#8221; e vanno visualizzati con <strong>thumbnail</strong> ed <strong>excerpt</strong> mentre gli altri sono con il titolo.</p><p><span
id="more-2524"></span></p><p>Partiamo dall&#8217;inizio ed iniziamo ad aggiungere i &#8220;<strong><a
href="http://maurizio.mavida.com/2010/08/25/wordpress-usare-meglio-i-custom-post-types/">custom type</a></strong>&#8221; in home:<br
/> (io questo snippet l&#8217;ho aggiunto in functions.php ed è importante farlo in quanto di default vengono visualizzati solo i tipo &#8220;post&#8221;)</p><div
class="codecolorer-container php twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/>2<br
/>3<br
/>4<br
/>5<br
/>6<br
/>7<br
/>8<br
/>9<br
/>10<br
/></div></td><td><div
class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">add_filter<span
style="color: #66cc66;">&#40;</span> <span
style="color: #ff0000;">'pre_get_posts'</span>, <span
style="color: #ff0000;">'get_home_posts'</span> <span
style="color: #66cc66;">&#41;</span>;<br
/> <br
/> <span
style="color: #000000; font-weight: bold;">function</span> get_home_posts<span
style="color: #66cc66;">&#40;</span> <span
style="color: #0000ff;">$query</span> <span
style="color: #66cc66;">&#41;</span> <span
style="color: #66cc66;">&#123;</span><br
/> <br
/> &nbsp; <span
style="color: #b1b100;">if</span> <span
style="color: #66cc66;">&#40;</span> is_home<span
style="color: #66cc66;">&#40;</span><span
style="color: #66cc66;">&#41;</span> <span
style="color: #66cc66;">&amp;&amp;</span> <span
style="color: #66cc66;">!</span><span
style="color: #0000ff;">$query</span>-<span
style="color: #66cc66;">&gt;</span><span
style="color: #006600;">query_vars</span><span
style="color: #66cc66;">&#91;</span><span
style="color: #ff0000;">'suppress_filters'</span><span
style="color: #66cc66;">&#93;</span> <span
style="color: #66cc66;">&#41;</span><span
style="color: #66cc66;">&#123;</span><br
/> &nbsp; &nbsp; <span
style="color: #0000ff;">$query</span>-<span
style="color: #66cc66;">&gt;</span><span
style="color: #006600;">set</span><span
style="color: #66cc66;">&#40;</span> <span
style="color: #ff0000;">'post_type'</span>, <span
style="color: #000066;">array</span><span
style="color: #66cc66;">&#40;</span> <span
style="color: #ff0000;">'post'</span>, <span
style="color: #ff0000;">'video'</span>, <span
style="color: #ff0000;">'libri'</span> <span
style="color: #66cc66;">&#41;</span> <span
style="color: #66cc66;">&#41;</span>;<br
/> &nbsp; &nbsp; <span
style="color: #66cc66;">&#125;</span><br
/> &nbsp; &nbsp; <br
/> &nbsp; &nbsp; <span
style="color: #b1b100;">return</span> <span
style="color: #0000ff;">$query</span>;<br
/> &nbsp;<span
style="color: #66cc66;">&#125;</span></div></td></tr></tbody></table></div><p>Ora vediamo il codice del loop nel quale ho usato <a
href="http://codex.wordpress.org/Function_Reference/get_template_part">get_template_part</a> per la gestione in base al tipo.</p><div
class="codecolorer-container php twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/>2<br
/>3<br
/>4<br
/>5<br
/>6<br
/>7<br
/>8<br
/>9<br
/>10<br
/>11<br
/></div></td><td><div
class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; <span
style="color: #b1b100;">if</span> <span
style="color: #66cc66;">&#40;</span>have_posts<span
style="color: #66cc66;">&#40;</span><span
style="color: #66cc66;">&#41;</span><span
style="color: #66cc66;">&#41;</span> : <span
style="color: #b1b100;">while</span> <span
style="color: #66cc66;">&#40;</span>have_posts<span
style="color: #66cc66;">&#40;</span><span
style="color: #66cc66;">&#41;</span><span
style="color: #66cc66;">&#41;</span> : the_post<span
style="color: #66cc66;">&#40;</span><span
style="color: #66cc66;">&#41;</span>; <br
/> <br
/> &nbsp; &nbsp; <span
style="color: #0000ff;">$post_index</span> ++;<br
/> <br
/> &nbsp; &nbsp; <span
style="color: #808080; font-style: italic;">// controllo se l'articolo è tra i primi 3 e dichiaro una classe &quot;featured&quot;</span><br
/> &nbsp; &nbsp; <span
style="color: #0000ff;">$post_class_position</span> = <span
style="color: #ff0000;">&quot;&quot;</span>;<br
/> &nbsp; &nbsp; <span
style="color: #b1b100;">if</span> <span
style="color: #66cc66;">&#40;</span> <span
style="color: #0000ff;">$post_index</span> <span
style="color: #66cc66;">&lt;</span> <span
style="color: #cc66cc;">3</span> <span
style="color: #66cc66;">&#41;</span> <span
style="color: #0000ff;">$post_class_position</span> = <span
style="color: #ff0000;">&quot;featured&quot;</span>;<br
/> <br
/> &nbsp; &nbsp; get_template_part<span
style="color: #66cc66;">&#40;</span> <span
style="color: #ff0000;">'post-layout'</span>, &nbsp;get_post_type<span
style="color: #66cc66;">&#40;</span> <span
style="color: #0000ff;">$post</span> <span
style="color: #66cc66;">&#41;</span> <span
style="color: #66cc66;">&#41;</span>;<br
/> <br
/> &nbsp; &nbsp; <span
style="color: #b1b100;">endwhile</span>; <span
style="color: #b1b100;">endif</span>;</div></td></tr></tbody></table></div><p>In questo modo a seconda del &#8220;<strong>post type</strong>&#8221; viene cercato e poi incluso un file con questo nome &#8220;post-layout-tipo.php&#8221;.<br
/> Mi sono quindi creato tre file (<em>post-layout-libri.php</em>, <em>post-layout-video.php</em>, <em>post-layout.php</em>) nei quali sono andato a preparare del <strong>markup</strong> specifico.</p><p>Prendiamo adesso come esempio quello dei libri: (post-layout-libri.php)</p><p></code></p><div
class="codecolorer-container php twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/>2<br
/>3<br
/>4<br
/>5<br
/>6<br
/>7<br
/>8<br
/>9<br
/>10<br
/>11<br
/>12<br
/>13<br
/>14<br
/>15<br
/>16<br
/>17<br
/>18<br
/>19<br
/>20<br
/>21<br
/>22<br
/>23<br
/>24<br
/>25<br
/>26<br
/>27<br
/>28<br
/>29<br
/>30<br
/>31<br
/>32<br
/>33<br
/>34<br
/>35<br
/>36<br
/>37<br
/>38<br
/></div></td><td><div
class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;div id=&quot;post-<span
style="color: #000000; font-weight: bold;">&lt;?php</span> the_ID<span
style="color: #66cc66;">&#40;</span><span
style="color: #66cc66;">&#41;</span>; <span
style="color: #000000; font-weight: bold;">?&gt;</span>&quot; <span
style="color: #000000; font-weight: bold;">&lt;?php</span> post_class<span
style="color: #66cc66;">&#40;</span> <span
style="color: #ff0000;">&quot;tipo_libro &quot;</span> . <span
style="color: #0000ff;">$post_class_position</span> <span
style="color: #66cc66;">&#41;</span>; <span
style="color: #000000; font-weight: bold;">?&gt;</span> &gt;<br
/> <br
/> &nbsp; &lt;h2 class=&quot;entry-title&quot;&gt;&lt;a href=&quot;<span
style="color: #000000; font-weight: bold;">&lt;?php</span> the_permalink<span
style="color: #66cc66;">&#40;</span><span
style="color: #66cc66;">&#41;</span>; <span
style="color: #000000; font-weight: bold;">?&gt;</span>&quot; title=&quot;<span
style="color: #000000; font-weight: bold;">&lt;?php</span> the_title_attribute<span
style="color: #66cc66;">&#40;</span> <span
style="color: #66cc66;">&#41;</span> &nbsp;<span
style="color: #000000; font-weight: bold;">?&gt;</span>&quot; rel=&quot;bookmark&quot;&gt;<br
/> &nbsp; <span
style="color: #000000; font-weight: bold;">&lt;?php</span> the_title<span
style="color: #66cc66;">&#40;</span><span
style="color: #66cc66;">&#41;</span>; <span
style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/a&gt;<br
/> &nbsp; &lt;/h2&gt;<br
/> <br
/> &nbsp; &lt;div class=&quot;entry-meta&quot;&gt;<br
/> &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">&lt;?php</span> <br
/> &nbsp; &nbsp; custom_posted_on<span
style="color: #66cc66;">&#40;</span><span
style="color: #66cc66;">&#41;</span>; <span
style="color: #808080; font-style: italic;">// meta information (post—date/time and author)</span><br
/> &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">?&gt;</span><br
/> &nbsp; &lt;/div&gt;&lt;!-- .entry-meta --&gt;<br
/> <br
/> &nbsp; <span
style="color: #000000; font-weight: bold;">&lt;?php</span> <br
/> &nbsp; <span
style="color: #808080; font-style: italic;">//funzione custom per le gestione della thumbnails </span><br
/> &nbsp; <span
style="color: #b1b100;">if</span> <span
style="color: #66cc66;">&#40;</span> <span
style="color: #0000ff;">$post_class_position</span> == <span
style="color: #ff0000;">&quot;featured&quot;</span><span
style="color: #66cc66;">&#41;</span> <span
style="color: #66cc66;">&#123;</span><br
/> &nbsp; &nbsp; <span
style="color: #0000ff;">$args</span> = <span
style="color: #000066;">array</span><span
style="color: #66cc66;">&#40;</span><span
style="color: #ff0000;">&quot;class&quot;</span> =<span
style="color: #66cc66;">&gt;</span> <span
style="color: #ff0000;">&quot;alignleft&quot;</span>, <span
style="color: #ff0000;">&quot;link&quot;</span> =<span
style="color: #66cc66;">&gt;</span> get_the_permalink<span
style="color: #66cc66;">&#40;</span><span
style="color: #66cc66;">&#41;</span> <span
style="color: #66cc66;">&#41;</span>;<br
/> &nbsp; &nbsp; the_thumb<span
style="color: #66cc66;">&#40;</span> <span
style="color: #0000ff;">$args</span> <span
style="color: #66cc66;">&#41;</span>; <br
/> &nbsp; &nbsp; <span
style="color: #66cc66;">&#125;</span><br
/> &nbsp;<span
style="color: #000000; font-weight: bold;">?&gt;</span><br
/> <br
/> &nbsp; &lt;div class=&quot;entry-content&quot;&gt;<br
/> &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">&lt;?php</span> <br
/> &nbsp; &nbsp; <span
style="color: #b1b100;">if</span> <span
style="color: #66cc66;">&#40;</span>is_single<span
style="color: #66cc66;">&#40;</span><span
style="color: #66cc66;">&#41;</span> <span
style="color: #66cc66;">&#41;</span> <span
style="color: #66cc66;">&#123;</span><br
/> &nbsp; &nbsp; &nbsp;the_content<span
style="color: #66cc66;">&#40;</span><span
style="color: #66cc66;">&#41;</span>; <span
style="color: #808080; font-style: italic;">// visualizzazione su pagina di dettaglio (single.php)</span><br
/> &nbsp; &nbsp; &nbsp;<span
style="color: #66cc66;">&#125;</span> &nbsp; <span
style="color: #b1b100;">else</span> <span
style="color: #b1b100;">if</span> <span
style="color: #66cc66;">&#40;</span> <span
style="color: #0000ff;">$post_class_position</span> == <span
style="color: #ff0000;">&quot;featured&quot;</span><span
style="color: #66cc66;">&#41;</span> <span
style="color: #66cc66;">&#123;</span><br
/> &nbsp; &nbsp; &nbsp;the_excerpt<span
style="color: #66cc66;">&#40;</span><span
style="color: #66cc66;">&#41;</span>; <span
style="color: #808080; font-style: italic;">// visualizzo il riassunto solo se è presente la classe &quot;featured&quot;</span><br
/> &nbsp; &nbsp; &nbsp;<span
style="color: #66cc66;">&#125;</span><br
/> &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">?&gt;</span><br
/> &nbsp; &lt;/div&gt;<br
/> <br
/> &nbsp; &lt;div class=&quot;entry-info&quot;&gt;<br
/> &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">&lt;?php</span> <br
/> &nbsp; &nbsp; &nbsp; the_terms<span
style="color: #66cc66;">&#40;</span> <span
style="color: #0000ff;">$post</span>-<span
style="color: #66cc66;">&gt;</span><span
style="color: #006600;">ID</span>, <span
style="color: #ff0000;">'autore'</span>, <span
style="color: #ff0000;">&quot;Autore: &quot;</span> <span
style="color: #66cc66;">&#41;</span>; <span
style="color: #808080; font-style: italic;">//tassonomia personalizzata</span><br
/> &nbsp; &nbsp; &nbsp; custom_posted_in<span
style="color: #66cc66;">&#40;</span><span
style="color: #66cc66;">&#41;</span>; &nbsp;<span
style="color: #808080; font-style: italic;">//meta information (category, tags and permalink) </span><br
/> &nbsp; &nbsp; &nbsp; <span
style="color: #000000; font-weight: bold;">?&gt;</span><br
/> &nbsp; &lt;/div&gt;&lt;!-- .entry-info --&gt;<br
/> <br
/> &lt;/div&gt;</div></td></tr></tbody></table></div><p>La funzione principale che mi permette di gestire il layout a livello di css è <a
href="http://codex.wordpress.org/Template_Tags/post_class"><strong>post_class</strong></a> che aggiunge "<em>dinamicamente</em>" due classi le quali definiscono il "<strong>post type</strong>" e visualizzazione dei "featured"</p><p>Per la visualizzazione delle tassonomie personalizzate mi affido ad un semplice <a
href="http://codex.wordpress.org/Function_Reference/the_terms"><strong>the_terms</strong></a> alla quale indico l'ID del post ed il nome della tassonomia.</p><p>Arrivati qui basta lavorare un po' con i fogli di stile per avere il pieno controllo di cosa e come visualizzare i nostri contenuti.</p><p>Il codice scritto è ovviamente perfettibile e la prima cosa da fare sarebbe quella di ridurre la ridondanza di codice e fare cache dei contentuti.</p><p>Se qualcosa non fosse chiaro.... chiedete.</p><p>Nota: Al momento in questo codice non viene gestita la paginazione. Forse, magari, può darsi che sia argomento di un futuro post.</p><hr
style="border-top:black solid 1px" />Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><br
/><a
href="http://maurizio.mavida.com/2010/10/22/wordpress-alterare-il-layout-durante-un-loop/">WordPress: Alterare il layout durante un loop</a> was first posted on ottobre 22, 2010 at 1:46 pm.<br
/>]]></content:encoded> <wfw:commentRss>http://maurizio.mavida.com/2010/10/22/wordpress-alterare-il-layout-durante-un-loop/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>La mia Checklist prima di andare online</title><link>http://maurizio.mavida.com/2010/09/20/la-mia-checklist-prima-di-andare-online/</link> <comments>http://maurizio.mavida.com/2010/09/20/la-mia-checklist-prima-di-andare-online/#comments</comments> <pubDate>Mon, 20 Sep 2010 11:27:45 +0000</pubDate> <dc:creator>Maurizio Pelizzone</dc:creator> <category><![CDATA[featured]]></category> <category><![CDATA[sviluppo]]></category> <category><![CDATA[tutorial]]></category> <category><![CDATA[checklist]]></category> <guid
isPermaLink="false">http://maurizio.mavida.com/?p=1549</guid> <description><![CDATA[Leggi l'orginale su http://maurizio.mavida.comPrima di andare &#8220;definitiviamente&#8221; online con un sito, indipendentemente dallo strumento usato (sia questo WordPress o codice &#8220;from scratch&#8221;),  è mia abitudine fare una serie di operazioni che in genere mi aiutano ad evitare problemi. Con il tempo ho preparato questa Checklist in cui potrete trovare attività che vanno da quelle di [...]]]></description> <content:encoded><![CDATA[<p>Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><p><br
/><p>Prima di andare &#8220;definitiviamente&#8221; online con un sito, indipendentemente dallo strumento usato (sia questo <a
href="../categorie/wordpress/"><strong>WordPress</strong></a> o codice &#8220;from scratch&#8221;),  è mia abitudine fare una serie di operazioni che in genere mi aiutano ad evitare problemi.</p><p><img
class="alignnone size-full wp-image-1828" title="checklist-prima-di-andare-online" src="http://maurizio.mavida.com/wp-content/uploads/2010/09/checklist-prima-di-andare-online.jpg" alt="" width="480" height="220" /></p><p>Con il tempo ho preparato questa <strong>Checklist</strong> in cui potrete trovare attività che vanno da quelle di competenze più  &#8220;<em>seo</em>&#8221; a quelle che sono operazioni puramente <em>sistemistiche</em>.</p><p>Come qualsiasi altra <strong>Checklist</strong> non va applicata &#8220;bovinamente&#8221;, ma adattata in base ella proprie competente ed agli accordi presi con il cliente.</p><ol><li>Preparazione profilo <a
href="http://maurizio.mavida.com/2010/09/14/strumenti-e-risorse-per-google-analytics/"><strong>Google Analytics</strong></a> e condivisione accesso con email cliente</li><li>Configurazione script tracciamento sul sito e configurazione custom_var (<a
href="http://wordpress.org/extend/plugins/google-analytics-for-wordpress/">Google Analytics for WordPress</a>)</li><li>Preparazione sitemap (<a
href="http://wordpress.org/extend/plugins/google-sitemap-generator/">Google XML Sitemaps</a>)</li><li>Registrazione <a
href="http://www.google.com/webmasters/tools?hl=it">Google WebMaster Tools</a> e segnalazione sitemap</li><li>Registrazione <a
href="http://www.bing.com/toolbox/webmasters/">Bing WebMaster</a> Tools e segnalazione sitemap</li><li>Verifica file Robots.txt con escusione aree riserate (<a
href="http://wordpress.org/extend/plugins/irobotstxt-seo/">iRobots.txt</a>)</li><li>Configurazione servizio di monitoraggio con segnalazione mail in caso di down (es <a
href="http://www.montastic.com/">Monastic</a>)</li><li>Configurazione backup <a
href="http://maurizio.mavida.com/2005/08/09/backup-con-rsync-e-crontab/">file</a> e <a
href="http://maurizio.mavida.com/2007/03/19/mysql-backup-via-mail/">database</a> (<a
href="http://wordpress.org/extend/plugins/wordpress-backup/">WordPress Backup</a> / <a
href="http://wordpress.org/extend/plugins/wp-db-backup/">WordPress database backup</a>)</li><li>Controllo funzionamento Form contatti</li><li>Preparazione .htaccess per compressione gzip, configurazione cache ecc&#8230; (vedi <a
href="http://oreilly.com/catalog/9780596529307">High Performance Web Sites</a>)</li></ol><p>Qui sotto il <strong>download</strong> con il pdf della <strong>Checklist</strong>&#8230;</p> <a
href="http://maurizio.mavida.com/download/Checklist-cosa-fare-prima-della-pubblicazione-di-un-sito.pdf"><img
src="http://maurizio.mavida.com/wp-content/plugins/download-monitor/img/download.gif" alt="Checklist cosa fare prima della pubblicazione di unsito" /></a><p>Se pensate ci siano altre cose da aggiungere fatemelo sapere&#8230;</p><hr
style="border-top:black solid 1px" />Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><br
/><a
href="http://maurizio.mavida.com/2010/09/20/la-mia-checklist-prima-di-andare-online/">La mia Checklist prima di andare online</a> was first posted on settembre 20, 2010 at 12:27 pm.<br
/>]]></content:encoded> <wfw:commentRss>http://maurizio.mavida.com/2010/09/20/la-mia-checklist-prima-di-andare-online/feed/</wfw:commentRss> <slash:comments>10</slash:comments> </item> <item><title>imapsync: trasferire una casella imap</title><link>http://maurizio.mavida.com/2010/05/01/imapsync-trasferire-una-casella-imap/</link> <comments>http://maurizio.mavida.com/2010/05/01/imapsync-trasferire-una-casella-imap/#comments</comments> <pubDate>Sat, 01 May 2010 20:18:56 +0000</pubDate> <dc:creator>Maurizio Pelizzone</dc:creator> <category><![CDATA[featured]]></category> <category><![CDATA[software]]></category> <category><![CDATA[tutorial]]></category> <category><![CDATA[email. linux]]></category> <category><![CDATA[imap]]></category> <category><![CDATA[imapsync]]></category> <guid
isPermaLink="false">http://maurizio.mavida.com/?p=1651</guid> <description><![CDATA[Leggi l'orginale su http://maurizio.mavida.comImap è una gran bella comodità e quando ti abitui finisci per non poterne fare più a meno. Se poi sei anche il sysadmin del server che ospita la tua casella e per ovvie ragioni non hai problemi di spazio è come avere una &#8220;gmail&#8221; ancora più comoda. L&#8217;unico problema è quando [...]]]></description> <content:encoded><![CDATA[<p>Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><p><br
/><p><a
href="http://it.wikipedia.org/wiki/Internet_Message_Access_Protocol">Imap</a> è una gran bella comodità e quando ti abitui finisci per non poterne fare più a meno.<br
/> Se poi sei anche il <strong>sysadmin</strong> del server che ospita la tua casella e per ovvie ragioni non hai problemi di spazio è come avere una &#8220;gmail&#8221; ancora più comoda.</p><p>L&#8217;unico problema è quando arriva il momento di cambiare server.<br
/> Ecco che allora ti fai una domanda: &#8220;<em>ma io la posta come la sposto da un server all&#8217;altro?</em>&#8221;</p><p>Inizialmente ho pensato di fare la migrazione passando attraverso un client (vedi <a
href="http://www.mozillaitalia.org/thunderbird/">thunderbird</a>) ma la cosa, avendola sperimentata con alcuni clienti, sarebbe stata decisamente lunga&#8230;.<br
/> <span
id="more-1651"></span></p><p>La soluzione, fortunatamente, era dietro l&#8217;angolo: <strong>imapsync</strong></p><p><img
src="http://maurizio.mavida.com/wp-content/uploads/2010/05/imapsync.jpg" alt="" title="imapsync" width="480" height="280" class="alignnone size-full wp-image-1660" /></p><p>L&#8217;installazione sulla mia fidata <strong>debian</strong> (lenny) è stata una passeggiata:</p><div
class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/></div></td><td><div
class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">#apt-get install imapsync</div></td></tr></tbody></table></div><p>Il suo utilizzo è decisamente elementare: in pratica è necessario passargli i dati per collegarsi al server da cui copiare e poi quelli del server in cui vanno copiate le mail.<br
/> Questo un esempio di sintassi:</p><div
class="code">#imapsync &#8211;host1 {NomeServerUno} &#8211;user1 {NomeUtenteUno} &#8211;password1 {PasswordUno} &#8211;host2 {NomeServerDue} &#8211;user2 {NomeUtenteDue} &#8211;password {PasswordDue}</div><p>{NomeServerUno}: ip o dominio server di origine<br
/> {NomeUtenteUno}: Nome utente server di origine<br
/> {PasswordUno}: password server di origine<br
/> {NomeServerDue}: ip o dominio server di destinazione<br
/> {NomeUtenteDue}: Nome utente server di destinazione<br
/> {PasswordDue}: password server di destinazione</p><p>Tra le <a
href="http://linux.die.net/man/1/imapsync">opzioni</a> disponibili possiamo indicare se usare una connessione ssl, escudere messaggi troppo grossi o troppo vecchi e/o escudere intere directory.<br
/> La sincronizzazione è un&#8217;operazione relativamente lunga e nel mio caso dove avevo oltre un giga di posta è durata più di 20 minuti.</p><p>Ne hanno parlato anche <a
href="http://www.howtoforge.com/how-to-migrate-mailboxes-between-imap-servers-with-imapsync">qui</a>, <a
href="http://moosesoom.blogspot.com/2009/11/sincronizzare-server-imap-imapsync.html">qui</a> e <a
href="http://www.chemlab.org/2010/01/26/imapsync-to-gmail-script">qui</a>.</p><hr
style="border-top:black solid 1px" />Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><br
/><a
href="http://maurizio.mavida.com/2010/05/01/imapsync-trasferire-una-casella-imap/">imapsync: trasferire una casella imap</a> was first posted on maggio 1, 2010 at 9:18 pm.<br
/>]]></content:encoded> <wfw:commentRss>http://maurizio.mavida.com/2010/05/01/imapsync-trasferire-una-casella-imap/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>10 Searchbox stilosi + howto</title><link>http://maurizio.mavida.com/2009/01/28/10-searchbox-stilosi-howto/</link> <comments>http://maurizio.mavida.com/2009/01/28/10-searchbox-stilosi-howto/#comments</comments> <pubDate>Wed, 28 Jan 2009 08:04:15 +0000</pubDate> <dc:creator>Maurizio Pelizzone</dc:creator> <category><![CDATA[featured]]></category> <category><![CDATA[sviluppo]]></category> <category><![CDATA[tutorial]]></category> <category><![CDATA[css]]></category> <category><![CDATA[design]]></category> <category><![CDATA[inspiration]]></category> <category><![CDATA[searchbox]]></category> <guid
isPermaLink="false">http://maurizio.mavida.com/?p=1179</guid> <description><![CDATA[Leggi l'orginale su http://maurizio.mavida.comUno degli elementi tipici di un blog è il box per la ricerca e qualche giorno fa mi sono messo in mente di cambiare quello presente su questa pagine. Ho quindi iniziato a guardarmi un giro cercando di trovare qualcosa che mi piacesse e dallo screening effettuato sono venute fuori diverse cose [...]]]></description> <content:encoded><![CDATA[<p>Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><p><br
/><p>Uno degli elementi tipici di un blog è il <strong>box per la ricerca</strong> e qualche giorno fa mi sono messo in mente di <em>cambiare</em> quello presente su questa pagine.</p><p>Ho quindi iniziato a guardarmi un giro cercando di trovare qualcosa che mi piacesse e dallo <em>screening</em> effettuato sono venute fuori diverse cose interessanti.</p><p>Quello che non ho trovato sono state le popolarissime &#8220;<em>inspiration list</em>&#8221; ed ho quindi deciso di presentarvene 10 che, secondo il mio gusto, ritengo siano decisamente &#8220;<strong>stilose</strong>&#8220;.</p><h3>Sohtanaka: Web development &#038; design</h3><p><a
href="http://www.sohtanaka.com/web-design-blog/"><img
src="http://maurizio.mavida.com/wp-content/uploads/2009/01/sohtanaka.jpg" alt="sohtanaka" title="sohtanaka" width="480" height="200" class="alignnone size-full wp-image-1322" /></a></p><h3>Michael Tyson: Life, tech, Cocoa development, Mac</h3><p><a
href="http://michael.tyson.id.au/"><img
src="http://maurizio.mavida.com/wp-content/uploads/2009/01/michaeltyson.jpg" alt="michaeltyson" title="michaeltyson" width="480" height="200" class="alignnone size-full wp-image-1318" /></a></p><p><span
id="more-1179"></span></p><h3>Alex Buga: Webdesigner superstar</h3><p><a
href="http://www.alexbuga.com/"><img
src="http://maurizio.mavida.com/wp-content/uploads/2009/01/alexbuga.jpg" alt="alexbuga" title="alexbuga" width="480" height="200" class="alignnone size-full wp-image-1342" /></a></p><h3>College Park Church</h3><p><a
href="http://www.yourchurch.com/"><img
src="http://maurizio.mavida.com/wp-content/uploads/2009/01/yourchurch.jpg" alt="yourchurch" title="yourchurch" width="480" height="200" class="alignnone size-full wp-image-1323" /></a></p><h3>Janko at warp speed</h3><p><a
href="http://www.jankoatwarpspeed.com/"><img
src="http://maurizio.mavida.com/wp-content/uploads/2009/01/jankoatwarpspeed.jpg" alt="jankoatwarpspeed" title="jankoatwarpspeed" width="480" height="200" class="alignnone size-full wp-image-1317" /></a></p><h3>WordPress theme: Review</h3><p><a
href="http://wtheme.com/review/"><img
src="http://maurizio.mavida.com/wp-content/uploads/2009/01/review-480x200.jpg" alt="review" title="review" width="480" height="200" class="alignnone size-medium wp-image-1321" /></a></p><h3>WordPress theme: Personal</h3><p><a
href="http://www.wpdesigner.com/demo/index.php?preview=Personal"><img
src="http://maurizio.mavida.com/wp-content/uploads/2009/01/personal.jpg" alt="personal" title="personal" width="480" height="200" class="alignnone size-full wp-image-1320" /></a></p><h3>WordPress theme: Clearpress</h3><p><a
href="http://wpthemes.blogohblog.net/index.php?wptheme=clearpress"><img
src="http://maurizio.mavida.com/wp-content/uploads/2009/01/clearpress.jpg" alt="clearpress" title="clearpress" width="480" height="200" class="alignnone size-full wp-image-1315" /></a></p><h3>WordPress theme: Industry</h3><p><a
href="http://www.premiumthemes.com/preview/?theme=industry"><img
src="http://maurizio.mavida.com/wp-content/uploads/2009/01/industry.jpg" alt="industry" title="industry" width="480" height="200" class="alignnone size-full wp-image-1316" /></a></p><h3>WordPress theme: Chrome</h3><p><a
href="http://ericulous.com/2008/09/09/wp-theme-google-chrome/"><img
src="http://maurizio.mavida.com/wp-content/uploads/2009/01/chrome.jpg" alt="chrome" title="chrome" width="480" height="200" class="alignnone size-full wp-image-1314" /></a></p><p>Finiti gli esempi affrontiamo adesso la <strong>realizzazione</strong>.<br
/> Dal punto di vista <em>tecnico</em> ho visto usare diversi approcci ma uno in particolare mi è piaciuto per la sua semplità.</p><p>Questa è la struttura semantica:</p><div
class="code"> &lt;div id=&quot;searchbox&quot;&gt;<br
/> &lt;form method=&quot;post&quot; action=&quot;searchpage.php&quot;&gt;<br
/> &lt;input id=&quot;searchfield&quot; name=&quot;searchfield&quot; type=&quot;text&quot; &gt;<br
/> &lt;input id=&quot;searchbutton&quot; type=&quot;image&quot; src=&quot;searchbutton.gif&quot;&gt;<br
/> &lt;/form&gt;<br
/> &lt;/div&gt;</div><p>Il box è tenuto insieme da un <strong>div</strong> dalle dimensione fisse che si occuperà di gestire lo sfondo. Al form form vengono impostati <em>margin</em> e <em>padding</em> a zero, mentro sui tag <strong>input</strong> vanno eliminati i bordi e definito un posizionamento <em>float</em>.</p><div
class="code"> #searchbox {<br
/> background: url(searchbg.gif) no-repeat;<br
/> height: 30px;<br
/> width: 300px;<br
/> }<br
/> #searchbox form { margin: 0px; padding: 0px;  }<br
/> #searchbox input { border: 0px; float: left; }<br
/> #searchbox #searchfield {<br
/> margin: 6px 0px 6px 10px;<br
/> font-size: 15px;<br
/> }<br
/> #searchbox #searchbutton { height: 30px; }</div><p>L&#8217;elemento più &#8220;<strong>complicato</strong>&#8221; da gestire è il campo di ricerca &#8220;<em>searchfield</em>&#8221; al quale non daremo un altezza fissa ma utilizzeremo dimensione del font, padding e margin.<br
/> Infine il <strong>submit</strong> che va preparato in modo tale da far coincidere l&#8217;altezza con quella del <strong>div</strong> che lo contiene. In alcuni casi ho visto usare un segnaposto completamente trasparente in modo che sia l&#8217;immagine di sfondo a gestire tutto.</p><p>Questa soluzione non rappresenta l&#8217;unico modo di affrontare il problema e nei 10 link presentati è possibile trovare altre <strong>tecniche</strong> altrettanto <em>interessanti</em>.</p><p>Concludo segnalandovi questo <a
href="http://www.sohtanaka.com/web-design/styling-input-search-form-css/">articolo</a> che è l&#8217;unico che ho trovato sull&#8217;argomento.</p><hr
style="border-top:black solid 1px" />Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><br
/><a
href="http://maurizio.mavida.com/2009/01/28/10-searchbox-stilosi-howto/">10 Searchbox stilosi + howto</a> was first posted on gennaio 28, 2009 at 9:04 am.<br
/>]]></content:encoded> <wfw:commentRss>http://maurizio.mavida.com/2009/01/28/10-searchbox-stilosi-howto/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Montate automaticamente periferiche USB</title><link>http://maurizio.mavida.com/2009/01/23/montate-automaticamente-periferiche-usb/</link> <comments>http://maurizio.mavida.com/2009/01/23/montate-automaticamente-periferiche-usb/#comments</comments> <pubDate>Fri, 23 Jan 2009 12:11:55 +0000</pubDate> <dc:creator>Maurizio Pelizzone</dc:creator> <category><![CDATA[featured]]></category> <category><![CDATA[tutorial]]></category> <category><![CDATA[debian]]></category> <category><![CDATA[f.a.q. for dummies]]></category> <category><![CDATA[howto]]></category> <category><![CDATA[linux]]></category> <category><![CDATA[mantellini]]></category> <category><![CDATA[usb]]></category> <guid
isPermaLink="false">http://maurizio.mavida.com/?p=1218</guid> <description><![CDATA[Leggi l'orginale su http://maurizio.mavida.comUbuntu e molte altre distribuzioni &#8220;desktop&#8221; ci hanno abituato a quella piccola magia chiamata automount che permette il colleganeti automatico al filesystem di periferiche USB come un dischi removibili o sempici chiavette. In pratica ci evita la &#8220;noia&#8221; del mount. Come dicevo qualche riga sopra questa funzionalità è presente in moltissime distrubuzioni [...]]]></description> <content:encoded><![CDATA[<p>Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><p><br
/><p><strong>Ubuntu</strong> e molte altre distribuzioni &#8220;<em>desktop</em>&#8221; ci hanno abituato a quella piccola magia chiamata <strong><a
href="http://www.ibiblio.org/pub/Linux/docs/HOWTO/translations/it/html_single/Automount.html.gz">automount</a></strong> che permette il colleganeti automatico al filesystem di periferiche <strong>USB</strong> come un dischi removibili o sempici chiavette.</p><p>In pratica ci evita la &#8220;noia&#8221; del <a
href="http://book.slackware.it/filesystem-structure-mounting.html"><strong>mount</strong></a>.</p><p>Come dicevo qualche riga sopra questa funzionalità è presente in moltissime distrubuzioni dotate di <strong><a
href="http://it.wikipedia.org/wiki/Desktop_environment">Desktop environment</a></strong> ma nel caso volessimo usarla sulla nostra <em><a
href="http://maurizio.mavida.com/2005/07/30/diario-di-una-debian-sarge-minimale/">debian minimale</a></em> dobbiamo installare un pacchetto aggiuntivo.</p><p><img
src="http://maurizio.mavida.com/wp-content/uploads/2009/01/liunx-usbmount.jpg" alt="liunx-usbmount" title="liunx-usbmount" width="480" height="200" class="alignnone size-full wp-image-1225" /></p><p>Fino a ieri avrei suggerito <strong><a
href="http://www.linux-consulting.com/Amd_AutoFS/autofs.html">autofs</a></strong> il quale funziona egregiamente a patto di avere voglia di fare qualche <a
href="http://freespace.sourceforge.net/guidod/howto/autofs.html">piccola</a> <a
href="http://www.pluto.it/files/ildp/lfs/blfs/6.0/postlfs/autofs.html">configurazione</a> ma, oggi, dopo aver fatto una piccola ricerca per rispondere ad un mail ricevuta da un certo Riccardo sono venuto a conoscenda di <a
href="http://usbmount.alioth.debian.org/"><strong>USBmount</strong></a>.</p><blockquote><p>The USBmount Debian package automatically mounts USB  mass storage devices (typically USB pens) when they are plugged in, and unmounts them when they are removed. The mountpoints (/media/usb[0-7] by default), filesystem types to consider, and mount options are configurable.</p></blockquote><p>Essendo presente nei reposity debian è sufficente il solito:</p><div
class="code"># apt-get install usbmount</div><p>Come già scritto anche in <a
href="http://guide.debianizzati.org/index.php/UsbMount:_Gestione_automatizzata_delle_periferiche_usb_di_memorizzazione">queste</a> <a
href="http://www.cimice.net/2007/06/06/usbmount-montare-le-periferiche-usb-in-debian-automaticamente/">pagine</a> il mount di chiavette formattate con fat32 richiede una modifica al file di configurazione (&#8220;/etc/usbmount/usbmount.conf&#8221;) aggiungendo &#8220;vfat&#8221; all&#8217;elenco dei filesystem riconosciuti.</p><div
class="code">FILESYSTEMS=&#8221;vfat ext2 ext3&#8243;</div><p>Infine per applicare i cambiamenti è necessario riavviare udev</p><div
class="code"># /etc/init.d/udev restart</div><p>A questo punto per poter poter accedere alla nostra chiavetta USB ci basterà spostarci sotto &#8220;/media/usb&#8221;  (ovviamente dopo averla inserita) <img
src='http://maurizio.mavida.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p><hr
style="border-top:black solid 1px" />Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><br
/><a
href="http://maurizio.mavida.com/2009/01/23/montate-automaticamente-periferiche-usb/">Montate automaticamente periferiche USB</a> was first posted on gennaio 23, 2009 at 1:11 pm.<br
/>]]></content:encoded> <wfw:commentRss>http://maurizio.mavida.com/2009/01/23/montate-automaticamente-periferiche-usb/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Controllo degli accessi su SSH</title><link>http://maurizio.mavida.com/2008/10/18/controllo-degli-accessi-su-ssh/</link> <comments>http://maurizio.mavida.com/2008/10/18/controllo-degli-accessi-su-ssh/#comments</comments> <pubDate>Sat, 18 Oct 2008 11:33:34 +0000</pubDate> <dc:creator>Maurizio Pelizzone</dc:creator> <category><![CDATA[featured]]></category> <category><![CDATA[security]]></category> <category><![CDATA[tutorial]]></category> <category><![CDATA[debian]]></category> <category><![CDATA[denyhosts]]></category> <category><![CDATA[howto]]></category> <category><![CDATA[linux]]></category> <category><![CDATA[ssh]]></category> <guid
isPermaLink="false">http://maurizio.mavida.com/?p=916</guid> <description><![CDATA[Leggi l'orginale su http://maurizio.mavida.comQuesta mattina controllando i report di alcuni server relativi al traffico generato ho visto qualcosa di alquanto anomalo. Il grafico che vedete rappresente l&#8217;attivita del protocollo ssh e come potete osservare dalle 4.30 alla 6.30 qualche simpatico amico a tentato un brute force. Da una prima analisi non sembra essere successo nulla [...]]]></description> <content:encoded><![CDATA[<p>Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><p><br
/><p>Questa mattina controllando i report di alcuni server relativi al traffico generato ho visto qualcosa di alquanto anomalo.</p><p><a
href="http://maurizio.mavida.com/wp-content/uploads/2008/10/grafico-accessi-ssh.png"><img
class="alignnone size-full wp-image-920" title="grafico-accessi-ssh" src="http://maurizio.mavida.com/wp-content/uploads/2008/10/grafico-accessi-ssh.png" alt="" width="480" height="152" /></a></p><p>Il grafico che vedete rappresente l&#8217;attivita del protocollo <strong><a
href="http://www.autistici.org/hacklab_fi/risorse/DM/MyLinuxse210.html">ssh</a></strong> e come potete osservare dalle 4.30 alla 6.30 qualche simpatico <a
href="http://it.wikipedia.org/wiki/Script_kiddie">amico</a> a tentato un <a
href="http://it.wikipedia.org/wiki/Brute_force"><strong>brute force</strong></a>.</p><p>Da una prima analisi non sembra essere successo nulla di grave in quanto dai log si può vedere un banale tentativo di <a
href="http://it.wikipedia.org/wiki/Attacco_a_dizionario">dictionary attacks.</a></p><p>Sotto potete vedere una parte del log restituito da questo comando:</p><div
class="code"># cat /var/log/auth.log | grep ssh | grep &#8220;invalid user&#8221;</div><p><a
href="http://maurizio.mavida.com/wp-content/uploads/2008/10/ssh-dictionary-attacks.gif"><img
class="alignnone size-full wp-image-919" title="ssh-dictionary-attacks" src="http://maurizio.mavida.com/wp-content/uploads/2008/10/ssh-dictionary-attacks.gif" alt="" width="480" height="169" /></a></p><p>Nello stesso modo ho poi verificato gli accessi &#8220;autorizzati&#8221; e fortunatamente non ne risultano altri oltre a quelli fatti dal sottoscritto:</p><div
class="code"># cat /var/log/auth.log | grep ssh | grep Accepted</div><p>E&#8217; anche vero che nel caso in cui il nostro hackers fosse riuscito ad accedere avrebbe potuto eliminare una parte dei log ma voglio pensare che avrebbe eliminato tutti i riferimenti al suo ip.</p><p>Anche se considero l&#8217;attacco fallito ho cercato in rete come evitare questo tipo di attacchi e come in tante altre occasioni la ricerca è durata meno di un minuto: <a
href="http://www.howtoforge.com/preventing_ssh_dictionary_attacks_with_denyhosts">Preventing SSH Dictionary Attacks With DenyHosts</a></p><blockquote><p><a
href="http://it.wikipedia.org/wiki/DenyHosts"><strong>DenyHosts</strong></a> è un tool di sicurezza scritto in <a
title="Python" href="http://it.wikipedia.org/wiki/Python">Python</a> per server SSH. È pensato per prevenire attacchi <a
class="mw-redirect" title="Brute force" href="http://it.wikipedia.org/wiki/Brute_force">brute force</a> verso server <a
class="mw-redirect" title="Secure Shell" href="http://it.wikipedia.org/wiki/Secure_Shell">SSH</a> monitorando i tentativi di login invalidi nel log di autenticazione e bloccando gli indirizzi <a
title="Indirizzo IP" href="http://it.wikipedia.org/wiki/Indirizzo_IP">IP</a>. (via wikipedia)</p></blockquote><p>Dopo aver verificato se il pacchetto fosse già presente nei repository debian ho provveduto al solito:</p><div
class="code"># apt-get install denyhosts</div><p>Una veloce occhiata al <em>file di configurazione</em> per modificare la <strong>mail</strong> a cui inviare gli avvisi sui nuovi hosts bloccati ed un controllo lo script fosse in funzione come servizio sono al momento sufficenti per <em>&lt;s&gt;farmi dormire tranquillo</em>&lt;/s&gt; rimandare di 24 ore le prossime analisi.</p><hr
style="border-top:black solid 1px" />Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><br
/><a
href="http://maurizio.mavida.com/2008/10/18/controllo-degli-accessi-su-ssh/">Controllo degli accessi su SSH</a> was first posted on ottobre 18, 2008 at 12:33 pm.<br
/>]]></content:encoded> <wfw:commentRss>http://maurizio.mavida.com/2008/10/18/controllo-degli-accessi-su-ssh/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>5 nuovi indici per le tabelle di wordpress</title><link>http://maurizio.mavida.com/2008/05/16/5-nuovi-indici-per-le-tabelle-di-wordpress/</link> <comments>http://maurizio.mavida.com/2008/05/16/5-nuovi-indici-per-le-tabelle-di-wordpress/#comments</comments> <pubDate>Fri, 16 May 2008 14:43:20 +0000</pubDate> <dc:creator>Maurizio Pelizzone</dc:creator> <category><![CDATA[tutorial]]></category> <category><![CDATA[wordpress]]></category> <category><![CDATA[howto]]></category> <category><![CDATA[mysql]]></category> <guid
isPermaLink="false">http://maurizio.mavida.com/2008/05/16/5-nuovi-indici-per-le-tabelle-di-wordpress/</guid> <description><![CDATA[Leggi l'orginale su http://maurizio.mavida.comSeguendo alcuni suggerimenti di un essere illuminato, sto lentamente mettendo in pratica quanto ascoltato durante l&#8217; iWordCamp. Mi appunto quindi i comandi da lanciare in modo non dovermi ricordare la sintassi ed evitare refusi&#8230; CREATE INDEX autoload ON wp_options (autoload); CREATE INDEX post_date ON wp_posts (post_date); CREATE INDEX post_date_gmt ON wp_posts (post_date_gmt); [...]]]></description> <content:encoded><![CDATA[<p>Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><p><br
/><p>Seguendo alcuni <a
href="http://www.fullo.net/blog/archives/2008/05/08/piccoli-suggerimenti-per-rendere-wordpress-piu-performante/">suggerimenti</a> di un <a
href="http://www.fullo.net/">essere illuminato</a>, sto lentamente mettendo in pratica quanto ascoltato durante l&#8217; <a
href="http://barcamp.org/iwordcamp">iWordCamp</a>.</p><p>Mi appunto quindi i comandi da lanciare in modo non dovermi ricordare la <a
href="http://dev.mysql.com/doc/refman/5.0/en/create-index.html">sintassi</a> ed evitare refusi&#8230;</p><div
class="code">CREATE INDEX autoload ON wp_options (autoload);</div><div
class="code">CREATE INDEX post_date ON wp_posts (post_date);</div><div
class="code">CREATE INDEX post_date_gmt ON wp_posts (post_date_gmt);</div><div
class="code">CREATE INDEX parent ON wp_term_taxonomy (parent);</div><div
class="code">CREATE INDEX name ON wp_terms (name);</div><p>In alcune installazioni il nome delle vostra tabelle potrebbe essere diverso&#8230; verificate quindi prima se avete usato un prefisso.<br
/> (file wp-config var $table_prefix)</p><p>Mi verrebbe anche voglia di scrivere un piccolo plugin per rendere il lavoro ancora più veloce, ma mi sembra una roba troppo banale.</p><p>N.B.<br
/> L&#8217;applicazione di questi indici è applicabile solo nel caso abbiate una versione di <a
href="http://wordpress.org/">wordpress</a> 2.3 o superiore.</p><p>Già che si sono segnalo anche <a
href="http://rackerhacker.com/mysqltuner/">questo script</a> che suggerisce ulteriori tuning per il vostro <a
href="http://dev.mysql.com/">database server</a> preferito (via <a
href="http://www.zarrelli.org/blog/">giorgio</a>)</p><hr
style="border-top:black solid 1px" />Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><br
/><a
href="http://maurizio.mavida.com/2008/05/16/5-nuovi-indici-per-le-tabelle-di-wordpress/">5 nuovi indici per le tabelle di wordpress</a> was first posted on maggio 16, 2008 at 4:43 pm.<br
/>]]></content:encoded> <wfw:commentRss>http://maurizio.mavida.com/2008/05/16/5-nuovi-indici-per-le-tabelle-di-wordpress/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>MySQL, indici FullText e la lunghezza delle strighe</title><link>http://maurizio.mavida.com/2007/10/05/mysql-indici-fulltext-e-la-lunghezza-delle-strighe/</link> <comments>http://maurizio.mavida.com/2007/10/05/mysql-indici-fulltext-e-la-lunghezza-delle-strighe/#comments</comments> <pubDate>Fri, 05 Oct 2007 21:22:56 +0000</pubDate> <dc:creator>Maurizio Pelizzone</dc:creator> <category><![CDATA[tutorial]]></category> <category><![CDATA[database]]></category> <category><![CDATA[full-text search]]></category> <category><![CDATA[howto]]></category> <category><![CDATA[mysql]]></category> <category><![CDATA[tips]]></category> <guid
isPermaLink="false">http://maurizio.mavida.com/2007/10/05/mysql-indici-fulltext-e-la-lunghezza-delle-strighe/</guid> <description><![CDATA[Leggi l'orginale su http://maurizio.mavida.comAvete mai provato a cercare su un indice FullText con una stringa sotto i 4 caratteri ? select * from tabella where match (nomecampo) against (&#8216;abc&#8217;); Bhe, io dopo essere diventato scemo, ho scoperto che per default la lunghezza minima è impostata a 4 caratteri. Se quindi state cercando stringhe come &#8220;php&#8220;,&#8221;htm&#8221; [...]]]></description> <content:encoded><![CDATA[<p>Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><p><br
/><p>Avete mai provato a cercare su un indice <strong>FullText</strong> con una <em>stringa sotto i 4 caratteri</em> ?</p><div
class="code">select * from tabella where match (nomecampo) against (&#8216;abc&#8217;);</div><p>Bhe, io dopo essere diventato scemo, ho scoperto che per default <strong>la lunghezza minima è impostata a 4 caratteri</strong>.</p><p><img
id="image767" src="http://maurizio.mavida.com/wp-content/uploads/2007/10/mysql-full-text-search.jpg" alt="MySQL, indici FullText e ricerca sotto i 4 caratteri" /></p><p>Se quindi state cercando <strong>stringhe</strong> come &#8220;<em>php</em>&#8220;,&#8221;<em>htm</em>&#8221; o &#8220;<em>css</em>&#8220;, e nonostante siate sicuri che ci siano riscontri, la ricerca non vi restituisce nessun record, non è dovuto ad una <em>tabella corrotta</em>, ma molto più semplicemente perché <strong>l&#8217;indice in condizioni normali non gestisce ricerche di questo tipo</strong>.</p><p>La soluzione, se siete nelle condizioni di <em>modificare il file di configurazione</em>, fortunatamente c&#8217;è, e prevede 3 operazioni</p><ol><li>E&#8217; necessario definire il valore della variabile <strong>ft_min_word_len</strong> all&#8217;interno del file <strong>my.cfg</strong><div
class="code">ft_min_word_len=3</div></li><li><strong>Riavviare il server</strong> in modo che valorizzi in modo corretto la nuova impostazione</li><li>Per finire, è necessario <strong>fare il rebuild degli indici</strong>, in modo che vengano ricostruiti con tutte le informazioni corrette<div
class="code">REPAIR TABLE nometabella QUICK;</div></li></ol><p>Facile come bere un <a
href="http://it.wikipedia.org/wiki/Chupito">chupito</a>&#8230; basta saperlo.</p><p>Per la documentazione ufficiale basta guardare <a
href="http://dev.mysql.com/doc/refman/5.0/en/fulltext-fine-tuning.html">qui</a></p><hr
style="border-top:black solid 1px" />Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><br
/><a
href="http://maurizio.mavida.com/2007/10/05/mysql-indici-fulltext-e-la-lunghezza-delle-strighe/">MySQL, indici FullText e la lunghezza delle strighe</a> was first posted on ottobre 5, 2007 at 11:22 pm.<br
/>]]></content:encoded> <wfw:commentRss>http://maurizio.mavida.com/2007/10/05/mysql-indici-fulltext-e-la-lunghezza-delle-strighe/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Migrare il metabase di IIS con iiscnfg.vbs</title><link>http://maurizio.mavida.com/2007/08/11/migrare-il-metabase-di-iis-con-iiscnfgvbs/</link> <comments>http://maurizio.mavida.com/2007/08/11/migrare-il-metabase-di-iis-con-iiscnfgvbs/#comments</comments> <pubDate>Sat, 11 Aug 2007 11:36:15 +0000</pubDate> <dc:creator>Maurizio Pelizzone</dc:creator> <category><![CDATA[featured]]></category> <category><![CDATA[tutorial]]></category> <category><![CDATA[howto]]></category> <category><![CDATA[shell]]></category> <category><![CDATA[windows]]></category> <guid
isPermaLink="false">http://maurizio.mavida.com/2007/08/11/migrare-il-metabase-di-iis-con-iiscnfgvbs/</guid> <description><![CDATA[Leggi l'orginale su http://maurizio.mavida.comCi sono delle volte nella vita di un sistemista dove dopo aver allestito un nuovo Windows Server 2003, aver installato tutto il necessario compresi antivirus e backup giunge il momento di configurare IIS. Nel caso il server sia adibito ad ospitare nuovi siti, non ci sono altre alternative che la configurazione attraverso [...]]]></description> <content:encoded><![CDATA[<p>Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><p><br
/><p>Ci sono delle volte nella vita di un sistemista dove dopo aver allestito un nuovo <strong>Windows Server 2003</strong>, aver installato tutto il necessario compresi <strong>antivirus</strong> e <strong>backup</strong> giunge il momento di <em>configurare</em> <strong>IIS</strong>.</p><p>Nel caso il server sia adibito ad ospitare nuovi siti, non ci sono altre alternative che la configurazione attraverso l&#8217;<em>interfaccia di amministrazione</em>, ma nel caso di un <strong>migrazione</strong> da un altro server, dove magari sono presenti decine e decine di siti configurati la strada &#8220;<em>facciamolo a mano</em>&#8221; diventa lunga ma sopratutto la probabilità di fare qualche errore aumenta in modo direttamente proporzionale al numero di siti da configurare.</p><p>Diventa quindi lecito domandarsi come importare sulla nuova macchina la configurazione presente sul vecchio server.</p><p>Purtroppo dall&#8217;<em>interfaccia di amministrazione</em> le uniche operazioni che riguardano la gestione del <strong><a
href="http://www.microsoft.com/technet/prodtechnol/windowsserver2003/library/iis/43a51d34-7c81-413b-9727-ec9a19d0b428.mspx">metabase</a></strong> di <strong>IIS</strong> sono relative al <strong>backup</strong> ed relativo <strong>ripristino</strong>, ma fortunatamente Microsoft non ci lascia completamente a mano vuota, rendendo possibile l&#8217;operazione di <strong>esportazione</strong> e <strong>importazione</strong> tramite uno script vbs utilizzabile via <strong>shell</strong>.</p><p>Dal titolo del post, avrete capito che sto parlando di <strong>iiscnfg</strong></p><p>Dopo aver letto un po&#8217; di <a
href="http://technet2.microsoft.com/WindowsServer/it/Library/192019b3-4430-4342-8221-a153a91be5221040.mspx">documentazione</a> ed avendo come obbiettivo l&#8217;<strong>esportazione completa</strong> del <strong>metabase</strong> del vecchio server e la sua <strong>importazione</strong> sulla nuova macchina sono stati sufficienti 2 comandi &#8230;</p><p>Questo è il comando per l&#8217;<a
href="http://technet2.microsoft.com/WindowsServer/it/Library/d76460b0-e6c3-4e95-88d1-064cdb2a048a1040.mspx"><strong>esportazione</strong></a>, che ovviamente va eseguito sul server in cui c&#8217;è la configurazione da copiare.</p><div
class="code">iiscnfg /export /f nomefile /sp / /children</div><p>Vediamo insieme i parametri:</p><ul><li><strong>/f</strong> indica che l&#8217;esportazione deve avvenire su file ( nel mio caso nomefile è c:iisconfig_backup.xml )</li><li><strong>/sp</strong> indica il ramo del metabase, che nel mio caso è un semplice slash che indica tutto ma potrebbe anche indicare un singolo sito</li><li><strong>/children</strong> consente semplicemente di esportare in maniera ricorsiva tutte le sottochiavi</li></ul><p>Se tutto è andato bene dovremmo ritrovaci sotto c un file xml che dobbiamo far arrivare sul nuovo server per poterlo importare.</p><p>Prima di procedere all&#8217;importazione, nel caso abbiate già modificato qualcosa <a
href="http://technet2.microsoft.com/WindowsServer/it/Library/16d212bf-b739-4511-a75a-e55307dfafbb1040.mspx">suggerisco un <strong>backup</strong></a>, che potete effettuare o tramite l&#8217;interfaccia di amministrazione o via <strong>shell</strong> con <strong>iisback</strong>.</p><div
class="code">iisback /backup /b nomebackup</div><p>Arrivato a questo punto vediamo il comando per l&#8217;<a
href="http://technet2.microsoft.com/WindowsServer/it/Library/4e3e1f93-8832-4ff2-8cb1-cfe47e0b5faf1040.mspx"><strong>importazione</strong></a> che è leggermente più complicato &#8230;</p><div
class="code">iiscnfg /import /f nomefile /sp / /dp / /children /merge</div><p>In questo caso ci sono due parametri in più:</p><ul><li><strong>/dp</strong> specifica il percorso della metabase in cui vengono memorizzate le chiavi, discorso simile a quello per /sp e nel mio caso dove voglio importare tutto indico solo lo slash</li><li><strong>/merge</strong> consente di combinare le chiavi nel file XML con le chiavi esistenti della metabase. Forse questo parametro nel caso di una configurazione da zero è inutile, ma nel caso abbiate già fatto modificato la configurazione di IIS questo vi permettera di importare solo le chiavi nuove</li></ul><p>Questo funziona a patto che i <em>percorsi rimangano gli stessi</em>, ovvero se i siti prima erano sul disco e: dovranno essere su e: anche adesso.</p><p>Nel caso non sia possibile ricreare la stessa configurazione,  suggerisco la modifica del file xml con il <strong>metabase</strong> prima dell&#8217;<strong>importazione</strong>, altrimenti vi tocca modificare a mano tramite l&#8217;interfaccia di amministrazione sito per sito.</p><p>Un ultima cosa; se durante la migrazione i due server si possono &#8220;parlare&#8221; potrebbe essere più comodo <a
href="http://technet2.microsoft.com/WindowsServer/it/Library/dd2cc52d-dfda-481b-bd65-f234132b286e1040.mspx">copiare direttamente la configurazione</a> tra un server e l&#8217;altro, ma nel mio caso, essendo i due server in due posti fisicamente diversi, ed essendo sotto <strong>firewall</strong> non è stato possibile praticarlo.</p><p>Sperando di non aver dimenticato nulla, e di non aver scritto caz**te, questo è quanto &#8230;</p><p>Link di riferimento: <a
href="http://technet2.microsoft.com/WindowsServer/it/Library/192019b3-4430-4342-8221-a153a91be5221040.mspx">Gestione di configurazioni di <strong>IIS</strong> tramite script</a></p><p>[tags]IIS, metabase, iiscnfg, iisback [/tags]</p><hr
style="border-top:black solid 1px" />Leggi l'orginale su <a
href="http://maurizio.mavida.com">http://maurizio.mavida.com</a><br
/><a
href="http://maurizio.mavida.com/2007/08/11/migrare-il-metabase-di-iis-con-iiscnfgvbs/">Migrare il metabase di IIS con iiscnfg.vbs</a> was first posted on agosto 11, 2007 at 12:36 pm.<br
/>]]></content:encoded> <wfw:commentRss>http://maurizio.mavida.com/2007/08/11/migrare-il-metabase-di-iis-con-iiscnfgvbs/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> </channel> </rss>
